Hey hoy martes y como se esta haciendo costumbre en el blog andamos iniciando la semana y esta oportunidad vengo a compartir una solucion realizada por @met3or el cual en su blog realizo el reto de PwnLAB Boot2Root que fue realizado por @Cla0r desde el grupo de Capsulas SI les dejo con la solución y felicitar por el resultado y el paso a paso realizado.
Buenas lectores, hace unos días estaba aburrido acababa de leerme el último apartado de un PDF y no tenia nada que hacer, de pronto me dieron ganas de completar algún reto, así que me dirigí a la página de Snifer (Retos SniferL4bs), donde sabía que iba a encontrar un divertido e interactivo reto, después de unos minutos navegando por la página me encontré con el CTF PwnLAB Boot2Root en el cuál se requeria la descarga de una maquina virtual para posteriormente conseguir privilegios root y así finalmente conseguir el ansiado “flag.txt”. Sin más preámbulos comenzaré a describir como conseguí llegar a dicho archivo.
Primero de todo reconocimiento, tenia que saber a que me estaba enfrentando, así que escanee toda mi red en busca de hosts vivos.
Mi primer pensamiento fue que en el CTF tendriamos que jugar con la base de datos MySQL, por otra parte se me ocurrió que si el servicio rpcbind tenia el servicio NFS activo podriamos explotar dicha configuración, seguido hice un rpcinfo y no mostró ningún efecto de lo que buscaba. Por último accedí a la página por browser, seguidamente le pasé un Nikto, y me devolvió algo interesante.. :)
Ahora sabia cual era el principal objetivo, leer el archivo “/config.php” el cuál mostraria las credenciales de la base de datos. Después de un tiempo navegando por la página me dí cuenta que cuando intentaba lanzar algún tipo de string vía url a la variable “?page=” me mostraba la pagina en blanco, así que deduje que algo me estaba escondiendo Snifer xD, así que solo tendríamos que buscar alguna manera el tipo de filtro que tenia activo, buscando por google encontré este Wrapper
example1.php?page=php://filter/convert.base64-encode/resource=
https://highon.coffee/blog/lfi-cheat-sheet/
Lo que hacia era encodear el output del source del archivo PHP, lo único que tendríamos que hacer luego seria decodearlo.
Bingo!! Encontramos las credenciales de la bases de datos ahora podriamos proceder a conectarnos mediante la terminal.
Ahora a probar a entrar en el login de la página, al acceder al login solo nos quedaba un objetivo para poder llegar a tener una sesión en la máquina subir una shell mediante el “Upload” que teniamos con acceso restringido solo a los usuarios logeados, lo primero que hice fue insertar código de una shell en una imagen mediante la herramienta msfvenom
De esta forma logré bypassear el uploader y subir la shell, aquí estaba el primer dilema solamente accediendo a la url no podiamos obtener una sesión meterpreter ya que el directorio no ejecutaba codigo PHP, después de buscar entre directorios con el filtro en php que usamos antes para sacar el config.php me di cuenta de una función en index.php
<?php “include/”.include($\_GET\['filename'\].“.php”); ?>
Comparando el código extraido de index.php con un LFI, vemos que sí la cookie esta puesta, da paso a un source code vulnerable a otro LFI medainte la variable lang, eso quiere decir que si capturamos cabeceras y seteamos detrás de la cookie la variable ·“lang=” seguido del directorio que queremos ver, podria llegar a ejecutar código PHP y entonces podriamos llegar a obtener nuestra ansiada shell con el host
Ya tenemos sesión meterpreter ahora toca llegar escalar privilegios para tener root y así poder obtener la flag, lo primero sera hacer su a las cuentas para conocer a cuál podemos entrar y a cuál no utilizaremos el siguiente script en python para obtener una TTY porque con una conexión reversa de meterpreter no nos deja hacer uso de la funcionalidad (su).
python -c ‘import pty; pty.spawn(“/bin/sh”)’
http://pentestmonkey.net/blog/post-exploitation-without-a-tty
En resumen, lo que hice es hacer uso del script en python para acceder a una terminal, accedí al usuario kane con la contraseña de la base de datos MySQL,básicamente porque en los demás usuarios no habia nada interesante, luego liste todos los archivos con sus respectivos permisos en este caso contaba con el bit SUID activo así que cualquiera que lo ejecute iba a tener los mismos permisos de quien lo creó, al intentar ejecutarlo me devolvió una ruta la cual es ejecutada por “cat”
En ese momento supe que cambiando el orden de ejecución del PATH podria crear mi propio cat y así ejecutar una shell
Ahora me aparecia un nuevo archivo pero con el bit SUID también activado, así que le hice un “strings” para ver que estaba haciendo
/bin/echo %s » /root/messages.txt
Lo que pasaría es que podriamos cortar el string con un “;” y detrás poder poner una orden para que se pueda ejecutar
Y ahora que tenemos privilegios le podemos hacer un cat a la flag.txt para estar seguros que Snifer no nos ha troleado esta vez como cuando troleo a medio twitter con los PDF’s de 0xWORD xD
El primer CTF tuyo y ya me hicistes tener migraña nada más empezar con la página web, por lo demás fue muy divertido y espero unos cuantos más para la colección.
Blog del autor de la solución. Meteor Labs
Regards,
Snifer