Les injections SQL

Le principe

Les injections SQL sont actuellement les failles les plus répendues sur le web. Elles reposent sur un principe tout simple : injecter du code SQL dans les requêtes SQL qu’effectue un service web. Il est alors possible de contourner une authentification, de dumper une base de donnée, ou de faire exécuter du code arbitraire par le serveur cible.

Nous verrons par la suite un exemple permettant de contourner une authentification pour illustrer ce principe.

sql_injection-jpg2

Contourner une authentification

Pour qu’un programme puisse authentifier un utilisateur, il est souvent demandé à celui-ci sont pseudo et son mot de passe. Ces informations, connues de l’utilisateur, sont également stockée dans une base de donnée du serveur. Le client envoie ces informations via un formulaire, et le serveur vérifie avec une requête SQL du type
SELECT * FROM membres WHERE login = ‘$login’ AND password = ‘$password’
$login et $password sont les informations envoyées par le client.

En temps normal, le résultat de la requête est une ou zéro ligne. L’authentification sera réussie sur la requête retourne une ligne (si le couple pseudo/password existe en base de données) et sera échouée si la requête ne retourne aucune ligne (si le couple pseudo/password n’existe pas en base de données).

Cependant, l’utilisateur décide d’envoyer un pseudo du type ‘ OR 1=1 # (# est un caractère marquant le début d’un commentaire en sql), le requête devient alors :
SELECT * FROM membres WHERE login =  » OR 1=1 #’ AND password = ‘$password’
Cette requête sera valide quelque soit la ligne concernée : la requête retourne alors toute la table. On est alors bien souvent authentifié comme le premier couple pseudo/password de la table retournée, qui est en général… l’admin !

Une autre méthode consiste à s’authentifier avec un pseudo connu à l’avance, et d’effectuer la procédure précédente dans le mot de passe. Nous pouvons ainsi choisi de nous authentifier avec le pseudo voulu !

Les attaques récentes

Les attaques par injection SQL sont les plus répendues sur la toile. Parmi les attaques de grandes envergures ayant récemment eu lieu, on trouve :

  • le site de l’organisation mondiale du tourisme, attaquée en février 2016, et ayant permi le vol de 1300 identifiants et des mots de passes associés (hashés en MD5)
  • différents sites webs utilisant Microsoft MS-SQL en janvier 2015
  • différents sites webs créée grâce au framework Magento en avril 2015
  • le site de l’organisation mondiale du changement climatique en novembre 2015, ayant permi le vol des identifiants, des mots de passe, des adresses mail, etc. des utilisateurs

Les exemples sont légions, et on trouve même sur internet des « Hall of shame » des sites ayant subit de telles attaques. On citera par exemple la page http://codecurmudgeon.com/wp/sql-injection-hall-of-shame/.

 

Publicités
Cet article a été publié dans Non classé. Ajoutez ce permalien à vos favoris.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s