Certificate HackTheBox (Hard)
Escaneo de puertos
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn <IP>nmap -sCV -p<PORTS> <IP>Info:
Starting Nmap 7.95 ( https://nmap.org ) at 2025-10-16 11:43 PDT
Nmap scan report for 10.10.11.71
Host is up (0.029s latency).
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
80/tcp open http Apache httpd 2.4.58 (OpenSSL/3.1.3 PHP/8.0.30)
|_http-server-header: Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.0.30
|_http-title: Did not follow redirect to http://certificate.htb/
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2025-10-16 18:44:25Z)
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 (Domain: certificate.htb0., Site: Default-First-Site-Name)
|_ssl-date: 2025-10-16T18:46:04+00:00; +1m23s from scanner time.
| ssl-cert: Subject: commonName=DC01.certificate.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:DC01.certificate.htb
| Not valid before: 2024-11-04T03:14:54
|_Not valid after: 2025-11-04T03:14:54
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: certificate.htb0., Site: Default-First-Site-Name)
|_ssl-date: 2025-10-16T18:46:04+00:00; +1m23s from scanner time.
| ssl-cert: Subject: commonName=DC01.certificate.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:DC01.certificate.htb
| Not valid before: 2024-11-04T03:14:54
|_Not valid after: 2025-11-04T03:14:54
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: certificate.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=DC01.certificate.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:DC01.certificate.htb
| Not valid before: 2024-11-04T03:14:54
|_Not valid after: 2025-11-04T03:14:54
|_ssl-date: 2025-10-16T18:46:04+00:00; +1m23s from scanner time.
3269/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: certificate.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=DC01.certificate.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:DC01.certificate.htb
| Not valid before: 2024-11-04T03:14:54
|_Not valid after: 2025-11-04T03:14:54
|_ssl-date: 2025-10-16T18:46:04+00:00; +1m23s from scanner time.
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
9389/tcp open mc-nmf .NET Message Framing
49666/tcp open msrpc Microsoft Windows RPC
49691/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49692/tcp open msrpc Microsoft Windows RPC
49693/tcp open msrpc Microsoft Windows RPC
49711/tcp open msrpc Microsoft Windows RPC
49714/tcp open msrpc Microsoft Windows RPC
49734/tcp open msrpc Microsoft Windows RPC
Service Info: Hosts: certificate.htb, DC01; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-time:
| date: 2025-10-16T18:45:22
|_ start_date: N/A
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled and required
|_clock-skew: mean: 1m21s, deviation: 2s, median: 1m22s
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 95.41 secondsVeremos varios puerto interesantes, pero entre ellos serian el WinRM, LDAP, SMB, etc... Tambien vemos que nos esta mostrando un dominio junto con un DC en este caso DC01, por lo que vamos añadirlos a nuestro archivo hosts.
Lo guardaremos y probaremos a enumerar dicho dominio a ver que nos encontramos.
Si intentamos obtener informacion mediante los servidores DNS tampoco veremos informacion relevante.
Info:
Por lo que vamos a probar directamente por la Web que tiene en el puerto 80 metiendonos en dicho dominio:
Veremos una pagina normal sin nada aparentemente sospechoso, pero si le damos algunas opciones veremos que funciona por PHP esto es bastante interesante, tambien vemos un login y register, en el cual nos podremos crear una cuenta y posteriormente iniciar sesion con la misma, si nos vamos a cursos y de ahi bajamos un poco, dandole a cualquier curso veremos lo siguiente en la URL.
Vemos que esta llamando a un parametro con id, pero si le damos a inscribirnos en dicho curso veremos lo siguiente:
Concatena 2 parametros diferentes, ya tenemos varias cosas interesantes por las que investigar mas.
Evasive ZIP Concatenation
Una vez que nos inscribamos en el curso, si bajamos un poco veremos varias opciones, entre ellas Watch y otra interesante Submit, dandole a esta ultima veremos en la URL esto:
Vemos que hay un upload.php, la cosa ya se va poniendo interesante, tambien nos comentan las normas de subida.
Vemos bastante interesante el que podamos subir un archivo comprimido en ZIP podriamos probar a realizar un bypass de este mismo metiendo varios archivos concatenados, entre ellos que sean PDFs y despues un PHP, ya que generalmente las herramientas solo leen el ultimo archivo dentro del comprimido, por lo que dejaremos uno "legal" que sea un PDF en la ultima posicion y antes un archivo PHP con alguna reverse shell o algo parecido.
Escalate user xamppuser
URL = Info de la tecnica de Bypass ZIP / Info2 de la tecnica Bypass ZIP
shell.php
URL = GitHub Codigo Shell PHP
Ahora vamos a crear un archivo valido PDF con este comando:
Ahora vamos a comprimirlo por separado de esta forma:
Vamos a concatenar los ZIPs:
Antes de hacer nada vamos a ponernos a la escucha:
Ahora este ZIP lo subimos a la pagina, una vez echo esto si le damos al boton HERE veremos nuestro supuesto dummy.pdf en la pagina con un 404, pero si modificamos ese archivo en la URL por el nombre de shell.php veremos que funciona.
Pasar de esto:
Ha esto:
Ahora si volvemos donde tenemos la escucha, veremos lo siguiente:
Veremos que ha funcionado, por lo que vamos a investigar un poco a ver que vemos interesante por aqui.
Investigando un poco y vamos listando los recursos de los directorios a medida que vamos llendo para atras, veremos en esta ruta algo interesante, que es donde se aloja la pagina web.
Info:
Vemos que hay un archivo llamado db.php que suele contener las credenciales de conexion a la DDBB de mysql en este caso.
mysql (Windows)
db.php
Vemos que las credenciales de mysql son los siguientes:
Vamos a conectarnos a dicha DDBB con el binario de mysql de esta forma:
Info:
Veremos varias DDBBs interesantes, pero entre ellas una que llama la atencion certificate_webapp_db, vamos a ver que contiene.
Info:
Ahora vamos a ver que contiene la tabla users:
Info:
Veremos muy interesante que el unico usuario que es admin en la pagina es el usuario sara.b, por lo que vamos a probar a crackear dicha contraseña.
Escalate user sara.b
hash
Ahora vamos a probar con john:
Info:
Veremos que ha funcionado, pero en vez de iniciar sesion en la pagina, vamos a ver si estas credenciales son validas a nivel de sistema.
Info:
Veremos que si funciona, por lo que estas credenciales son validas a nivel de dominio, pero si las probamos directamente a conectarnos por WinRM.
Evil-winrm
Info:
Veremos que ha funcionado por lo que seremos dicho usuario.
Escalate user lion.sk
Sabiendo que tenemos unas credenciales y que podemos entrar por WinRM vamos a descargarnos un ZIP que nos sirva para importarlo en la herramienta de BloodHound de esta forma.
Info:
Vemos que hay 2 subdominios mas los cuales vamos añadir a nuestro archivo hosts.
BloodHound
Ahora vamos a instalar BloodHound de forma rapida en un docker:
URL = Download BloodHound en Docker
Info:
Ahora que esta importado en nuestro docker y levantado podremos acceder a el desde la siguiente URL.
Nos logueamos con las credenciales propocionadas por la herramienta, entrando nos pedira cambiar las credenciales y ya nos metera dentro:
Una vez dentro vamos a importar el .zip y tendremos que esperar un poco a que cargue todos los datos, despues cuando vayamos al dashboard principal veremos todos los datos, vamos a investigar el usuario sara.b a ver que tiene.

