Injection SQL (attaque)
Injecter du SQL, c'est quoi?
Une injection SQL c'est quoi?
- une situation où l'utilisateur peut exécuter du SQL de son choix sur la BD
- PAS LE PROGRAMMEUR mais l'utilisateur, nooooooooooonnnnnnnnnnn
- parce que le programmeur a pris ce que l'utilisateur lui a donné et l'a mélangé sans faire attention avec son code.
Ressource: https://www.w3schools.com/sql/sql_injection.asp
Pourquoi c'est rare mais très dangereux
Beaucoup d'attaques sont possibles parce qu'il faut faire un effort pour se protéger.
Pour les injections SQL, il faut programmer mal pour que ça arrive.
Les programmeurs paresseux sont très nombreux.
Les mauvais programmeurs sont moins nombreux.
Les mauvais programmeurs qui concatènent des données utilisateurs dans des requêtes SQL sont encore moins nombreux.
Par contre, quand la faille est là, il n'y a aucune limite au code qu'on peut exécuter. En bref, on est morts.
Comment ça marche
Imaginons une requête SQL construite par concaténation:
string query = "SELECT * FROM users WHERE username = '" + username + "'";
Si l'utilisateur entre admin' OR '1'='1 comme nom d'utilisateur, la requête devient:
SELECT * FROM users WHERE username = 'admin' OR '1'='1'
Cette requête retourne tous les utilisateurs car '1'='1' est toujours vrai!
Types d'injections SQL
1. Bypass d'authentification
Entrer ' OR '1'='1 dans un champ de login
2. Extraction de données
Utiliser UNION SELECT pour extraire des données d'autres tables
3. Modification de données
Utiliser ; UPDATE ou ; DELETE pour modifier la base de données
4. Destruction
Utiliser ; DROP TABLE pour détruire des tables entières
Exercices et CTF
Activité: Application escuelle
- Clonez ce repo avec votre client git préféré: https://github.com/departement-info-cem/escuelle
- vous trouverez un fichier sln pour une application
- il s'agit d'une application qui enregistre des comptes et leurs notes
- familiarisez-vous avec l'application en créant 2-3 comptes avec chacun 2-3 notes
- vous pouvez aussi regarder à quoi ressemble la BD avec DataGrip
Une fois que vous avez pris connaissance de l'application, passez à travers le fichier injections.md
N'hésitez pas à poser des questions au prof.
Temps pour le TP3
En vous inspirant un peu / beaucoup de l'activité, tentez de voir si vous pouvez trouver une attaque d'injection SQL sur l'application du TP3.