DrunkTillDawn (Web 400)

By @dark1t

Descripcion:


Como te mencionamos en el reto Abonero, este reto es una de las rutas que 
puedes intentar para acceder al Bunker, estamos muy cerca!!!!!  
La otra ruta es via Guardian challenge.

Checa este sitio web interno y trata de encontar la vulnerabilidad que nos 
permita leer el password (la flag del reto) de la Base de Datos q se encuentra 
en /tmp/cred/mysql.txt 

http://40.84.x.x:1347


Al acceder al reto se observa una simple input para insertar texto y un link.


El link redirecciona al recurso /ejemplo/ y ésta muestra un archivo XML que no hace mucho sentido.


Al intentar insertar cualquier texto al input aparece un error de XML, lo que da una pista que se debe insertar texto en formato XML.


Después de descubrir lo anterior, si se intenta enviar texto en formato XML la aplicación solo responde “Gracias por comentar


Una vulnerabilidad de aplicaciones que manejan XML es XXE. Hay diversos tipos de XXE como Reflected, OOB (Out Of Band), Blind error based o Blind con DTD local.

Para este reto solo funciona la vulnerabilidad Blind tomando ventaja de un archivo .dtd local:


Ya que el código del reto tiene bloqueado el acceso a archivo externos (por http,ftp, etc), no hay etiquetas que se reflejen y no se obtiene el contenido del archivo forzando un error.

Todo lo anterior lo tienen que validar los participantes al leer más acerca de vulnerabilidades de XML o ataque XXE.
La repuesta para resolver el reto se encuentra en el archivo del link ejemplo/ , el cual tiene un comentario con la ubicación del archivo que se está mostrando /opt/carpeta/prueba/archivo.ejemplo.



Para poder utilizar este archivo se tiene que entende del lenguaje XML, del ataque y encontar el payload que se puede usar.
Una vez entendido lo anterior y observando una vez más archivo.ejemplo, se descubre la entidad de la que se puede abusar, en este caso es la entidad oceano .
Hay algunas referencias que ayudan a entender este ataque y que pueden ayudar para crear el payload de ataque:

El payload final para leer el archivo /etc/passwd sería este:


Y por último el payload para obtener las credenciales de mysql.txt seria el siguiente:



Comments