HTB{LACASADEPAPEL}

Una mattina mi son' svegliato.... O bella ciao, bella ciao, bella ciao, ciao, ciao

Así es, la máquina que se retira esta semana de HTB es la basada en la temática de la serie de Netflix, La casa de Papel

Esta máquina catalogada como fácil, fue mucho mas laboriosa de lo que había imaginado, sin embargo tuvo gran complejidad y diversidad de comandos (así como una sorpresa oculta) que enriquecieron mi acervo tanto de exploits como de técnicas de pentesting. 

Así que sin más preambulo, comencemos con el writeup de este reto: 

Como todos los equipos, comenzamos con un escaneo de puertos para saber que es lo que tiene abierto.


Como podemos ver en la pantalla de arriba, los puertos que tiene abiertos este equipo son: 80,21,22 y 443. 

Si revisamos el puerto 80, vemos la siguiente página


En este front, nos mostrará un código QR, que simula un login, sin embargo no hay nada por hacer con el puerto 80. 

Revisando el puerto 443, aparece esta otra página. 


En este sitio, en lugar de mostrar el código QR, nos aparece una imagen de la máscara de Dalí con un mensaje de que debemos proporcionar un certificado del lado del cliente para continuar, pero, de donde obtenemos este certificado....  tendremos que dejar este vector para después. 

Retomando el escaneo inicial de puertos, recordemos que el puerto 21 es otros de los puertos que tiene abiertos, un FTP. 


Haciendo una conexión al puerto directamente, vemos que la versión del vsFTPd es la 2.3.4, misma que tiene una vulnerabilidad conocida como: Smile of Death 



Esta vulnerabilidad puede ser explotada de forma manual, aunque también existe un código para automatizar el ataque. Mismo que puede ser descargado de AQUI


Copiando el código a nuestra máquina, ejecutamos con los parámetros requeridos, y con ello obtenemos que nos abra otro puerto, en este caso, el 6200


Ya con ese puerto abierto, hacemos una conexión directa al puerto 6200 y nos conecta con un shell (Para mi algo desconocido), el shell que nos abre está basado en PHP. 


Este shell se conoce como Psy Shell debo admitir que para mi fue algo nuevo este shell y por lo tanto tuve que estudiar los comandos que se pueden ejecutar (menuda sorpresa...) 

Voy a tratar de resumir los comandos que utilicé para que, si ustedes tampoco están familiarizados con este shell, aprendan lo básico, tal y como lo tuve que hacer. 😅

scandir() --> Enlistar el contenido de un directorio.


En este caso, enlistamos la carpeta de los usuarios en el sistema y vemos que existen varios creados, con base a la serie. (Buen detalle 😎). 

Revisando el contenido de cada uno de los directorios con esa instrucción llegamos al home del usuario nairobi y encontramos un archivo correspondiente a una llave privada para generar un certificado.  (ca.key) 


Ahora el tema, era como obtener el contenido del mismo....

Para eso existe otra instrucción en el shell con el nombre de file_get_contents(). Esta función lo que hace es obtener el contenido de un archivo de manera similar a lo que hiciera la instrucción CAT de linux. 

Por lo que aplicamos esta función a este archivo. 




Como podemos confirmar, esta es una llave privada, misma que guardaremos en nuestro equipo, para usarla mas adelante. 

Debido a que tenemos una parte importante para generar un certificado https del lado del cliente, debemos buscar la otra parte faltante para poder crearlo. 

Para ello regresamos a la página HTTPs de nuestro reto. 


Damos click en el ícono del certificado digital y expandemos las opciones del mismo para que nos dé mayor detalle del mismo. 




Ya en esta última pantalla, le damos click en el botón de "Exportar" y guardamos este archivo tal y como viene. 


Ya con ambos archivos guardados en el mismo directorio, ejecutamos lo siguientes comandos para generar nuestro certificado firmado por el servidor para autenticarse en el mismo como un cliente. 

Fusionamos ambos archivos en uno solo...