Veremos esto que a simple vista no es nada interesante, por lo que vamos a dejarlo aparcado ahi y seguiremos investigando en las carpetas del usuario a ver que podremos ver.
Si listamos el propio directorio de cuando nos metemos por evil-winrm veremos lo siguiente:
Veremos una carpeta llamada WS-01, entrando dentro veremos:
Un archivo de texto con alguna descripcion y despues algo super interesante un .pcap (Una captura de datos de la red en ese momento con wireshark).
Description.txt
Ahora si vemos la captura con wireshark del .pcap veremos muchisimos datos, pero vamos a filtrar por metodos de autenticacion que son los que nos interesa por si hubiera capturado algo de kerberos5 ya que esta en un dominio los NTLM no nos interesan.
Antes vamos a descargarnos el archivo:
Info:
Ahora si filtramos por kerberos veremos algunos paquetes:

Aqui vemos claramente en el cname del AS-REP (Respuesta del servidor) que pertenece dicho TGT al usuario lion.sk, ahora vamos a ver si esta por ahi su TGT para intentar crackearlo.

En la parte de AS-REQ si nos vamos a la parte de padata en los campos de etype y cipher podremos montarnos nuestro propio hash para poder crackearlo con john pero tendremos que montar el hash de forma correcta quedando algo asi:
Cogemos el salt super importante:

