CTF By Shelldredd

Introducción

En esta ocasión vamos a realizar un writeup especial. Vamos a resolver todas las máquinas CTF de ShellDredd en un solo walkthrough. Como lo haremos, vamos a vulnerar la máquina Videoclub y a partir de aquí, pivotaremos a CelebritySoup y de aquí a rei.

El esquema del laboratorio es el siguiente.

Comenzamos

El primer paso será determinar la IP de la primera máquina que vamos a vulnerar.

Determinamos las redes donde se encuentra nuestra máquina de ataque.

La red que nos interesa es 192.168.56.0/24. Vamos a escanear que equipos se encuentran en esta red.

Ya sabemos la IP de la primera máquina vulnerable (192.168.56.133). Vamos con ella.

VideoClub

Enumeración

Servicios abiertos

Comenzamos con una enumeración rápida de los servicios disponibles.

Dos servicios abiertos, puertos 22 y 3377. Seguimos con el escaneo profundo de estos servicios.

Servicios abiertos:

  • Puerto 22 > SSH > OpenSSH 7.9p1
  • Puerto 3377 > HTTP > Apache httpd 2.4.38

Enumeración Web

Tenemos un puerto 3377 HTTP abierto. Vamos a ver en el navegador el contenido.

Vamos a echar un vistazo al código fuente. Aunque parece que no hay nada interesante.

Vamos a realizar una enumeración de directorios a ver hay algo que pueda ayudarnos a avanzar. Vamos a utilizar dirsearch para enumerar directorios.

Existen los directorios /videos, /images y /manual y un archivo robots.txt. Vamos a comenzar viendo el contenido del archivo robots.txt.

Hay un hash que vamos a descifrar a continuación utilizando la herramienta CyberChef.

“Enjoy the best films and series of the video club margarita, the hidden side of cinema.” No encontramos nada interesante. Si seguimos bajando en este archivo encontramos que se hace referencia al archivo “list-defaulters.txt”. Vamos a ver su contenido.

El archivo “list-defaulters.txt” encontramos una lista de usuarios. Vamos a descargarla porque nos puede ser útil más adelante.

Vamos a ver el contenido de los directorios /videos e /images.

Vamos a descargar el contenido de ambos directorios para ver si hay información interesante en ellos.

Extraemos los metadatos de todos los videos e imágenes de la siguiente forma:

Vamos a analizar los datos que hemos obtenido de extraer los metadatos de las imágenes.

Vamos a realizar el mismo procedimiento para los archivos del directorio /videos.

Vamos a filtrar la información resultado utilizando el término “Copyright” que nos devolvió resultados interesantes al extraer los metadatos de las imágenes.

¿Cómo podemos interpretar esto? ¿Pueden ser directorios ocultos? ¿Archivos? Vamos a realizar comprobaciones. k1nd3rs, t3rm1n4t0r, m14_w4ll4c3 y c0n3h34ds son directorios de este sitio Web. c0ntr0l, no es un directorio. ¿Puede ser un archivo? Vamos a comprobarlo. Para ello, vamos a hacer uso de la herramienta Burp Suite Intruder.

c0ntr0l es un archivo PHP.

Explotación

No devuelve resultado. Podemos probar si es vulnerable a RCE. Para ello, vamos a utilizar la lista de usuarios que descargamos antes. Volvemos a utilizar para ello la herramienta Burp Suite Intruder.

Hay cositas interesantes, los directorios /images y /videos, los directorios ocultos que encontramos en los metadatos, robots.txt…

El sitio Web es vulnerable a RCE. Vamos a aprovechar esta vulnerabilidad para explotar la máquina.

Vamos a enviar una Shell reversa aprovechando esta vulnerabilidad.

Y colocamos un oyente en nuestra máquina de ataque en el puerto 4444.

Ya tendríamos conexión con la máquina VideoClub. Para el fin de este laboratorio podría ser suficiente, ya que con los privilegios que tenemos actualmente, ya podríamos realizar el pivote hacia la siguiente máquina. En esta ocasión, vamos a elevar a privilegios máximos y desde allí iniciamos el pivote.

Primero comenzamos realizando el tratamiento de la terminal.

Elevación de privilegios

Vamos a realizar una serie de enumeraciones manuales que nos pueden dar información útil para la elevación de privilegios.

No podemos ejecutar comandos sudo, no disponemos de password.

Continuamos enumerando binarios SUID.

