Bienvenue dans le Bac à Sable !


      Retour à la liste des mises en situation.


Imaginez que ce qui suit est un endroit pour se connecter en tant qu'administrateur.
L'identifiant est "admin" et le mot de passe est "123456"
Connectez vous avec 123456 et vérifiez que cela fonctionne.
Puis cliquez sur Actualiser la page et réessayez de vous connecter avec le code suivant à la place du mot de passe :
' or '1'='1




Explications et contre-mesures

L'injection SQL est une attaque très dangereuse.
Lorsque les données d'un utilisateur ne sont pas filtrées, ce dernier peut communiquer directement avec la base de données du site.
Il est donc possible de récupérer les mots de passe des utilisateurs depuis cette base de données ou comme on l'a vu de se connecter directement sans fournir de mot de passe valide.
Imaginons que le code SQL du serveur distant est le suivant :
SELECT id FROM users WHERE name = 'Admin' AND password = 'MDP'
(avec MDP étant le mot de passe entré dans le champ prévu à cet effet)
Mais en injectant du code SQL, l'exemple donné formera une requète SQL comme :
SELECT id FROM users WHERE name = 'admin' AND password = '' OR '1'='1'
Ce qui signifie (en simplifiant) : Sélectionner les utilisateurs dont le nom est 'admin' ET dont le mot de passe est vide OU si 1 est égal à 1.
Puisqu'on teste si le mot de passe est vide ou si 1 est toujours égal à 1, la condition est vérifiée (1 valant 1). Et le code va donc sélectionner le compte administrateur et poursuivre. On est donc connecté comme Administrateur.
Le code SQL donné en exemple n'est qu'un exemple parmi tant d'autres. Voici d'autres possibilités : https://github.com/payloadbox/sql-injection-payload-list.
Plus d'informations.