
Дополнительные примеры использования библиотеки Impacket, предназначенные для обучения.
Этот репозиторий содержит несколько коротких Python-скриптов, созданных с использованием библиотеки Impacket. Основная цель этого проекта — помочь мне самому и другим, кто хочет перейти от использования готовых примеров impacket к изменению/созданию собственных скриптов. Эти скрипты не обязательно оптимизированы с точки зрения удобства или OPSEC, однако я постарался сделать их максимально динамичными на случай, если кто-то захочет изменить их поведение по умолчанию.

Скрипт wmi_reg_exec.py предназначен для выполнения файла исключительно через WMI путём записи в реестр Windows. Для этого он сначала записывает файл в кодировке base64 в целевой раздел реестра вместе с обходом AMSI/ETW для PowerShell. Затем PowerShell-стегер выполняет обход AMSI/ETW и запускает заданный файл рефлексивно в памяти. C#-бинарники поддерживаются «нативно» при условии, что их основное пространство имён, класс и метод являются публичными. Если они не указаны, скрипт автоматически попытается угадать пространство имён на основе имени файла. Если передан Non-.NET файл, он сначала преобразуется в шелл-код с помощью ветки Donut с поддержкой syscalls от @s4ntiago_p, а затем внедряется в C# D/Invoke самоинжектор от @Snovvcrash. После этого самоинжектор компилируется с помощью MCS и используется так же, как и любой другой 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)
Скрипт dll_proxy_exec.py предназначен для выполнения заданного DLL-файла с помощью LOLBin через DLL Hijacking/Proxying/Side-Loading — или как бы вы это ни называли. Сначала указанный DLL загружается на целевой хост по SMB. Затем скрипт копирует указанный EXE из System32 в ту же папку, куда был загружен DLL. Наконец, EXE из System32 запускается из нового расположения, в результате чего он загружает/выполняет заданный DLL.
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)
Скрипт remote_ssp_dump.py предназначен для извлечения учётных данных из LSASS на удалённом хосте с помощью SSP DLL из проекта Nanodump. По умолчанию скрипт использует немодифицированные SSP DLL и загрузчик, встроенные в файл. В качестве альтернативы скрипт будет использовать модифицированные DLL или загрузчик, если они присутствуют в текущем каталоге со стандартными именами (nanodump_ssp.x64.dll и load_ssp.x64.exe соответственно). При запуске скрипт загружает DLL и загрузчик на целевой хост, выполняет загрузчик, скачивает дамп LSASS и разбирает его, извлекая хэши с помощью Pypykatz. Кроме того, этот скрипт интегрирован со скриптами wmi_reg_exec.py и dll_proxy_exec.py, что позволяет использовать разные способы выполнения загрузчика 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)
Скрипт dump_ntds_creds.py предназначен для создания дампа, эксфильтрации и разбора всех доменных хэшей с целевого контроллера домена. Сначала он запускает LOLBin ntdsutil.exe через WMI для создания дампа, а затем скачивает полученные файлы ntds.dit, SYSTEM и SECURITY по SMB. После этого скрипт разбирает все доменные учётные данные из файла дампа и сохраняет результаты в файл.
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 не может получить вывод Non-.NET PE-файла без записи на диск. Если вы хотите попытаться получить вывод в этом случае, необходимо, чтобы сам PE-файл записывал свой вывод в файл с именем, указанным в скрипте. Это может быть захардкожено в PE-файле либо передано через флаг -a, если PE уже имеет аргумент для записи вывода в файл. Пример этого процесса показан в гифке «Example PE Demo», где этот процесс демонстрируется на примере Mimikatz.wmi_reg_exec.py записывает данные в реестр, МЕДЛЕННЫЙ. По моим тестам, на каждый МБ может уходить более 4 минут. Я не совсем уверен, с чем это связано. Если вы знаете, как ускорить этот процесс без полного переписывания скрипта, пул-реквесты всегда приветствуются. :)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