Introducción

(Este artículo se envió a Google para su evaluación y tiene derechos de autor, por lo que si desea enviar su propia solución... terminó ayer... debe estar registrado en el marcador para que su artículo sea considerado)

MindReader era supuestamente uno de los desafíos más fáciles en GoogleCTF y se trata de algunas conjeturas. Entonces comencemos

Primero, al dirigirnos a la página del desafío, vemos un cuadro con un botón "leer".

Lo primero que me viene a la mente es intentar probar "XSS", por lo que se probaron un par de intentos XSS entre ellos los siguientes:

<script>alert(test)</script>

Lamentablemente la respuesta no fue la esperada.

También se probaron técnicas de inyección de comandos con un par de “ls”, “cmd”, pero tampoco hubo suerte.

Ahora el siguiente paso fue intentar atravesar el directorio y resulta que el host es vulnerable. Se intentaron los siguientes recorridos pero tampoco hubo suerte.

../.././../etc/contraseña

../../../../etc/sombra

../../../../etc/resolv.conf

../../../etc/hosts

Luego, después de un par de huellas digitales, resulta que el entorno está ejecutando alguna ventana acoplable, por lo que se abrió nuevamente la página principal, se escribió "main.py" y apareció el script principal.

El script anterior utiliza el marco "flask" y utiliza la función "index()" para ejecutar las tareas de lectura de los valores ingresados en el cuadro de desafío.

La línea 6 nos dice que hay una variable de entorno que se afirma antes de ejecutar la función y Google nos presentó una pista de que esta variable de entorno es la BANDERA real.

Y dar el host es vulnerable al cruce de directorios, por lo que se debe acceder a la variable de entorno de esa manera.

Probando todas las combinaciones usando /proc/self/environ pero parece que no tenemos permisos de acceso

Un buen conocimiento de los sistemas Linux entra en juego, /proc/self/fd tiene enlaces simbólicos a /dev/fd y esto significa que en Linux existen relaciones entre las variables de entorno y los descriptores de archivos para permitirnos acceder al entorno desde los descriptores de archivos o desde /dev/fd que comienza desde 0,1,2 y así sucesivamente.

Entonces, probar /dev/fd/0 nada más que vincular /dev/fd/8 nos da

Junto con el recorrido del directorio

/dev/fd/../entorno

Y la bandera ha sido capturada

Acerca del Autor

Creo notas de ciberseguridad, notas de marketing digital y cursos online. También brindo consultoría de marketing digital que incluye, entre otros, SEO, Google y meta anuncios y administración de CRM.

Ver Artículos