Post

Mustacchio - WriteUp (Easy)

Introducción

Les presento esta máquina de la plataforma TryHackMe llamada Mustacchio en las cuales tocamos la vulnerabilidad XXE (XML Entity Injection), enumeracion y escalación de privilegios. Para ponernos en contexto, una vulnerabilidad XXE, es una vulnerabilidad de seguridad en la que un atacante puede utilizar una entrada XML maliciosa para acceder a recursos del sistema que normalmente no estarían disponibles, como archivos locales o servicios de red. Esta vulnerabilidad puede ser explotada en aplicaciones que utilizan XML para procesar entradas, como aplicaciones web o servicios web.

Reconocimiento

Lo primero que haremos es la fase de reconocimiento, para descubrir puertos abiertos en la máquina, utilizaremos nmap con los siguientes parámetros para agilizar el escaneo:

  • -p- : Con esto le indicamos que nos escanee los 65535 puertos de la máquina
  • –open : Este parámetro indica que solo queremos ver los puertos que están abiertos
  • –min-rate 5000 : Con este parámetro le indicamos que queremos enviar paquetes no mas lentos que 5000
  • -sS : Este parámetro hace alusión al TCP SYN Port Scan, que es un escaneo bastante sigiloso a la par que rápido
  • -n : Este parámetro es para que no aplique resoluciones DNS
  • -Pn : Este parámetro es para que no nos aplique descubrimiento de host a través del protocolo de resolución de direcciones ARP
1
sudo nmap -p- --open --min-rate 5000 -sS -n -Pn <IpMachine> 

Como podemos observar, nos ha reportado los puertos que están abiertos en la máquina, que son el puerto 22, el puerto 80, y el puerto 8765 los servicios a los que corresponden estos puertos son:

  • Puerto 22: Corresponde al servicio SSH
  • Puerto 80: Nos indica que hay un servicio web corriendo por detrás
  • Puerto 8765: Nos dice indica que es un servicio ultraseek-html

Reconocimiento

Lo que haremos ahora es lanzar un conjunto de scripts por defecto a estos puertos, y también para descubrir los servicios y versiones de estos, para esto utilizaremos los siguientes parámetros:

  • -p22,80,8765 : Utilizamos este parámetro de esta manera, ya que solo nos interesa escanear esos puertos que fueron reportados
  • -sC : Este parámetro hace alusión a un conjunto de scripts vulnerables que tiene nmap por defecto
  • -sV : Este parámetro hace alusión a descubrir las versiones de los servicios expuesto

Puertos

Al estar el puerto 80 reportado lo que haré es ver que hay en aquella web, y al ingresar nos reporta esta página:

Web

Observando la página no encontré nada interesante, así que lo que hare ahora es fuzzear para ver si puedo encontrar directorios ocultos dentro de la web. Para esto utiliaré dirsearch, pero existen otras herramientas bastantes útiles como fuff, wfuzz o gobuster. Dirsearch nos ha reportado algunos sitios que pueden ser de nuestro interés:

Dirsearch

Me llamó bastante la atención el directorio Custom, así que decidí revisar su contenido. En la primera carpeta llamada css/ no encontré nada que pudiese ayudarme, así que decidí revisar la carpeta js/ para ver su contenido y encontré un archivo llamado "users.bak" así que lo descargué (solo hay que hacer click en el nombre):

Js

Estando en nuestro terminal, nos traemos el archivo descargado a nuestra carpeta de trabajo de la siguiente manera: (básicamente le especificamos la ruta desde donde nos queremos traer el archivo, y luego con el punto (.) hacemos alusión al directorio donde nos encontramos)

Bash

Como podemos notar, este archivo llamado users.bak tiene de extensión ".bak", así que lo que haremos es ver que tipo de archivo es y para esto, utilizaremos el comando file. Y como podemos ver, el archivo corresponde a SQLite 3.x

SQlite

Ahora que sabemos que podemos ver el contenido de aquel archivo, en nuestra consola podemos imprimir el texto de un archivo SQlite3, al hacer esto, estaremos interactuando con el archivo, y podemos dumpear el archivo para ver su contenido de la siguiente manera: (si no tienes instalado SQlite3, puedes hacerlo de la siguiente manera: sudo apt install sqlite3)

admin

Lo que haremos es aplicar fuera bruta a este hash para poder descubrir la password del usuario admin, y para esto utilizaremos John The Ripper, nos crearemos un archivo llamado hash y pondremos el hash que nos encontramos dentro de users.bak : 1868e36a6d2b17d4c2745f1659433a54d4bc5f4b y podemos ver que nos ha reportado la password: bulldog19 Lo que yo siempre recomiendo es crear un archivo llamado credentials.txt para guardar las credenciales que encontremos. (Aunque pueden nombrarlo como ustedes prefieran).

1
2
3
4
5
nano hash --> 1868e36a6d2b17d4c2745f1659433a54d4bc5f4b

john --wordlist=/usr/share/wordlists/rockyou.txt hash

nano credentials.txt --> user: admin password: bulldog19