El binario “ionice” puede ser interesante. Vamos a consultar en GTFOBins, si existe posibilidad de elevar privilegios aprovechar la presencia de este binario.

Ejecutamos en la terminal ./ionice /bin/sh -p y ya tendremos privilegios máximos.

Pivotando hacia CelebritySoup

Una vez hemos tomado privilegios máximos en la máquina VideoClub, vamos a comenzar el proceso para pivotar hacia el siguiente objetivo, Celebrity-Soup. El primer paso será averiguar a que redes tiene acceso la máquina VideoClub.

La red 192.168.56.0/24 es la red donde se encuentra nuestra máquina de ataque, por lo que ahora la red que nos interesa es la 192.168.220.132/24. Vamos a cagar un script de reconocimiento de IP mediante pingo con el que vamos a enumerar los equipos que están conectados a esta segunda red. Primero creamos un servidor HTTP con Python.

Damos permisos de ejecución y comenzamos a enumerar la red buscando otros equipos.

Recordamos que la IP 132 es de la máquina VideoClub, por lo que la IP que nos interesa para el siguiente paso es la 192.168.220.133. Próximo paso, cargar un binario de la herramienta “Chisel” en la máquina VideoClub. ¿Para qué sirve “Chisel”? En este caso, nos será útil para crear un túnel a través del cual poder conectarnos a la máquina víctima desde nuestra máquina de ataque, que en principio no tiene conexión directa con la máquina Celebrity-Soup. Para ello, volvemos a utilizar el mismo servidor HTTP Python creado anteriormente.

Vamos a crear el túnel utilizando “Chisel”. En la máquina de ataque ejecutamos lo siguiente:

Mientras que, en la máquina atacada, ejecutamos esto:

Una vez completada la ejecución, tendremos conexión con todos los servicios de la máquina “Celebrity-Soup” lanzando un único comando.

Se crea una conexión de tipo socks a la escucha en el puerto 1080. Para que esto funcione debemos crear una conexión socks para ese puerto en el archivo /etc/proxychains.conf. Añadimos la siguiente línea al archivo.

A partir de este momento, utilizaremos la herramienta “proxychains” para poder servirnos del túnel creado y poder conectarnos a “Celebrity-Soup” desde nuestra máquina de ataque.

El siguiente paso será vulnerar “Celebrity-Soup”.

CelebritySoup

Enumeración

Servicios abiertos

Comenzamos realizando una enumeración rápida de los servicios abierto en Celebrity-Soup con NMAP. Debemos utilizar “proxychains” para poder conectarnos desde nuestra máquina de ataque.

Siguiente paso, enumeración profunda de los servicios abiertos.

Tenemos servicios abiertos en:

  • Puerto 21: vsftpd 3.0.3
  • Puerto 22: OpenSSH 7.9p1
  • Puerto 80: Apache httpd 2.4.38

Como el puerto 80 está habilitado, vamos a comenzar viendo que contiene.

Enumeración Web

Antes de poder abrir el puerto 80 en el navegador de nuestra máquina de ataque, debemos configurar “foxy proxy” para poder tunelizar la conexión SOCKS5 hacia nuestro navegador y poder ver el contenido de la Web.

Vamos a seguir enumerando los directorios del sitio Web.

Interesante tenemos el archivo robots.txt, vamos que información contiene.

Abrimos los 4 contract*.html pero no contienen información interesante en principio.

Pasamos a abrir los archivos sector*.html. Una vez abiertos varios de ellos vemos que al final del código de cada uno de ellos tenemos este patrón repetido.

Vamos a descargar todos estos archivos y extraer todos los “secretos”.

Obtenemos lo que parecen las sílabas de una palabra que pueden pertenecer a un nombre de usuario o una contraseña. Ya también, tenemos las indicaciones para encontrar la sección 9.

La palabra formada es “puppetmaster”.

Vamos a continuación a buscar la ubicación de la sección 9. Analizamos tanto la web como el código fuente, pero no encontramos nada que parezca útil. Vamos a crear un diccionario a partir del contenido de la web con el que posteriormente volveremos a hacer fuzzing de directorios en la web.

Con la lista creada, vamos a volver a realizar otra tarea de fuzzing por si existiese otro directorio no encontrado anteriormente.

Vamos a ver el archivo encontrado en el navegador Web.

Hay una imagen. ¿Qué podemos hacer? Podemos extraer sus metadatos, descifrarla, buscar información en el código fuente de la página Web.

