
Un arsenal de PowerShell para chicos y chicas de seguridad.
[!IMPORTANT]
Este repositorio ahora está archivado. Aunque fue un viaje divertido, creo que PSArmoury ha superado su utilidad.
PowerShell Armoury está diseñado para pentesters, miembros de equipos de "inserte-color-aquí" y todos aquellos que utilizan una variedad de herramientas de PowerShell durante sus compromisos. Permite descargar y almacenar todos tus scripts favoritos de PowerShell en un único archivo ofuscado.
No tienes que preocuparte por actualizar Rubeus, PowerView, ... manualmente. Solo crea un archivo de configuración una vez o usa el predeterminado incluido con la herramienta. De ahora en adelante, solo tienes que ejecutar "New-PSArmoury" antes de dirigirte al próximo compromiso.
Además, PSArmoury ofusca tu código y viene con un bypass de AMSI incluido. El diseño modular debería facilitarte cambiar el código de evasión u ofuscación en caso de que haya una detección.
La versión actual de PSArmoury favorece un diseño modular.
New-PSArmoury.ps1
PSArmoury.json
utilities
ConvertTo-Powershell.ps1
Invoke-Shuffle.ps1
modules
evasion.ps1
obfuscation.ps1
El código se divide en un script generador principal llamado New-PSArmoury.ps1, que es el que ejecutas. El código para evasión, ofuscación y desofuscación se almacena en archivos .ps1 separados en el directorio modules. Estos archivos separados son invocados por el script principal y deberían facilitarte cambiar funciones específicas (como un bypass de AMSI).
Además del directorio modules, también está el directorio utilities. Aquí encontrarás scripts independientes que pueden ser útiles en escenarios específicos.
La ruta predeterminada del directorio modules es .\modules, donde el punto se refiere al directorio de trabajo actual de tu shell. Puedes cambiar la ruta del directorio modules usando el argumento -ModulesDirectory de New-PSArmoury.
Sin embargo, los nombres de los archivos de script en sí están codificados en el script principal y siempre se espera que sean:
Echemos un vistazo más de cerca a estos dos.
Este script debe contener el código destinado a evadir lo que sea que pretendas evadir. Por defecto, contiene un conocido bypass de AMSI (gracias amsi.fail). Ten en cuenta que:
Este script debe contener el código utilizado para ofuscación y desofuscación. El obfuscation.ps1 predeterminado utiliza cifrado RC2. Ejemplos listos para usar:
Ten en cuenta que TEMPLATE_obfuscation_empty.ps1 realmente no hace nada en absoluto y sirve como plantilla para que construyas tu propia función.
Si quieres usar alguno de ellos, simplemente renómbralo a "obfuscation.ps1" y elimina el archivo predeterminado.
Si deseas crear una versión personalizada, ten en cuenta lo siguiente con respecto a la ofuscación:
Y asegúrate de recordar estas cosas en términos de desofuscación:
El directorio utilities contiene scripts independientes útiles.
El archivo de configuración debe ser un json válido que consista en un solo array con uno o más objetos, donde cada objeto se interpreta como una única fuente de script. Cada objeto tiene los siguientes atributos
Name (Mandatory)
Un nombre de tu elección para identificar el script incluido en este objeto. Está pensado como referencia para ti mismo.
URL (Mandatory)
La ubicación para obtener el contenido del script. Puede ser una URL a un recurso web (https://) o una ruta local (C:) o un recurso de red (\...). La URL se introduce en Net.Webclient o en Get-Item de PowerShell respectivamente. Así que básicamente cualquier formato que uno de esos dos pueda manejar por defecto debería funcionar.
Type (Mandatory)
Esto da una pista sobre la ubicación del script al creador del armory. Hay tres tipos válidos:
FileInclusionFilter (Optional)
Solo se interpretará en un objeto de tipo "GitHub". Se comparará con el operador de comparación "like" de PowerShell contra el nombre completo del archivo, así que ten en cuenta que debes incluir los comodines tú mismo. No olvides incluir un asterisco (*) si quieres coincidir con parte de un nombre de archivo. "*.ps1" significa todos los archivos que terminan en ".ps1", pero ".ps1" solo significa ".ps1".
FileExclusionFilter (Optional)
Como el InclusionFilter pero obviamente al revés. La exclusión tiene prioridad.
Consulta la ayuda incorporada de PowerShell (man -full New-PSArmoury) para más detalles.
-Path
La ruta a tu nuevo archivo armory. El valor predeterminado es ".\MyArmoury.ps1"
-FromFile
Carga tus scripts de PowerShell directamente desde una carpeta o archivo local y no tienes que proporcionar un archivo de configuración.
-Config
La ruta a tu archivo de configuración JSON. Echa un vistazo al ejemplo que viene con este script para ideas.
-ModulesDirectory
La ruta al directorio modules. El valor predeterminado es ".\modules". Si se usa ModulesDirectory, entonces los parámetros EvasionPath y ObfuscationPath no se pueden usar.