El formato de un hash kerberos5 seria la siguiente:
Asi quedaria formado:
hash.krb5
Ahora vamos a probar a crackearlo.
Info:
Veremos que ha funcionado, por lo que vamos a probar a conectarnos por WinRM con dichas credenciales del usuario.
Info:
Veremos que ha funcionado, por lo que leeremos la flag del usuario.
user.txt
Escalate user ryan.k
Vamos a ver si descubre alguna vulnerabilidad o no en el dominio del AD con una herramienta:
Info:
Ahora vamos a ver que nos ha reportado:
Info:
Veremos que hemos encontrado una vulnerabilidad ESC3 en la plantilla Delegated-CRA. Esta es una vulnerabilidad de Certificate Request Agent que puede ser explotada.
Primero obtendremos un certificado de Agent:
Info:
Ahora vamos a usar el certificado de Agent para solicitar un certificado para ryan.k (Vamos a probar con este usuario que es de los que nos quedan en el dominio):
Info:
Veremos que ha funcionado, por lo que ahora vamos a obtener el TGT del usuario, pero esto puede dar un error si no sincronizamos bien el timezone del DC por lo que haremos lo siguiente:
Info:
Ahora este hash NTLM lo podemos utilizar para autenticarnos realizando un Pass-The-Hash de esta forma:
Info:
Veremos que ha funcionado, vamos a listar los privilegios que tenemos:
Info:
Vemos algo bastante interesante y es el privilegio de SeManageVolumePrivilege que lo tenemos activado, con esto lo que podemos hacer es realizar operaciones de mantenimiento de volúmenes y puede ser usado para escalar privilegios
Escalate Privileges
Si buscamos en internet algun PoC para esta vulnerabilidad veremos la siguiente en el repo de GitHub.
URL = SeManageVolumeExploit GitHub
Nos descargamos el SeManageVolumeExploit.exe y nos lo pasamos desde wvil-winrm a una carpeta en la que podamos escribir, por ejemplo en Downloads del usuario.
Info:
Una vez que nos lo hayamos pasado tendremos que ejecutarlo de esta forma:
Info:
Echo esto veremos que funciono por lo que tendremos que ejecutar el siguiente comando de seguido:
Info:
Veremos que si ha funcionado veremos que los permisos actualmente han cambiado viendo que cualquier usuario puede escribir o leer en la carpeta C:\Windows, esta informacion la saque del siguiente articulo:
URL = Articulo de utilizar la herramienta PoC
Podriamos probar a generar una .dll como vemos en el articulo pero directamente el Windows Defender lo va a bloquear, por lo que no nos interesa, vamos a jugar con los certificados de los usuarios para obtener el de administrador ya que podremos crear con estos permisos cualquier certificado y posteriormente falsificarlo.
Antes tendremos que obtener el numero de serie del usuario Administrator, esto lo podemos hacer leyendo el volcado que realizamos anteriormente con la herramienta certipy cuando descubrimos que plantilla era la vulnerable:
Identificamos que el numero es 75B2F4BBF31F108945147B466131BDCA con este numero podremos obtener el certificado privilegiado sabiendo que los permisos que tenemos en la carpeta C:\Windows es de cualquier usuario, por lo que podremos pedirlo desde ahi.
Info:
Veremos que ha funcionado, por lo que vamos a descargarnos dicho archivo a nuestra maquina atacante.
Info:
Ahora podremos obtener un TGT gracias a este certificado privilegiado del usuario administrador.
Pero antes tendremos que saber la ruta del objeto admin del AD, gracias a BloodHound podremos saber esto mismo, buscando el objeto Administradtor y en la parte de informacion veremos esto:

Ahora vamos a forjar el .pfx del administrador para posteriormente obtener el TGT.
Info:
Una vez creado ese administrator_forged.pfx vamos a utilizarlo para autenticarnos y obtener le TGT de esta forma:
Info:
Veremos que ha funcionado, vamos a probar dicho hash con wvil-winrm a ver si podemos realizar un Pass-The-Hash.
Info:
Veremos que ha funcionado, por lo que vamos a leer la flag del admin.
root.txt
Last updated