Vamos a buscar la imagen en el código fuente.

Descargamos la imagen.

Desciframos la imagen con esta herramienta.

Y con CyberChef, desciframos el binario obtenido anteriormente.

Puede ser una contraseña. Recordamos que tenemos un servicio SSH corriendo en el puerto 22.

Explotación

Con el posible nombre de usuario “puppetmaster” y la contraseña extraída de la imagen anterior, vamos a intentar iniciar sesión a través de SSH.

Ya tenemos acceso a la máquina víctima como usuario “puppetmaster”. Vamos a por la flag.

El siguiente paso será la elevación de privilegios.

Elevación de privilegios

En el mismo directorio donde encontramos la flag user.txt, encontramos un systeminfo que puede ser útil.

Vamos a analizar este archivo realizando reversing por si pudiese contener información interesante más allá de la que vimos anteriormente.

Vamos a filtrar por directorios interesantes.

En el comando “cat”, no se especifica una ruta absoluta, no como “/usr/bin/whoami”, entonces podemos crear un “falso cat” para que, al colocarlo en la variable de entorno, systeminfo ejecuta nuestro cat.

Vamos a comprobar si “systeminfo” tiene activo el bit SUID.

Cuando llamemos al ejecutable “systeminfo”, nuestro “falso cat” será ejecutado. Vamos a crear nuestro “falso cat”.

El siguiente paso será volver a ejecutar “systeminfo”. Ya deberíamos tener privilegios máximos en la máquina víctima.

Vamos a por la flag.

Como hemos modificado “cat”, no funciona para abrir la flag. Debemos utilizar “more” o “less”.

Y siguiente paso será el último pivoting del laboratorio, hacia la máquina “rei”

Pivotando hacia rei

Comenzamos comprobando en que redes tiene conexión la máquina “CelebritySoup”

Esta conectada a dos redes. La 192.168.220.0/24 corresponde a la red donde también está conectada la máquina “VideoClub”. Así que la red que nos interesa es 192.168.60.0/24. Vamos a cargar un ejecutable bash que realice un escaneo de las IP activas en esa red. Habilitamos un servidor con Python sobre la máquina VideoClub a partir de la cual transferiremos el ejecutable “reconIP.sh” a “CelebritySoup”. Una vez hecho esto, daremos permisos y ejecutaremos.

En nuestra máquina volvemos a conectar otra Shell con la que nos conectaremos a “VideoClub”, una vez hecho esto, ya podremos levantar el servidor.

En “CelebritySoup” transferimos el archivo.

Ejecutamos.

La IP “130” corresponde a la máquina “CelebritySoup”, por lo que la IP de “rei” es 192.168.60.129.

En este caso, el proceso de pivoting es más laborioso. Tenemos que hacer dos cosas, por un lado, levantaremos un cliente de “chisel” en la máquina “CelebritySoup” que lo vamos a redireccionar a un puerto aleatorio de la máquina “VideoClub” y por otro lado levantaremos la herramienta “socat” en la máquina “VideoClub”, que utilizaremos para reenviar la información recibida del puerto aleatorio anterior al puerto donde tenemos levantado el servidor de “chisel” de nuestra máquina de ataque. La finalidad de este montaje es poder acceder al segmento donde se encuentra “CelebritySoup” y “rei” desde nuestra máquina de ataque. También, debemos modificar el archivo proxychains.conf para adaptarlo a la nueva conexión creada.

Comenzamos:

Ejecutamos “chisel” en “CelebritySoup”

¿Qué significa esta ejecución? Por un lado tenemos que la información se va a enviar a la IP 192.168.220.132 en el puerto 4456 (VideoClub) y por otro lado, tenemos que la conexión socks se va realizar a través del puerto 8000 (recordamos que cuando ejecutamos “chisel” para acceder al segmento de “CelebritySoup”, el puerto por defecto y en uso ahora mismo, es el 1080).

Ejecutamos “socat” en “VideoClub”

De esta manera, toda la información que reciba la máquina “VideoClub” en el puerto 4456 será reenviada al puerto 4444 de nuestra máquina de ataque, el puerto donde tenemos levantado el servidor de “chisel”.

También, al igual que hicimos en el primer pivoting, debemos añadir el nuevo puerto de socks5 al archivo proxychains.conf y cambiar, strict_chain por dynamic_chain para poder utilizar ambos puertos.

