XUT_ / MACHINES / THM

0070

Sequence

THMMACHINENONEMEDIUM

Introduction

Getting the Flags

Reconocimiento Inicial

Comenzamos escaneando los puertos abiertos de la máquina.

sequence

Una vez escaneados vamos a realizar un escaneo más en profundidad de dichos puertos.

sequence

Vemos un httponly flag not set, puede que podamos usar un XSS.

Ahora saltamos a listar directorios web de la página.

sequence

Esta es la estructura de los documentos que dan código 200 con un tamaño >0B.

text
sequence.thm
    ├── mail [200 452B]
    │   └── dump.txt [200 442B]
    ├── phpmyadmin [200 3KB]
    │   ├── doc
    │   │   └── html
    │   │       ├── config.html [200 44KB]
    │   │       ├── faq.html [200 48KB]
    │   │       ├── index.html [200 3KB]
    │   │       ├── search.html [200 1KB]
    │   │       ├── settings.html [200 2KB]
    │   │       └── user.html [200 2KB]
    │   ├── js
    │   │   ├── common.js [200 5KB]
    │   │   ├── config.js [200 7KB]
    │   │   ├── export.js [200 6KB]
    │   │   └── sql.js [200 9KB]
    │   ├── favicon.ico [200 22KB]
    │   └── index.php [200 3KB]
    ├── uploads [200 404B]
    ├── contact.php [200 764B]
    ├── header.php [200 576B]
    ├── login.php [200 747B]
    └── new.html [200 357B]

Vamos a ver cómo es la web.

sequence

Vamos a revisar los directorios.

sequence

Un archivo dump.txt, interesante, seguimos mirando directorios.

sequence

Vemos un script que parece hecho para elevar los privilegios de un usuario promote_coadmin.php. Seguimos mirando directorios.

sequence

Aquí podemos ver que la versión utilizada de phpMyAdmin es la 4.9.5.

Además vemos que hay un directorio de subidas, que por el momento está vacío.


Profundización

Vamos a ver qué es el documento dump.txt.

sequence

De aquí sacamos varia información importante.

  • Hay dos correos conocidos:
    • software@review.thm
    • product@review.thm
  • Dos endpoints en una red interna, 192.x.x.x:
    • /finance.php
    • lottery.php
  • La contraseña que protege el acceso a dichos paneles.
  • El usuario que manda el correo es Robert, puede que tenga usuario en la máquina como robert.

Vamos a mirar a ver si hay alguna vulnerabilidad conocida en phpMyAdmin 4.9,5.


Acceso Inicial

XSS

Empezamos probando un payload contra el formulario.

sequence

Parece que nos ha dejado enviarlo y que alguien lo verá.

sequence

De vuelta en nuestro listener hemos obtenido la cookie.

sequence

La sustituimos en el navegador, nos vamos a dashboard.php y...

sequence

En el panel de Settings vemos que hay una manera de cambiar la contraseña.

sequence

La cambiamos y volvemos a iniciar sesión. Ahora vamos a probar con el de promocionarnos a co-admin.

sequence

Parece que no podemos promocionarnos. Vamos a investigar un poco más.

Si nos metemos en el chat podemos observar lo siguiente.

sequence

Hemos encontrado la flag del mod. Además, mirando el código fuente del chat vemos lo siguiente:

sequence

Por lo que asumimos que se están filtrando palabras clave "maliciosas". Sin embargo, si nos fijamos en la página, parece que se interpreta incorrectamente:

sequence

CSRF

Vamos a intentar aprovechar esto para obtener la cookie del admin.

sequence

Sin embargo nos salta la alerta:

sequence

Vamos a mandar sólo la IP.

sequence

Parece que obtenemos una conexión:

sequence

Esto significa que el admin hace click en cualquier enlace mandado. Sin embargo, antes vimos que se estaba usando un token csrf, por lo que sin el token csrf correcto no podremos hacer que el admin haga una petición exitosa a /promote_coadmin.php.

Vamos a investigar el token CSRF, parece un MD5.

sequence

Vaya vaya, parece que el token CSRF se genera a partir del username. Vamos a generar una petición HTTP para que el admin cambie el rol de mod. Para ello, vamos a generar el token del usuario admin.

sequence

Ahora mandamos la petición.

sequence

Y técnicamente ahora somos admin.

sequence

Si cerramos sesión y volvemos a abrirla vemos que el panel ha cambiado.

sequence

Si volvemos al chat, podemos ver la flag de admin.


Escalada de Privilegios

SSRF

Si vamos y seleccionamos la funcionalidad de lotería podemos ver lo siguiente:

sequence

Vamos a cambiar el lottery.php por un finance.php, que vimos antes.

sequence

Parece que acabamos de encontrar el panel de finanzas. Vamos a interceptar la petición en Burp y a mandarlo y metemos la contraseña.

sequence

Vamos a ver qué hay dentro.

sequence

Una funcionalidad de subida, esto puede sernos útil, teniendo en cuenta que había un directorio expuesto para las subidas /uploads/.

Upload Vulnerability

Vamos a subir una reverse shell en PHP. Pare ello primero la copiamos y editamos.

sequence

Nos ponemos en escucha

sequence

La subimos.

sequence

Y obtenemos lo siguiente:

sequence

Sin embargo, si vamos al directorio no vemos nada.

sequence

Es probable que sea porque estamos en una red interna. Pero vamos a modificar la petición que hacíamos a finance.php para hacerla a /uploads/sequence.php.

sequence

Bingo! Vamos a ver qué hay dentro. Primero la estabilizamos.

sequence

Y ahora podemos claramente ver que estamos dentro de un contenedor.

Docker Escape

Vamos a cargar y a ejecutar linpeas.sh:

  1. Creamos un servidor.

sequence

  1. Lo cargamos y ejecutamos.

sequence

No hemos encontrado nada muy obvio, sin embargo, podemos ejecutar docker dentro del contenedor (y somos root).

sequence

Vamos a ver si podemos elevar privilegios por ahí.

sequence

Podemos usar la imagen para montar el / del host en /host y leer el directorio /root.

sequence

Ahora simplemente leemos la flag.


Conclusión

Una máquina muy divertida, encadenando varias vulnerabilidades. La parte más complicada sin lugar a dudas vuelve a ser la del escape del contenedor. Sin embargo esta se adecua mucho más al nivel que la anterior máquina de dificultad media. Me ha gustado bastante.