
Mais exemplos usando a biblioteca Impacket, projetados para fins de aprendizado.
Este repositório contém alguns scripts curtos em Python criados usando a biblioteca Impacket. O objetivo principal deste projeto é ajudar a mim e a outras pessoas que desejam fazer a transição de usar os exemplos fornecidos do impacket para modificar/criar seus próprios scripts. Esses scripts não são necessariamente otimizados para utilidade ou preocupações com OPSEC; no entanto, tentei torná-los o mais dinâmicos possível, caso alguém queira alterar seu comportamento padrão.

O script wmi_reg_exec.py foi projetado para executar um arquivo exclusivamente via WMI, gravando-o no registro do Windows. Ele faz isso primeiro gravando o arquivo codificado em base64 em um local de registro de destino, juntamente com um bypass de AMSI/ETW do PowerShell. Em seguida, um stager do PowerShell é usado para executar o bypass de AMSI/ETW e o arquivo fornecido de forma reflexiva na memória. Binários em C# são suportados 'nativamente' desde que seu namespace, classe e método principais sejam todos publicamente acessíveis. Se não forem fornecidos, o script tentará automaticamente adivinhar o namespace com base no nome do arquivo. Se um arquivo não .NET for fornecido, ele é primeiro transformado em shellcode usando o branch de syscall do Donut de @s4ntiago_p e, em seguida, inserido no self-injector D/Invoke em C# de @Snovvcrash. O self-injector é então compilado usando MCS e usado da mesma forma que qualquer outro binário em C#.
usage: wmi_reg_exec.py [-h] [-f file] [-a args] [-n namespace] [-r key] [-p patch] [-rp remotePath] [-nooutput] [-H hash] [-k]
[-dc-ip IPAddress]
target
Store exe in registry and execute via powershell
positional arguments:
target Target host to execute file on
optional arguments:
-h, --help show this help message and exit
-f file, -file file File to execute
-a args, -args args Command line arguments for file
-n namespace, -namespace namespace
Namespace.Class containing main method to execute (Ex: Rubeus.Program)
-r key, -reg-key key Registry key to write file to (Default: HKLM\Software\Microsoft\Edge)
-p patch, -patch patch
File containing AMSI/ETW patch to perform before execution
-rp remotePath, -remote-path remotePath
The remote path to write files to (Default: C:\Windows\Temp)
-nooutput Do not attempt to get/print output
authentication:
-H hash, -hash hash NTHash for login via PtH
-k Use Kerberos authentication with credentials from the KRB5CCNAME ccache file
-dc-ip IPAddress IP Address of the domain controller (useful for Kerberos auth)
O script dll_proxy_exec.py foi projetado para executar um arquivo DLL fornecido usando um LOLBin via DLL Hijacking/Proxying/Side-Loading, ou como você quiser chamar. A DLL fornecida será primeiro enviada para o destino via SMB. O script copiará então o executável System32 especificado para a mesma pasta da DLL enviada. Por fim, o executável do System32 será executado a partir do novo local, fazendo com que ele carregue/execute a DLL fornecida.
usage: dll_proxy_exec.py [-h] [-f file] [-e exe] [-output] [-H hash] [-k] [-dc-ip IPAddress] [-rp remotePath] target
Execute file via DLL proxying on a remote host.
positional arguments:
target [[domain/]username[:password]@]<hostname or address>
optional arguments:
-h, --help show this help message and exit
-f file, -file file DLL file to execute
-e exe, -exe exe System32 EXE used to execute DLL file
-output Attempt to get output
-rp remotePath, -remote-path remotePath
The remote path to write files to (Default: C:\Windows\Temp)
authentication:
-H hash, -hash hash NTHash for login via PtH
-k Use Kerberos authentication with credentials from the KRB5CCNAME ccache file
-dc-ip IPAddress IP Address of the domain controller (useful for Kerberos auth)
O script remote_ssp_dump.py foi projetado para extrair credenciais do LSASS de um host remoto usando a DLL SSP do Nanodump. Por padrão, o script usará a DLL SSP e o loader não modificados, que estão embutidos no arquivo. Alternativamente, o script usará uma DLL ou um loader modificado se estiverem presentes no diretório atual com seus nomes padrão (nanodump_ssp.x64.dll e load_ssp.x64.exe, respectivamente). Quando executado, o script enviará a DLL e o loader para o destino, executará o loader, baixará o dump do LSASS e o analisará em busca de hashes usando Pypykatz. Além disso, este script foi integrado aos scripts wmi_reg_exec.py e dll_proxy_exec.py, permitindo diferentes maneiras de executar o loader do SSP.
usage: remote_ssp_dump.py [-h] [-t timeout] [-rp remotePath] [-re] [-dp] [-f dll] [-e exe] [-r key] [-H hash] [-k]
[-dc-ip IPAddress]
target
Dump creds from LSASS remotely using Nanodump SSP
positional arguments:
target [[domain/]username[:password]@]<hostname or address>
optional arguments:
-h, --help show this help message and exit
-t timeout, -timeout timeout
Timeout in seconds to wait for LSASS dump file to be created (Default: 3)
-rp remotePath, -remote-path remotePath
The remote path to write files to (Default: C:\Windows\Temp)
-re, -reg-exec Execute SSP loader by writing it to the registry and executing it in memory with PowerShell
-dp, -dll-proxy Execute SSP loader via DLL Proxying (See below for options)
dll proxying options:
-f dll, -file dll DLL file to execute
-e exe, -exe exe System32 EXE used to execute DLL file
registry execute options:
-r key, -reg-key key Registry key to write file to (Default: HKLM\Software\Microsoft\Edge)
authentication:
-H hash, -hash hash NTHash for login via PtH
-k Use Kerberos authentication with credentials from the KRB5CCNAME ccache file
-dc-ip IPAddress IP Address of the domain controller (useful for Kerberos auth)
O script dump_ntds_creds.py foi projetado para extrair, exfiltrar e analisar todos os hashes de domínio de um controlador de domínio de destino. Ele primeiro executa o LOLBin ntdsutil.exe via WMI para criar o dump e, em seguida, baixa os arquivos ntds.dit, SYSTEM e SECURITY resultantes via SMB. Em seguida, ele analisa todas as credenciais de domínio do arquivo extraído e salva os resultados em um arquivo.
usage: dump_ntds_creds.py [-h] [-nooutput] [-o filename] [-H hash] [-k] [-dc-ip IPAddress] [-rp remotePath] target
Dump NTDS.dit file, exfiltrate, and parse locally.
positional arguments:
target [[domain/]username[:password]@]<hostname or address>
optional arguments:
-h, --help show this help message and exit
-nooutput Do not print dumped hashes to console
-o filename, -outfile filename
Name to save output files with (Default: DomainDump)
-rp remotePath, -remote-path remotePath
The remote path to write files to (Default: C:\Windows\Temp)
authentication:
-H hash, -hash hash NTHash for login via PtH
-k Use Kerberos authentication with credentials from the KRB5CCNAME ccache file
-dc-ip IPAddress IP Address of the domain controller (useful for Kerberos auth)
wmi_reg_exec.py não consegue obter a saída de um arquivo PE não .NET sem gravar em disco. Se você quiser tentar obter a saída nesse caso, você precisa que o próprio arquivo PE escreva sua própria saída usando o nome de arquivo especificado no script. Isso pode ser codificado no arquivo PE, ou pode ser fornecido via a flag -a do script, se o PE já tiver um argumento para gravar sua saída em um arquivo. Para um exemplo disso, veja o gif "Demonstração de Exemplo PE", que demonstra esse processo com o Mimikatz.wmi_reg_exec.py grava no registro é LENTA. Nos meus testes, pode levar mais de 4 minutos por MB. Não sei ao certo por que isso acontece. Se você souber de uma maneira de acelerar isso sem precisar reescrever tudo, pull requests são sempre bem-vindos. :)remote_ssp_dump.py: https://github.com/helpsystems/nanodumpwmi_reg_exec.py: https://github.com/S4ntiagoP/donut/tree/syscallswmi_reg_exec.py: https://twitter.com/snovvcrash/status/1558837027122167810