bmweb.fr

Injection (détournement de requête)

Définition injection

  • 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
Haut de page