Generamos el certificado cliente... 

Nos pedirá password para resguardar la clave privada para la que debemos poner cualquier valor. 


Como se puede ver en la pantalla anterior, ya tenemos un archivo con extensión P12 mismo que debemos instalar en nuestro navegador. 


Al momento de importarlo, nos pedirá la clave que pusimos anteriormente..

Finalmente queda instalado el certificado en nuestro equipo...

Reiniciamos nuestro navegador, y volvemos a abrir la página con HTTPS


Nos aparece una pantalla de validación que nos muestra nuestro certificado recién creado para autenticarnos al sitio. 

Tras pasar la pantalla anterior, nos aparecerá ahora el área VIP en donde antes nos aparecía una máscara de Dalí. 



De las pantallas anteriores vale la pena observar cada uno de los links generados, ya que por su estructura y funcionamiento, permite hacer LFI (Local File Inclusion). Como veremos a continuación. 


Revisando esta estructura, podemos ver que las URLs de los videos .avi, son con nombre codificado en base64.

Para decodificar el contenido, utilizamos la página de CyberChef


Y en esa pantalla observamos que el contenido del base64, es la ruta en donde se encuentra el archivo dentro del sistema de archivos del servidor, esto confirma que es vulnerable a LFI, pero tenemos que estructurar la petición para que vaya codificado con base 64, para el caso de un archivo, sin embargo, para el caso de un directorio, este se puede poner en texto claro. 

Tal y como se muestra en la siguiente pantalla. 


Como se puede ver en la pantalla anterior, en la barra del navegador, el parámetro PATH se inicializa a "../../" lo que nos permite navegar en el directorio HOME, desde la pantalla del navegador.  En la pantalla anterior vemos todos los usuarios creados en el sistema, mismos que vimos anteriormente con el PSYShell. 

Navegando en todos los directorios, encontramos uno relevante y que por medio de PSYShell no logramos alcanzar. 



Si tomamos el método de codificar la ruta con base64 para poder inyectarla en el navegador... 


Ya con este valor en base 64, lo ponemos directamente en el navegador y.... 




Nos permite descargar el archivo users.txt, mismo que contiene la flag de nuestro reto.


Ahora vamos por la bandera de root. 

Ya con la funcionalidad de navegar los directorios por el navegador y con la inyección de las rutas para generar LFI, obtuvimos 2 archivos valiosos para conectarnos de forma remota por medio de ssh. 

Estos archivos, se encuentran en la ruta de /home/berlin/.ssh,  en este caso utilizamos el mismo procedimiento para descargar el user.txt pero para descargar los archivos de SSH.



Con este paso descargamos la llave pública y privada (id_rsa y id_rsa.pub).



Ya con ambos archivos guardados en el equipo, tratamos de establecer una conexión remota por medio de SSH.



Ya con la autenticación de SSH, ahora tenemos permisos del usuario professor, tal y como se ve en la pantalla anterior. 

Ya en el HOME del usuario professor, vemos 2 archivos interesantes: 

* memcached.ini
* memcached.js

Mismos que leyendo en foros y logs, pueden utilizarse apara escalar privilegios dado a que en esta instancia estos scripts se ejecutan con permisos de root. 

Para el payload utilizado, pueden visitar esta liga

Agrego los pasos realizados para modificar estos archivos: 





Como se puede ver 2 pantallas arriba, el payload fue modificado para abrir el puerto 6666 para una conexión remota. 

Y al ser una tarea programada, solo ponemos nuestro equipo en modo escucha para el mismo puerto 


Tras unos minutos, se ejecuta la conexión en nuestro equipo y validamos los permisos obtenidos.... tenemos root. 


Ya sólo basta con el contenido de la bandera de root. 


Y listo, hemos completado el reto de LaCasadePapel

Con lo cual, queda concluido nuestro reto. 👏👏

NOT BAD FOR A LAB RAT

Hack The Box

Comentarios

Lo mas visto