John

Una vez tenemos las credenciales, iremos a la web y especificaremos el puerto 8765 donde podemos ver que nos redirige a un panel de administrador, como nosotros tenemos las credenciales de admin, lo que haremos es colocarlas en este panel:

Panel

Luego de que accedamos con las credenciales de admin nos lanza a esta web, y en el recuadro de en medio nos dice que podemos añadir un comentario, en este caso el comentario que añadí fue hola:

Hola

Me llamó bastante la atención y decidí interceptar la petición con Burpsuit para ver lo que estaba sucediendo. Hay algo muy curioso, ya que al enviar el comentario de “hola” nos aparece xml=hola

Burp

La petición que interceptamos la enviamos al repeater, y luego con Send enviamos la petición. Si analizamos el código nos daremos cuenta que hay una ruta especificada, y esa ruta tiene un archivo llamado dontforget.bak y si vemos más abajo, hay un comentario que dice: Barry, you can now SSH in using your key! esto nos puede decir algo muy interesante:

Forget

Al momento de colocar la ruta en la URL, nos descarga el archivo llamado dontforget.bak:

userbak

Si analizamos el archivo descargado, se puede observar que tiene la misma extensión del archivo user.bak, pero de todas maneras debemos volver a ver que tipo de archivo es:

bak

El archivo nos proporciona una estructura XML que se puede utilizar para poder modificar la petición desde Burpsuite:

XML

Al tener la estructura XML propocionada, podemos copiarla y pegarla en la web donde pedía añadir un comentario, para esto utilizaremos Burpsuite para interceptar la petición:

Peticion

Cuando se intercepte la petición con Burpsuite, en la estructura XML se incluirá DOCTYPE, author y especificarle la ruta que se quiere observar (se puede borrar el comentario para que se vea mas limpio), al enviar la petición, podemos ver que la respuesta dada representa al /etc/passwd, que es la ruta que especificamos:

Ejemplo:

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE author [<!ENTITY read SYSTEM 'file:///etc/passwd'>]>
<comment>
  <name>Joe Hamd</name>
  <author>&read;</author>
  <com>
  </com>
</comment>

passwd

Como sabemos que estamos apuntando a archivos dentro de la máquina, podemos saber con una pista clave anteriormente vista, y es que barry puede utilizar SSH, así que ahora podemos apuntar directamente al id_rsa de barry, y el resultado que nos arroja es su llave privada de SSH:

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE author [<!ENTITY read SYSTEM 'file:///home/barry/.ssh/id_rsa'>]>
<comment>
  <name>Joe Hamd</name>
  <author>&read;</author>
  <com>
  </com>
</comment>

id

Copiamos la llave de barry, crearemos un archivo llamado id_rsa donde pondremos la llave privada de barry, con chmod le daremos permisos 600, con ssh2john convertimos el id_rsa en un hash para luego crackearlo con JohnTheRipper:

1
2
3
ssh2john id_rsa > hash

john --wordlist=/usr/share/wordlists/rockyou.txt hash

john

Al momento de obtener la contraseña, lo que haremos es conectarnos a través de SSH utilizando la clave privada que es el id_rsa que obtuvimos y lo utilizaremos para la autenticación, con el parámetro -i le indicamos el id_rsa, luego nos pedirá la contraseña que crackeamos con john, la colocamos y ya estaremos dentro:

SSH

Cuando estemos dentro, listamos los archivos que estén en el directorio actual, y encontraremos la primera flag de este CTF:

flag

Lo que haré yo en este caso, será enumerar los permisos SUID, y encontré algo bastante interesante, llamado live_log dentro del directorio de joe:

SUID

Como sabemos que el archivo live_log está dentro del directorio de joe, lo que haremos es ver sus permisos, y como sabemos que tenemos permisos de lectura, ejecutaremos un strings junto con este archivo. Al leerlo, nos encontraremos con la sorpresa de que se está ejecutando un comando, el cual lo que hace, es seguir el contenido de un archivo de registro, y a su vez mostrar nueva información que se agregue al final del archivo:

live

Ya que sabemos que se ejecuta con privilegios de root, lo que haremos para explotarlo es lo siguiente: crearemos un archivo que se llame tail, a este archivo le pasamos un /bin/bash, lo que hará es que cuando se ejecute este archivo llamado tail, nos entregue una shell, luego le daremos todos los privilegios a este archivo, y luego la ruta la exportaremos al PATH:

path

Luego nos vamos a la carpeta de joe, y ejecutamos el archivo live_log, y automáticamente nos convertiremos en usuario root, luego nos dirigimos a la carpeta root y leemos la última flag de este CTF:

root

Máquina muy divertida la verdad, otra manera de poder explotarla pudo haber sido utilizando PwnKit, pero no siempre es lo ideal. Espero les haya gustado!.

PD: Si ven distintas máquinas dentro de todo este CTF, es que tuve problemas con algunas de las máquinas, pero finalmente ya está todo solucionado.

This post is licensed under CC BY 4.0 by the author.

Trending Tags