
D'autres exemples utilisant la bibliothèque Impacket conçus à des fins d'apprentissage.
Ce dépôt contient quelques courts scripts Python créés à l'aide de la bibliothèque Impacket. L'objectif principal de ce projet est de m'aider, moi et les autres, à passer de l'utilisation des exemples impacket fournis à la modification/création de scripts personnalisés. Ces scripts ne sont pas nécessairement optimisés pour l'utilité ou pour les considérations OPSEC. J'ai cependant essayé de les rendre aussi dynamiques que possible, au cas où quelqu'un voudrait modifier leur comportement par défaut.

Le script wmi_reg_exec.py est conçu pour exécuter un fichier exclusivement via WMI en écrivant dans le registre Windows. Pour ce faire, il écrit d'abord le fichier encodé en base64 dans un emplacement du registre cible, accompagné d'un bypass AMSI/ETW PowerShell. Un stager PowerShell est ensuite utilisé pour exécuter le bypass AMSI/ETW et le fichier fourni en mémoire par réflexion. Les binaires C# sont pris en charge « nativement » tant que leur espace de noms principal, leur classe et leur méthode sont tous accessibles publiquement. S'il n'est pas fourni, le script essaiera automatiquement de deviner l'espace de noms en fonction du nom du fichier. Si un fichier non-.NET est fourni, il est d'abord transformé en shellcode à l'aide de la branche syscall de Donut de @s4ntiago_p, puis inséré dans l'auto-injecteur C# D/Invoke de @Snovvcrash. L'auto-injecteur est ensuite compilé avec MCS et utilisé comme n'importe quel autre binaire 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)
Le script dll_proxy_exec.py est conçu pour exécuter un fichier DLL donné à l'aide d'un LOLBin via DLL Hijacking/Proxying/Side-Loading, ou quel que soit le nom qu'on lui donne. La DLL donnée sera d'abord envoyée sur la cible via SMB. Le script copiera ensuite l'exe System32 spécifié dans le même dossier que la DLL envoyée. Enfin, l'exe System32 sera exécuté depuis le nouvel emplacement, ce qui entraîne le chargement/l'exécution de la DLL donnée.
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)
Le script remote_ssp_dump.py est conçu pour extraire les identifiants de LSASS depuis un hôte distant à l'aide de la DLL SSP de Nanodump. Par défaut, le script utilisera la DLL SSP et le loader non modifiés, qui sont intégrés dans le fichier. Alternativement, le script utilisera une DLL ou un loader modifié s'ils sont présents dans le répertoire courant avec leurs noms standards (nanodump_ssp.x64.dll et load_ssp.x64.exe respectivement). Lors de son exécution, le script enverra la DLL et le loader sur la cible, exécutera le loader, téléchargera le dump LSASS et l'analysera pour en extraire les hashs à l'aide de Pypykatz. De plus, ce script a été intégré aux scripts wmi_reg_exec.py et dll_proxy_exec.py, ce qui permet différentes manières d'exécuter le loader 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)
Le script dump_ntds_creds.py est conçu pour extraire, exfiltrer et analyser tous les hashs du domaine depuis un contrôleur de domaine cible. Il exécute d'abord le LOLBin ntdsutil.exe via WMI pour créer le dump, puis télécharge les fichiers ntds.dit, SYSTEM et SECURITY résultants via SMB. Il analyse ensuite toutes les informations d'identification du domaine à partir du fichier dumpé et enregistre les résultats dans un fichier.
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 ne peut pas récupérer la sortie d'un fichier PE non-.NET sans écrire sur le disque. Si vous souhaitez tenter de récupérer la sortie dans ce cas, vous devez faire en sorte que le fichier PE écrive lui-même sa propre sortie en utilisant le nom de fichier spécifié dans le script. Cela peut être codé en dur dans le fichier PE, ou être fourni via l'option -a du script si le PE possède déjà un argument pour écrire sa sortie dans un fichier. Pour un exemple de ceci, voir le gif « Exemple de démo PE » qui illustre ce processus avec Mimikatz.wmi_reg_exec.py écrit dans le registre est LENTE. D'après mes tests, cela peut prendre plus de 4 minutes par Mo. Je ne sais pas vraiment pourquoi. Si vous connaissez un moyen de l'accélérer sans avoir à tout réécrire, les pull requests sont toujours les bienvenues. :)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