VulnHub @ Completando CTF PwnLab (Walkthrough)

Iniciado por shkz, Agosto 28, 2016, 12:37:43 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Agosto 28, 2016, 12:37:43 AM Ultima modificación: Julio 22, 2022, 03:36:42 AM por shadkz
Bueno consideraba postearlo en (Wargames y Retos), pero también considerando que es un walkthrough quizás también sirve como un Tutorial de Hacking/Pentest y para aquellos que no entiendan o estén perdidos prefieren seguirlo paso a paso a medida que leen como un tutorial, por eso es que me decidí a postearlo acá, si consideran los admins en que debería ir a Wargames, todo bien y disculpen.


Bueno hace unos días aburrido me puse a bajar este CTF llamado PWNLAB desde la siguiente dirección: No tienes permitido ver enlaces. Registrate o Entra a tu cuenta. Necesitaran VirtualBOX - OVA para correrlo, sin mas preámbulos, intentare detallar de manera reducida y directa como logre pasarlo. (Algunos tests los saltie para no escribir de mas ya que no me brindaron lo que necesitaba para avanzar y llegar al bendito flag).

~ Comenzando:
En mi caso la ip del servidor victima es 192.168.0.106. Veamos que puertos tiene abierto, utilizando nmap:


Bien como vemos tiene algunos puertos interesantes entre los que se destaca el HTTP y el MYSQL. Podríamos intentar desde el inicio tirarle un BruteForce al login, pero por como venia la prueba quería intentar otras vías de acceso, suponía que tendría que darme algún conocimiento el avanzar de otro modo a diferencia de algo tan sencillo como bruteforcear jeje.



Bastante sencilla la web, tiene solo tres links, el home, login y el upload. Como dije antes, realice varias pruebas, ninguna satisfactoria, hasta que me puse a mirar bien. Al momento de llamar algunos de esos links por ejemplo HOME, o LOGIN, el path luce de esta manera:

Código: text
http://192.168.0.106/?page=login


Ese ?page=login me recuerda a como explotaba años atrás al famoso LFI / RFI. Con la ayuda de este site y debido a varias pruebas que no resultaron positivas, logre poder idear el método para avanzar. No tienes permitido ver enlaces. Registrate o Entra a tu cuenta.

Se trata de pedir ayuda a los Wrappers o 'envoltorios, empaquetadores' en castellano. PHP acepta una serie de wrappers para distintos protocolos de tipo URL, estos permiten trabajar con funciones del sistema de archivos. Los Wrapper soportan varios filtros que pueden ser aplicados a un determinado recurso que le pasemos, en este caso como dice el site ese, podríamos probar con la función 'convert.base64-encode' y ver que pasa, la estructura quedaría asi y se la paso via BurpSuite en mi caso je.

Código: text
http://192.168.0.106/?page=php://filter/read=convert.base64-encode/resource=login




Bien, la respuesta es rápida y con buenos resultados. Si usamos un poco la lógica, la función convert.base64-encode, nos dice que el resultado lo codificara en base64. Si este resultado lo pasamos al decoder, nos da lo siguiente:



Esta mostrándonos codificado el código fuente de "login.php". Tambien vemos que existe el archivo de configuración llamado "config.php", veamos que contiene:





Volvemos a tener los mismos resultados, el resultado codificado en base64 y al decodificarlo, surprise!, el acceso al server mysql. "La contraseña fue censurada, no es la verdadera, solo por jodido y para que no sean tan vagos jeje".

Una rápida conexión desde el cliente mysql en la terminal nos confirma el acceso:



Navegamos por la DB hasta llegar a lo que nos interesa...

Código: text
$ mysql> show databases;
$ mysql> use Users;
$ mysql> show tables;
$ mysql> select * from users;


Y el resultado:



Nice, los resultados están en base64, seguimos.. opto por loguearme como KANE jeje.
Una vez logueados, estamos listos para poder subir archivos.. pero antes podríamos ver el codigo fuente de "upload.php" verdad?. Una vez mas el wrapper nos ayudara:



Obtenemos respuesta codificada y al pasarlo por el decoder, obtenemos el codigo fuente, lo que resalto a continuación es interesante, ya que de ello depende como se nos limitara nuestro archivo que subamos via el Upload.php:



Como vemos, se subirá a la carpeta upload/. Y las extensiones están limitadas a jpg, jpeg, gif y png. Bueno, necesitamos buscar la manera, de intentar subir algún archivo 'malicioso', que nos permita tomar control del sistema, y luego de alguna manera poder invocarlo para darnos ese bendito acceso.

Por mi parte lo que intente hacer fue buscar una shell de conexión inversa, la cual guarde como w0t.gif recordemos que solo 4 extensiones eran posibles y permitiría subir. Tambien pueden crear la shell inversa con metasploit, a libre criterio.

Vamos a Upload y probemos subir la imagen:



"Error 002", wtffffff??.. jeje.

Por lo visto, logra darse cuenta que no es un archivo GIF razo.. podemos bypassear de la siguiente manera, ingresando el encabezado GIF justo antes del comienzo de el codigo PHP de la shell:



Le damos a upload nuevamente y ahora si logramos bypassearlo, en mi caso se encuentra el archivo en el siguiente path:

No tienes permitido ver enlaces. Registrate o Entra a tu cuenta

Seguimos.. ahora tenemos que buscar el modo en que el codigo php, el de nuestra shell, se ejecute.. ya investigamos login.php, upload.php y config.php.. nos resta lo fundamental, index.php jej.

Código: text
GET /?page=php://filter/read=convert.base64-encode/resource=index


Nos arroja el resultado codificado en base64, decodificamos y obtenemos algo interesante:



Vemos ese parametro "lang" seteado en la Cookie. Investiguemos un poco mas:



Bingo!, mediante la Cookie podemos realizar un LFI (Local File Inclusion). Por ende si podemos ver el /etc/passwd, tambien podríamos ejecutar nuestra shell de conexión inversa verdad?. Vamos a intentarlo, primero dejamos un netcat escuchando localmente en el puerto 4444, que este fue el puerto que personalice la shell para que se conecte.



Como vemos en la parte de abajo en BurpSuit explotamos el LFI y en la parte de arriba en la terminal vemos como el netcat que estaba a la escucha recibe una conexión entrante... jeje.



Vemos que no podemos ingresar a la carpeta de Kane, somos www-data y el comando "su kane" para cambiar de usuario no funciona. Por lo tanto tenemos que acomodar la shell correctamente, importando bash con un script python.

Código: text
$ python -c 'import pty; pty.spawn("/bin/bash")'


Ahora si tenemos bash y procedemos a loguear con el usuario Kane, utilizamos la password mysql de antes para loguear.



Vemos que no tenemos mucho en la carpeta /home a excepción de un archivo llamado msgmike, el cual tiene un interesante detalle y es que tiene el bit SUID activado bajo el usuario MIKE.

Corremos msgmike:

Código: text
$ ./msgmike


Y nos devuelve el siguiente mensaje de error:

cat: /home/mike/msg.txt: No such file or directory

Nos damos cuenta que ejecuta 'cat' pero al parecer no con un path absoluto. Entonces pensamos que podríamos manipularlo y lograr escalar privilegios. (Referencia a tener en cuenta: No tienes permitido ver enlaces. Registrate o Entra a tu cuenta, referencia 2) repasen su ingles jeje)

Vemos que tenemos en PATH:

Código: text
kane@pwnlab:~$ echo $PATH
echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games


Bien suponiendo que se empaparon en el tema del link que pase y sobre PATH e IFS Exploit, lo que hago es exportar en PATH lo siguiente:

Código: text
kane@pwnlab:~$ export PATH=.
export PATH=.
kane@pwnlab:~$ echo $PATH
echo $PATH
.


Una vez que le pasamos el valor a PATH, procedemos a crear un file llamado CAT, que contendra /bin/sh, mediante el cual al ejecutar ./msgmike, deberiamos escalar privilegios:



Como vemos en la imagen, con whoami verificamos que somos Kane, luego creamos el archivo cat y le damos permisos. Al ejecutar msgmike escalamos privilegios a mike, gracias al SUID.

Continuamos... estamos cerca.

Nos vamos hacia nuestro nuevo /home/mike, y verificamos que tenemos otro file, llamado msg2root.. comprobamos de que se trata:

Código: text
mike@pwnlab:/home/mike$ file msg2root
file msg2root
msg2root: setuid, setgid ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=60bf769f8fbbfd406c047f698b55d2668fae14d3, not stripped


Ok, tenemos otro file con SUID, esta vez de "ROOT". jeje.. Al ejecutarlo, vemos que hace un echo de todo lo que tipeamos:



Al verificar con strings msg2root vemos que lo que hace es lo que esta en evidencia, realiza un stdin y stdout con /bin/echo. Por ende si cortáramos el mensaje, con ";" y escribimos una segunda orden como por ejemplo con el comando "pwd", tendría que funcionar y darnos el path:



Y efectivamente funciono, considerando el bit suid activado, procedo a verificar si esta netcat en el sistema, e intento abrir una nueva shell para escalar privilegios a Root ;D:

(Pantalla desde la shell inveresa en el sistema victima)


(Pantalla desde la terminal atacante el cual corre netcat en el puerto 8000, esperando conexion de la victima)


Tambien podriamos haber realizado un 'cat' desde msg2root hacia /root/flag.txt, era el modo facil, jeje, pero al saber que estaba netcat, fue un plus. De esta manera se finaliza con el CTF. Cualquier duda, simplemente preguntar.

No tienes permitido ver enlaces. Registrate o Entra a tu cuenta
Security Researcher
No tienes permitido ver enlaces. Registrate o Entra a tu cuenta

Sos un mostro... voy a seguir paso a paso esto, ya esta descargandoseeeeeeeeeeee!! jejeje. Aunque no voy a entender ni la mitad.

Abrazo!!!

Muy bien explicado @No tienes permitido ver enlaces. Registrate o Entra a tu cuenta y buen CTF, muchas gracias por traerlo :D

Un saludo.



Muchas gracias, ya sacaron los creadores uno nuevo, voy a ver si logro pasarlo y tratare de aportar nuevamente.

Greets!
Security Researcher
No tienes permitido ver enlaces. Registrate o Entra a tu cuenta


Estupendo aporte! Te dejo karma.
Detallado, propio y con amplias explicaciones para hacer la práctica.
Esperemos a por más.

Gracias, @No tienes permitido ver enlaces. Registrate o Entra a tu cuenta

Tú te enamoraste de mi valentía, yo me enamoré de tu oscuridad; tú aprendiste a vencer tus miedos, yo aprendí a no perderme en tu abismo.

No tienes permitido ver enlaces. Registrate o Entra a tu cuenta

Estupendo aporte! Te dejo karma.
Detallado, propio y con amplias explicaciones para hacer la práctica.
Esperemos a por más.

Gracias, @No tienes permitido ver enlaces. Registrate o Entra a tu cuenta

Muchas gracias genia. En estos días ya posteo una resolución de uno que salio reciente, solo necesito un poco de time para redactar jeje.
Saludos!
Security Researcher
No tienes permitido ver enlaces. Registrate o Entra a tu cuenta