SQL injection

Auteur: Brouettelover 2024-01-03 14:18:29
Categories: > Tags:

Description

Une injection est une vulnérabilité web qui permet à un attaquant d’intérragir directement avec les requêtes faites entre la base de données et l’application.

Ce qui permet de voir, modifier, supprimer des données de l’application.

Comment détecter une vulnérabilité SQL

Le caractère guillemet simple ‘ et rechercher des erreurs ou d’autres anomalies.

Une syntaxe SQL spécifique qui évalue la valeur de base (originale) du point d’entrée et une valeur différente, et qui recherche des différences systématiques dans les réponses de l’application.

Conditions booléennes telles que OR 1=1 et OR 1=2, et recherche de différences dans les réponses de l’application.

Charges utiles conçues pour déclencher des délais lorsqu’elles sont exécutées dans le cadre d’une requête SQL, et recherche de différences dans le temps de réponse.

Charges utiles OAST conçues pour déclencher une interaction réseau hors bande lorsqu’elles sont exécutées dans le cadre d’une requête SQL, et surveiller les interactions qui en résultent.

Exemple pratique

https://insecure-website.com/products?category=Gifts'+OR+1=1--

Est l’équivalent de :
SELECT * FROM products WHERE category = ‘Gifts’ OR 1=1–’ AND released = 1

– étant le caractère de commentaire

La partie released = 1 étant commenté elle ne sera pas exécuter et donc l’ensembre des produits gifts seront affichés.

Changer la logique d’une application

Imaginons qu’une application utilise une requête SQL pour connecté un utilisateur

SELECT * FROM users WHERE username = ‘administrator’ AND password = ‘bluecheese’

Il serait possible de commenter la deuxième partie et de bypass la demande de mot de passe et donc de se connecté directement.

En utilisant par exemple ce nom d’utilisateur : administrator’–

SELECT * FROM users WHERE username = ‘administrator’–’ AND password = ‘’

la partie après – serait donc commenter et l’application ne vérifira que si le compte administrator existe.