L’attaque par injection consiste à injecter du code, via un champ de saisie utilisateur, dans une requête exécutée sur un serveur pour en modifier le contenu
Elle peut concerner tous les langages utilisés sur les serveurs ou services web
Elle peut même concerner des programmes
L’injection la plus connue est l’injection SQL
Objectif et déroulement de l’attaque par injection
L’injection consiste à utiliser un champ de saisie utilisateur pour modifier ou exécuter des requêtes non prévue initialement et donc non autorisées
Cette attaque permet d’accéder à la base de données pour :
Connaître les noms des tables
Connaître les noms des champs
Connaître les valeurs des enregistrements des tables
Ajouter, modifier ou supprimer des enregistrements
Par exemple il suffit de rentrer une condition toujours vraie (par exemple 1=1) pour passer outre un contrôle
Il est même possible de rajouter une autre requête à la suite de celle normalement prévue
Exemple d’injection d’une condition toujours vraie
Cette injection concerne par exemple la page d’identification de la partie administration du site web
Il y a un champ pour le login et un champ pour le mot de passe
Normalement l’utilisateur saisit ses identifiants et si le couple login/mot de passe existe et est correct, l’utilisateur accède à la page d’administration
La requête normale se présente sous la forme suivante :
SELECT UTI_ID FROM UTILISATEURS WHERE UTI_LOGIN="<SAISIE 1>" AND UTI_MOT_DE_PASSE="<SAISIE 2>";
Si l’utilisateur saisit :
<SAISIE 1>
" OR 1=1 ; --
La requête envoyée au serveur devient alors :
SELECT UTI_ID FROM UTILISATEURS WHERE UTI_LOGIN="" OR 1=1 ; --" AND UTI_MOT_DE_PASSE="<SAISIE 2>";
SELECT UTI_ID FROM UTILISATEURS WHERE UTI_LOGIN=" est la partie normale de la requête
" (Le premier guillemet) permet de fermer la valeur de la première variable (si cela ne fonctionne pas, essayez avec une simple quote)
OR 1=1 est une condition toujours vraie qui ramènera toujours un résultat
; permet de terminer la requête
-- (double tiret du 6) met en commentaire la suite normale de la requête pour qu’elle ne soit pas exécutée