root@thehacksparrow:~/writeups$ SYSTEM ONLINE
root@sparrow:~/writeups$ cat administrator.md
// writeups

Administrator

9 Nov 2024 · 36 min read · root access
Administrator - maquina de Hack The Box

Executive summary — Administrator is an assumed breach scenario: a low-privilege domain credential is handed over and the goal is to escalate to Domain Admin. There isn't a single CVE anywhere in the chain — the entire compromise rests on badly delegated Active Directory permissions chained together, plus a backup file that never should have lived on an FTP service running on the domain controller itself. That's exactly what makes it representative of a real corporate AD: the attack path isn't opened by a missing patch, but by the historical buildup of delegations nobody ever audited as a graph.

PlatformHack The Box
Operating systemWindows Server 2022
DifficultyMedium
StatusRetired
Target IP10.129.59.211

Attack map

[HANDED OVER]  olivia : ichliebedich   (assumed breach)
   │  ACE  GenericAll  over the user object michael
   ▼
[ACE #1]  michael           ◄── bloodyAD set password
   │  ACE  ForceChangePassword  over the user object benjamin
   ▼
[ACE #2]  benjamin          ◄── sole member of "Share Moderators"
   │  21/FTP → reachable home dir → Backup.psafe3 (952 bytes)
   ▼
[Password Safe V3]  pwsafe2john + rockyou → master "tekieromucho"
   │  Twofish-CBC → alexander✗ (disabled) · emma✗ (disabled) · emily✓
   ▼
[emily]  Remote Management Users → WinRM  (user.txt)
   │  ACE  GenericWrite  over ethan → fake SPN planted
   ▼
[Targeted Kerberoasting]  ethan's TGS cracked → "limpbizkit"
   │  ACE  GetChanges + GetChangesAll  over the DOMAIN object
   ▼
[DCSync]  Administrator's NT hash: 3dc553ce4b9fd20bd016e098d2d2fd2e
   │  Pass-the-Hash → WinRM 5985
   ▼
[DOMAIN ADMIN]  administrator\administrator  (root.txt)

1. Reconnaissance

sudo nmap -p- --min-rate 3000 -T4 -Pn -oN scans/allports.txt 10.129.59.211
Not shown: 65509 closed tcp ports (reset)
PORT      STATE SERVICE
21/tcp    open  ftp
53/tcp    open  domain
88/tcp    open  kerberos-sec
135/tcp   open  msrpc
139/tcp   open  netbios-ssn
389/tcp   open  ldap
445/tcp   open  microsoft-ds
464/tcp   open  kpasswd5
593/tcp   open  http-rpc-epmap
636/tcp   open  ldapssl
3268/tcp  open  globalcatLDAP
3269/tcp  open  globalcatLDAPssl
5985/tcp  open  wsman
9389/tcp  open  adws
47001/tcp open  winrm
49664/tcp open  unknown

The 53+88+135+139+389+445+464+636+3268+3269+9389 footprint is a textbook Domain Controller. What isn't textbook: port 21. A DC has no operational reason to serve FTP. When a scan reveals a service that doesn't belong to the host's role, it's almost always the element added on purpose — and in a real environment, the asset nobody remembers installing. Flagged as a priority target from minute one.

sudo nmap -p21,53,88,135,389,445,5985 -sCV -oN scans/services.txt 10.129.59.211
PORT     STATE SERVICE       VERSION
21/tcp   open  ftp           Microsoft ftpd
| ftp-syst:
|_  SYST: Windows_NT
53/tcp   open  domain        Simple DNS Plus
88/tcp   open  kerberos-sec  Microsoft Windows Kerberos (server time: 2026-09-17 22:17:24Z)
389/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: administrator.htb0., Site: Default-First-Site-Name)
445/tcp  open  microsoft-ds?
5985/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)

Host script results:
|_clock-skew: 7h00m05s
| smb2-security-mode:
|   3:1:1:
|_    Message signing enabled and required

Three actionable facts from this scan: the domain is administrator.htb (use this name in every tool from here on), there's a 7-hour clock skew that will break Kerberos until fixed (§1.1), and SMB signing is required, which rules out any NTLM relay outright.

sudo bash -c 'echo "10.129.59.211 administrator.htb dc.administrator.htb DC" >> /etc/hosts'

Kerberos issues tickets for a Service Principal Name built from the service's name, not its IP. Attacking by address forces a fallback to NTLM, and with SMB signing required several paths close down. All work targets dc.administrator.htb from here on.

1.1 The Kerberos clock skew

date          # Thu Sep 17 03:17:37 PM UTC 2026   <- Kali
              # server time:  2026-09-17 22:17:24Z <- DC

Kerberos embeds timestamps in the authenticator specifically to prevent replay attacks, and the KDC rejects any request whose skew exceeds MaxTimeSkew (5 minutes by default). With a 7-hour gap, every Kerberos operation fails with KRB_AP_ERR_SKEW.

sudo ntpdate -u 10.129.59.211
CLOCK: time stepped by 25206.536621
2026-09-17 22:17:43.794292 (+0000) +25206.536621 +/- 0.018821 10.129.59.211 s1 no-leap

The mistake that cost an attempt: after syncing, the first GetUserSPNs failed again with KRB_AP_ERR_SKEW. The cause was that systemd-timesyncd was still active on Kali and re-adjusted the clock back to the real time within minutes, undoing the manual sync. Syncing once isn't enough: the system's NTP service has to be disabled for the duration of the exercise.

sudo systemctl stop systemd-timesyncd
sudo timedatectl set-ntp false
sudo ntpdate -u 10.129.59.211
CLOCK: time stepped by 25214.667703
Thu Sep 17 10:20:52 PM UTC 2026

From here on every Kerberos operation works. Alternative without touching the system clock: faketime shifts time only for the attacking process, avoiding broken TLS certificates or local logs — the correct choice in a real engagement.

🔒 Clearance required

This content is Root Access only. Everything else on the site — the free tier, the whole public library — stays open.

See Root Access plans

No account? Create one free then upgrade from your console.