Hello Cyber-Spartans!!!
Hoy vamos a conocer la vulnerabilidad XML EXTERNAL ENTITY [XXE] y vamos a realizar un pentesting hacia una máquina vulnerable disponible en HackThebox llamada DevOops.
Antes de empezar quiero aclarar que todo mi contenido publicado se hace con fines educativos, informativos y éticos.
No me hago responsable del mal uso que puedan darle.
XML EXTERNAL ENTITY, se refiere a un ataque de falsificación de peticiones al servidor (SSRF), mediante el cual un atacante es capaz de provocar:
- Acceso a archivos y servicios locales o remotos.
- Denegación de servicio (DDoS).
En otras palabras, la vulnerabilidad XXE consiste en una inyección que se aprovecha de la mala configuración del intérprete XML permitiendo incluir entidades externas, este ataque se realiza contra una aplicación que interpreta el lenguaje XML en sus parámetros.
Si quieres saber más sobre esta vulnerabilidad, te invito a leer el siguiente post oficial de OWASP. Articulo Completo
Con este tutorial aprenderás:
Cómo realizar un simple escaneo de puertos con Nmap.
Cómo realizar un descubrimiento de directorios con dirb.
Cómo interceptar y manipular peticiones con burpsuite.
Cómo explotar la vulnerabilidad de la entidad externa XML (XXE)
Cómo conectarse por SSH con una clave privada RSA
Cómo obtener datos sensibles a través de GIT
Aprenda sobre el volcado de datos Git desde servidores web mal configurados
Como siempre vamos a empezar a enumerar nuestra víctima, Para ello realizaremos un simple escaneo con Nmap, de la siguiente manera.
Desde el escaneo de Nmap, hemos enumerado que los puertos 22 y 5000 son los únicos puertos abiertos en la red del objetivo, por lo tanto, en primer lugar, vamos a navegar al puerto 5000 a través de un navegador web.
Al interactuar con la URL dada, aparece la siguiente página web como se muestra en la siguiente imagen.
Página web en el puerto 5000
Aparentemente no encontramos nada interesante en la página principal, continuaremos haciendo un descubrimiento de directorios en la URL http://10.10.10.91:5000/ con DIRB.
A partir de los resultados de DIRB, logramos identificar una URL que nos permite cargar archivos XML. http://10.10.10.91:5000/upload
Realizando una inyeccion de entidad externa XML (XXE)
La siguiente página web le permite cargar un archivo XML, incluyendo los elementos XML Autor, Asunto y contenido.
Realizando una inyeccion XML
Para ello, hemos creado un archivo XML con la ayuda del siguiente código y lo hemos guardado como Attack.xml
Como el sistema operativo es Linux, he solicitado el archivo /etc/passwd.
Este archivo nos permitirá ver qué usuarios están en la máquina.
Esto es lo que se obtiene al cargar el archivo XML en el servidor:
Como puede ver, estamos visualizando el contenido del archivo /etc/passwd
Para continuar interceptaremos las peticiones con Burpsuite y luego teniendo en cuenta que esta máquina víctima está ejecutando un servidor SSH es muy probable que encuentre una clave privada de algún usuario. Como configurar BurpSuite
Interceptación de la solicitud vulnerable a XXE
Una tecnica muy util, que se utiliza luego de tener acceso de lectura a los archivos de un sistema es: Tratar de visualizar el contenido de una clave privada SSH para poder iniciar sesión a través de SSH.
Las claves privadas suelen almacenarse en el archivo /home/nombredeusuario/.ssh/id_rsa.
Para visualizar el contenido de la clave privada del usuario roosa, identificada gracias al archivo /etc/passwd, debemos crear el siguiente archivo malicioso:
Después de cargar el archivo anterior, el resultado es el siguiente:
Obteniendo la clave privada por medio del XXE
Cómo conectar ssh con clave privada
Ya que hemos copiado la CLAVE Privada RSA en un archivo de texto llamado “key”, debemos establecerle el permiso 600 e intenta ingresar con la ayuda del siguiente comando.
Privilege Escalation
Roosa tiene un directorio git en /home/roosa/work/blogfeed/.git. Suele ser una buena idea buscar en esta carpeta los commits anteriores, las ramas y demás. Como los repositorios de Github tienen todos sus cambios documentados, a menudo es posible encontrar datos sensibles que fueron previamente “borrados” por los desarrolladores reflexivos.
Ejecutando git log -p dentro de la carpeta .git, podemos ver los registros de los commits anteriores. Aprende sobre dumping .git
Volcado de datos Git desde servidores web mal configurados
Tambien es recomendable usar la siguiente herramienta automatizada:
gitleaks
Y finalmente, tenemos la clave RSA original.
Cópialo en el bloc de notas, quita los signos + y guárdalo como archivo root.key; para luego conectarte por ssh a la máquina con el usuario root.