DarkCorp HackTheBox (Insane)
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-20 10:13 EDT
Nmap scan report for 10.10.11.54
Host is up (0.043s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.2p1 Debian 2+deb12u3 (protocol 2.0)
| ssh-hostkey:
| 256 33:41:ed:0a:a5:1a:86:d0:cc:2a:a6:2b:8d:8d:b2:ad (ECDSA)
|_ 256 04:ad:7e:ba:11:0e:e0:fb:d0:80:d3:24:c2:3e:2c:c5 (ED25519)
80/tcp open http nginx 1.22.1
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: nginx/1.22.1
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 12.36 secondsVeremos simplemente 2 puertos, entre ellos el puerto 80 que aloja una pagina web, vamos a probar a entrar en dicha pagina.
Veremos que nos esta redirigiendo a un dominio llamado drip.htb por lo que vamos añadirlo a nuestro archivo hosts.
Lo guardamos y entraremos pero directamente con el dominio:
Info:

Vemos que es una pagina dedicada a servicios de correo, vamos a realizar un poco de fuzzing a ver que podemos encontrar en dicha pagina.
Si le damos a Sign in para iniciar sesion, nos lleva a un subdominio llamado mail el cual tendremos que añadir a nuestro archivo hosts.
Lo guardamos y entramos de nuevo.
Info:

Vemos que utiliza de forma interna un software llamado Webmail, si buscamos la version o alguna vulnerabilidad asociada a dicho software veremos una en concreto.
URL = CVE-2025-49113 exploit PoC GitHub
Buscando por internet encontre un repo en el que explicaba que hay una vulnerabilidad de Roundcube Webmail Vulnerable to Authenticated RCE via PHP Object Deserialization pero requiere que estes autenticado con credenciales para este CVE-2025-49113, por lo que vamos a irnos a la pagina principal y pulsar Sign Up para crear tus credenciales.
Exploit CVE-2025-49113
Una vez que hayamos creado dichas credenciales (En mi caso diseo:diseo) podremos explotar la vulnerabilidad:
exploit.php
Vamos a ejecutarlo de esta forma, pero antes nos pondremos a la escucha para saber que se esta ejecutando el comando de forma correcta:
Ahora si ejecutamos lo siguiente:
Info:
Veremos que ha funcionado, pero si volvemos a donde tenemos nuestro servidor de python3 veremos lo siguiente:
Efectivamente vemos que 100% ha funcionado, por lo que vamos a generar una reverse shell para obtener acceso inicial a la maquina de esta forma:
Info:
Ahora si volvemos a donde tenemos la escucha veremos lo siguiente:
Pero es bastante raro ya que es una maquina Windows y no Linux, puede ser que sea una particion en el propio Windows que es la que aloja la pagina web, en vez de utilizar IIS utiliza apache2.
Si busco sobre la informacion de la maquina veremos que no es la escalada, por lo que vamos a seguir investigando un poco mas, ya que este acceso inicial no nos sirve de nada.
Si nos vamos a Compose veremos nuestro correo, vamos a probar a enviarnos por el contacto de la pagina un mensaje y lo capturaremos con BurpSuite.

Desde la pagina rellenaremos la info, para ver si nos llega en nuestra bandeja de entrada el mensaje.

Peticion BurpSuite (Envio de un correo)
Probemos a modificar el correo de llegada en la seccion llamada recipient del nombre de support a nuestro usuario diseo en mi caso, dejandolo asi:
Lo enviamos al Repeater, enviamos la peticion para que se ejecute y veremos que nos da un Message sent successfully! ahora si vamos a la bandeja de entrada de nuestro correo veremos que nos llego dicho mensaje.

Veremos que ha funcionado esa modificacion y nos ha llegado el correo a nuestro correo personal en vez de al del usuario support.
Si buscamos informacion sobre la vulnerabilidad que explotamos anteriormente, veremos que respecto a dicha vulnerabilidad podremos hacer otras cosas como un XSS mediante el mensaje del correo electronico, para mas informacion tendremos esta pagina:
URL = XSS roundcube webamil vuln
Payload XSS mail
Ahora desde el Repeater en la peticion que capturamos lo vamos a dejar de esta forma:
Importante cambiar el content en html para que se cargue como tal, ahora si enviamos esto, veremos que nos llega el mensaje, pero si lo abrimos, veremos lo siguiente en la pagina:

Vemos que esta funcionando ese XSS, por lo que vamos a probar gracias a esta vulnerabilidad a inyectar un codigo de HTML con JS para obtener los correos del usuario bcase@drip.htb que vemos en el cuerpo del mensaje, tendremos que probar varios ids de la parte uid= para ver que mensaje es el que nos interesa, para ello el usuario tendra que abrir el correo y esto realizara una conexion a nuestro servidor activo de python3 en formato codificado en Base64 del cuerpo del mensaje de cada ID de correo.
Escalate user bcase
Vamos a crear este codigo que obtuve de internet que aprovecha esta vulnerabilidad:
URL = GitHub Vulnerabilidad PoC
Este codigo lo pegaremos en un archivo llamado exploit.py.
exploit.py
Ahora lo ejecutamos de esta forma:
Info:
Veremos que se envio de forma correcta, y seguidamente ya nos pone a la escucha en un servidor de python3 para que nos llegue dicha peticion, esperando un rato veremos lo siguiente:
De todo el codigo que nos ha decodificado, abajo del todo veremos que nos extrae el contenido del Body, despues de probar varios IDs el que nos dio informacion relevante fue el del ID numero 2.
Veremos que hay un subdominio llamado dev-a3f1-01.drip.htb redirigiendo a una pagina en concreto el cual vamos añadir a nuestro archivo hosts.
Lo guardamos y entramos en dicha pagina:
Info:

Escalate user postgres
Reset password user bcase
Veremos que de primeras nos pone acceso denegado, si nos vamos a LOGIN, nos llevara a un login pero no tenemos credenciales, abajo veremos una opcion llamada Reset Password que es muy interesante:

Vemos que ingresando un correo podremos resetear la contraseña de dicho usuario, podemos aprovechar la vulnerabilidad de antes, para enviar el correo del usuario bryce e interceptarlo para que podamos interactuar con el correo y cambiar la contraseña.
Si metemos el correo de bcase@drip.htb veremos que nos pone un mensaje Reset token sent successfully..
Ahora vamos a volver a utilizar esta herramienta de antes para obtener el correo con el ID correspondiente, tendremos que ir probando a partir del ID numero 2 hasta saber cual es la siguiente correo del reseteo de contraseña.
Info:
Veremos en el cuerpo del mensaje que nos llego el enlace para restablecer la contraseña, por lo que vamos a meternos ahi:
Info:

Cuando hagamos esto nos pondra un mensaje de Password successfully changed. ahora si nos metemos con dichas credenciales con el usuario bcase y la contraseña que hayamos puesto veremos este dashboard.

Si nos vamos a la parte de Analytics veremos una barra de busqueda en la que si ponemos cualquier cosa como por ejemplo test veremos que nos da un error a nivel de MySQL:
Con esta informacion vamos a realizar esta inyeccion de SQLi.
SQLi
Info:

Vemos que esta funcionando, si probamos a exfiltrar informacion no veremos nada interesante, por lo que vamos a probar a realizar un reverse shell de esta forma.
Ya que si probamos a leer el archivo /etc/passwd:
Info:
Vemos que funciona (Con esto identificamos que esta corriendo en un Linux, por lo que la shell la podemos hacer con bash), por lo que vamos a meter el siguiente payload de reverse shell que es el que me ha funcionado.
Pero antes nos pondremos a la escucha:
Ahora si enviamos el payload...
Si volvemos a donde tenemos la escucha veremos lo siguiente:
Vemos que ha funcionado, por lo que vamos a sanitizar la shell (TTY).
Sanitización de shell (TTY)
Escalate user victor
Si buscamos en las DDBBs de postgresql no veremos nada interesante, pero despues de una busqueda bastante intensiva descubrimos un directorio:
En el que aloja bastantes comprimidos .gz, vamos a utilizar una utilidad de cat para leer dichos comprimidos y filtrar por el nombre de usuario ebelford, ya que de otros usuarios no veremos nada.
Info:
Veremos que ha nivel de DDBB se establecio la contraseña de dicho usuario con ese hash MD5 aparentemente, vamos a probar a crackearlo en la siguiente pagina.
URL = Pagina Hashes Decrypt MD5
Como resultado veremos que lo consiguio.
Ahora si probamos dicha contraseña con el usuario ebelford en Linux.
Metemos como contraseña ThePlague61780...
Veremos que funciona, pero no veremos nada interesante con este usuario, por lo que vamos a salirnos del mismo, estando con el usuario de postgres veremos la siguiente ruta interesante:
Info:
Vemos que esta codificado por una clave GPG si no sabemos la clave no podremos ver su contenido, por lo que buscando un poco si leemos el siguiente archivo.
Info:
Vemos informacion muy interesante entre ella un DB_PASS, vamos a probar si dicha contraseña sirve para decodificar el archivo GPG.
Metemos como contraseña 2Qa2SsBkQvsc...
Veremos que ha funcionado y obtendremos varios hashes de usuarios, pero el que mas nos llama la atencion es el del usuario victor.
Ya que tiene toda la pinta de que puede ser un usuario a nivel de dominio de windows.
Si probamos a crackearlo en la pagina de Hashes...
Vemos que ha funcionado, pero otra cosa interesante es que si leemos el archivo hosts veremos estas lineas:
Vemos que para la IP 172.16.20.3 se esta utilizando el dominio drip.darkcorp.htb, por lo que podria utilizan la herramienta de proxychains para poder comunicarnos de forma externa con la IP atraves del dominio.
Vamos a redireccionar un puerto que actue como proxy inverso de esta forma con SSH:
Metemos como contraseña ThePlague61780...
Info:
Con esto veremos que funciono, ahora si hacemos ss -tuln en nuestra maquina atacante veremos esto:
Info:
Vamos a configurar nuestro archivo de proxychains4 para que apunte al puerto redireccionado de esta forma:
Info:
Lo guardamos y si probamos con las credenciales del usuario victor que obtuvimos anteriormente en el DC al cual ahora si tenemos conexion:
Info:
Veremos que esta funcionando, por lo que vamos a descargarnos un ZIP para BloodHound y analizar un poco todo el DC.
Info:
Esto nos volcara un .zip el cual tendremos que cargar en BloodHound.
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 victor.r a ver que tiene.

Veremos algunas cosas interesantes, pero de momento se quedan ahi, si configuramos nuestro proxy web con FoxyProxy de esta forma:

Vamos acceder al siguiente puerto que vemos interesante si inspeccionamos desde la maquina victima.
Info:

Vemos que nos pide una autenticacion, probaremos con las credenciales del usuario victor.r:

Vemos que han funcionado y aqui estamos viendo varios DBs por lo que se ve a parte de varias WEBs tambien, esto puede ser muy interesante tambien.
Si nos vamos a Check Status:


Veremos que podremos configurar un puerto y dominio para ver si esta operativo o no, esto nos da una idea de que podriamos probar a capturar el hash NTLM gracias a esta peticion que se va a realizar, por lo que vamos a preparar todo.
Captura Hash NTMLv2 (Intento)
Primero vamos a preparar un socat para que la respuesta que nos de la pagina se tunelize en nuestro puerto 80 de la maquina atacante (Este comando se ejecuta en la maquina victima).
Para ello nos tendremos que pasar el binario socat, vamos a realizar lo siguiente:
Desde la maquina victima:
Despues de este proceso cerramos el puerto de python3 antes de ejecutar el socat.
Dejaremos esta configuracion:

O bien podremos lanzarlo con curl directamente utilizando proxychains de esta forma:
Ahora antes de enviar nada, tendremos que ponernos a la escucha con el responder, tiene que tener habilitado el HTTP = On ya que sera nuestro puerto 80 para que capture dicho hash cuando se envie desde la pagina.
Ahora si le damos al boton de Check! desde la pagina o enviamos el curl, esperamos un rato y si volvemos a donde tenemos a la escucha el responder veremos que no obtenemos nada, solamente solicitudes de peticiones, pero no el hash, despues de unos dias intentandolo y buscando informacion por lo que se ve hay un error con el responder actual y falla mucho, montandote una web de apache2 con un .php fui capaz de capturar ese hash NTLMv2 forzando el mismo, pero igualmente no nos servira de nada.
index.php
Habilitamos el servidor de apache2 para poder recibir dicha peticion, ya que estamos realizando un portforwarding del puerto 8080 al 80 de la maquina atacante.
Enviamos la peticion de autenticacion de esta forma:
Ahora si leemos el log que deberia de haber dejado tras la autenticacion del mismo...
Info:
Veremos que capturamos un hash del usuario svc_acc, pero sin mas, no podremos hacer mucho con el.
Si probamos a realizar lo siguiente podremos obtener un hash NTLMv2 del usuario WEB-01$ de esta forma:
Primero nos pondremos a la escucha con responder de nuevo:
En otra terminal tendremos que descargarnos un repo de github asi:
Hecho esto vamos a ejecutarlo de esta forma:
Info:
Viendo esto veremos que funciono, por lo que si vamos a donde tenemos la esscucha del responder veremos lo siguiente:
Vemos que lo capturamos de forma correcta, pero no se puede crackear, despues de investigar un rato vemos que el usuario SVC_ACC pertenece al grupo de DNSADMINS por lo que podremos crear un dominio de DNS el que podamos conectarnos a el para obtener unas credenciales de autenticacion.
Escalate user Administrator local (web-01)
Primero vamos a crear dicho dominio de esta forma:
Ahora mientras estamos a la escucha, vamos autenticarnos de esta forma:
Si volvemos a donde tenemos la escucha veremos lo siguiente:
Vemos que se creo de forma correcta, ahora vamos a utilizar dicho dominio cerrando el servidor de antes y abriendo este nuevo descargandonos antes el repo de github de la herramienta que vamos a utilizar.
Estando a la escucha con ese otro servidor, como dije nos descargamos la herramienta:
Info:
Enviando esto si volvemos a donde tenemos la escucha del servidor, veremos lo siguiente:
Veremos que ha funcionado y obtendremos un archivo llamado WEB-01.pfx el cual vamos a utilizar para obtener un certificado.
Obtencion de certificado/credenciales Administrador local
Antes tendremos que obtener la hora de la maquina para que no de error, para ello tendremos que ir a la shell por SSH y poner date eso nos dara esto:
Con esa info podremos ponerlo manualmente de esta forma:
Y seguidamente tendremos que ejecutar el comando...
Info:
Veremos que ha funcionado sin errores, por lo que con este hash podremos realizar una solicitud de TGT para obtener el hash del usuario administrador de esta forma:
Info:
Vemos que ha funcionado por lo que vamos a exportar este archivo en la variable de kerberos para utilizarlo como autenticacion:
Ahora si probamos por netexec a obtener las credenciales del usuario admin...
Info:
evil-winrm Administrator (local)
Veremos que ha funcionado, por lo que vamos a conectarnos por WinRM de esta forma:
Info:
Veremos que ha funcionado, por lo que vamos a leer la flag del usuario.
user.txt
Escalate user taylor.b.adm
Si investigamos un poco veremos que el usuario TAYLOR.B.ADM pertenece al grupo llamado GPO_MANAGER que este a su vez tiene permisos de WriteDacl, WriteOwner y GenericWrite sobre el objeto llamado SECURITYUPDATES, por lo que podremos realizar lo siguiente:
Info:
Ahora si listamos la informacion de la longitud de la contraseña...
Info:
Veremos que son de 7 caracteres, sabiendo esto probaremos a realizar fuerza bruta con dicho usuario a ver si hay suerte, para no complicarnos vamos a descargarnos la herramienta de kerbrute desde GitHub y pasarla a la maquina victima, haremos lo mismo con el wordlist de rockyou.txt.
URL = Download kerbrute Linux amd64 binary
Una vez descargado, lo moveremos a nuestro directorio actual el binario, y haremos lo mismo con el rockyou.txt:
Abriendo un servidor de python3 en la maquina victima nos conectaremos por SSH con el usuario ebelford y nos iremos a /tmp.
Info:
Despues de un buen rato (Cosa de unos 20 minutos) veremos que funciono y obtendremos las credenciales del usuario taylor.b.adm.
Ahora teniendo este usuario podremos agregar este usuario como Administrador explotando las políticas de grupo, pero el antivirus esta activo, por lo que tendremos que bypassearlo, para ello utilizaremos una herramienta llamada PowerGPOAbuse.ps1.
URL = Download PowerGPOAbuse.ps1 GitHub
Hecho esto tendremos que conectarnos por WinRM con las credenciales de dicho usuario.
NOTA: Seguimos utilizando
proxychainsya que tenemos la tunelizacion que realizamos anteriormente desdeSSHcon el parametro-D 1080.
evil-winrm taylor.b.adm
Info:
Escalate Privileges
Veremos que ha funcionado, por lo que desde las utilidades de evil-winrm vamos a subirnos dicho archivo de esta forma:
Info:
Bypass Modulo AMSI
Ahora realizaremos un AMSI Bypass de esta forma:
Con esto en la terminal actual el modulo AMSI del Windows Defender no va a analizar nada de los comandos que ejecutemos en dicha terminal, por lo que tenemos via libre.
Vamos añadir a dicho usuario a un grupo especifico mediante una politica de grupo en este caso en el grupo llamado SecurityUpdates.
Info:
Agregar usuario al grupo Administrators
Veremos que ha funcionado viendo ese True por lo que vamos agregar una regla en el registro de Windows para que cada vez que se inicie el sistema se ejecute dicho comando de PowerShell, lo que haremos con este comando sera que meta al usuario taylor.b.adm al grupo de Administradores.
Info:
Ahora vamos a forzar una actualizacion inmediata de las politicas de grupo para que se ejecute dicho comando.
Info:
Dump secrets Windows
Ahora desde una terminal del atacante, vamos a dumpearnos los hashes de la maquina victima para obtener el que nos interesa del Administrador del dominio.
Info:
Vemos que ha funcionado y obtendremos el hash del admin que seria este de aqui.
Hash Admin NTLM
evil-winrm Admin (Domain)
Ahora utilizando este mismo hash vamos a conectarnos por WinRM a la maquina victima realizando un Pass-The-Hash de esta forma:
Info:
Veremos que ha funcionado, por lo que leeremos la flag del admin.
root.txt
Last updated