Y ya deberíamos tener conexión con la máquina “rei”

Rei

Enumeración

Servicios abiertos

Estamos conectados a “rei” a través de un doble túnel, lo que significa que las conexiones pueden ser lentas. En este caso, vamos a comenzar la enumeración de puertos abiertos con la utilidad “masscan” que es más rápida que “nmap” en la enumeración de puertos abiertos. (No debemos pasarnos con los hilos de masscan ya que puede no detectar todos los servicios)

Tenemos dos puertos abiertos, 65333 y 63777. Ahora sí, vamos a “nmap” para el escaneo detallado de estos servicios.

Servicios abiertos:

  • Puerto 63777 -> HTTP -> lighttdp 1.4.59
  • Puerto 65333 -> SSH -> OpenSSH 8.4

Enumeración Web

Antes de continuar, recordamos que debemos configurar “foxy proxy” para poder acceder al sitio Web a través de socks.

Y ya podremos acceder.

Continuamos enumerando directorios y archivos disponibles en el servidor.

Vamos a analizar la información contenida en el archivo robots.txt.

Aunque no contiene nada de utilidad. Volvemos a la web estática por si hubiese alguna información que nos pudiese ser de interés.

Como podemos leer, en el texto se indica la existencia de un archivo indexp, en el directorio raíz del servidor.

Aunque no encuentra nada. Podemos probar añadiendo una extensión de texto, como txt.

Nos devuelve a que directorios podemos acceder y a cuáles no. Vamos a utilizar curl, para filtrar solo que directorios podemos ver su contenido.

Vemos varias urls, visitamos cada una de ellas, para ver su contenido.

Las demás urls nos devuelven error 404.

Vamos a realizar un escaneo de directorios para las dos urls encontradas.

Vamos a ver que contiene el archivo en la dirección “/gichin/your-button/note.html”

Vamos a ver el código fuente por si pudiese contener alguna información interesante.

Contiene un enlace. Vamos a ver su contenido. Además, de poder ser un posible usuario para SSH (chuck-norris).

Vemos una frase que también nos da indicios de que Chuck Norris es un usuario del sistema.

Balance is key, ¿será Balance una password?

Vamos a abrir el directorio “ssh”

Vamos a realizar un escaneo del directorio “ssh”, para ver qué información podemos encontrar.

Y encuentra el archivo rsa. Vamos a descargarlo y a ver su contenido.

Vamos a probar a utilizar esta clave RSA con el usuario chuck-norris que encontramos anteriormente.

Explotación

Pero nos pide una password. Podemos probar una palabra que encontramos anteriormente en una frase mientras analizábamos el código fuente de la web. Esta palabra era balance o Balance, vamos a probar.

La contraseña correcta es balance.

Y buscamos la flag user.txt, la primera flag de la máquina.

“cat” no funciona, vamos a probar otros programas para abrir este archivo. El primero será “less”. Si este no funciona, probamos con pico.

Finalmente, podemos abrir la flag user.txt con la utilidad “pico”.

Elevación de privilegios

Vamos a enumerar archivos SUID, posibles archivos editables… Esta tarea la vamos a realizar de forma automática con un ejecutable de “linpeas”. Este binario lo vamos a enviar desde nuestra máquina de ataque a través de una cadena de servidores Python HTTP levantados en cada una de las máquinas levantadas. Una vez enviado el archivo hasta la máquina “rei”, damos permisos de ejecución y lo lanzamos. Después de unos instantes ya tenemos la primera información interesante. “Rei” presenta la vulnerabilidad CVE-2022-0847, “DirtyPipe”.

Posible vector de elevación de privilegios.  Para a descargar un exploit para tratar de aprovechar esta vulnerabilidad que nos debe permitir elevar privilegios. La forma de operar, la misma que con el ejecutable de “linpeas”. También debemos dar perisos de ejecución.

Tras ejecutar el exploit, ya tenemos privilegios máximos dentro de la máquina “rei”. Vamos a por la flag.

Para ello, nos dirigimos al directorio root y en su interior se encuentra la flag root.txt.

O no, que también es una opción. En el archivo podemos leer la frase de “Maritrini es la clave”. Vamos a probar si existe algún archivo que se contenga en su nombre maritrini.

Parece que si existe un archivo maritrini. Vamos a ver su contenido.

Obtenemos la flag root, y podemos dar por vulnerada la máquina y superado el laboratorio de pivoting.

No responses yet

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *