web-dev-qa-db-fra.com

MARIADB SQL Vulnérabilité d'injection?

Je teste pour une injection SQL sur un site Web.

Fondamentalement, j'essaie de l'URL suivante:

http://example.org/webpage/*

où à la place du * La charge utile doit être injectée. Quand j'essaie de mettre là-bas ceci: ' OR 1=1/*, l'URL sera donc: http://example.org/webpage/'%20OR%201=1/*- C'est la sortie:

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '/*', 'IT', 'name=\' OR 1=1/*', 1499954730)' at line 1

Cela signifie-t-il que c'est une injection SQL vulnérable? Si oui, comment puis-je essayer de l'exploiter avec SQLMAP? C'est ce que j'ai essayé de courir:

$ sqlmap -u "http://example.org/webpage/*" Mais il dit qu'il n'y a rien d'injectable et je pense fortement que cela a échoué.

1
XRichardX

Je pourrais avoir tort, mais je suis assez certain que votre principal problème est que vous essayez de faire une injection MySQL mal. En règle générale, si une charge utile peut déclencher une erreur de syntaxe SQL, vos tentatives de prévention de l'injection SQL ne sont pas vraiment fonctionnent. Par exemple, si vous utilisiez des requêtes préparées, la charge utile n'a aucun moyen d'obtenir une erreur de syntaxe SQL du tout.

Dans ce cas particulier, le problème est que vous utilisez le mauvais type de commentaire pour masquer le reste de la commande. Dans ce cas, vous auriez probablement plus de chance (faire une injection SQL se produire) si vous avez utilisé un double tiret (--) ou signe de livre (#) qui commencent les deux commentaires mono-line à Mariadb. Le caractère de commentaire que vous utilisez (/*) est un personnage de commentaire multiligne qui n'a pas de caractère de commentaire de fermeture. Cela semble être la source de l'erreur SQL. Bien que je ne connaisse pas personnellement avec SQLMAP, ma suspicion est que cela ne pense pas qu'il existe une vulnérabilité d'injection, non pas parce que vous êtes en sécurité, mais simplement parce que votre charge utile d'injection génère une erreur SQL et que aucune injection ne se produit. Réessayez avec le caractère de commentaire approprié.

Réitérer, le fait que vous obteniez une erreur SQL me fait penser que vous êtes vulnérable à l'injection SQL, vous ne faites simplement pas l'injection SQL correctement.

éditer

Je pense que votre prochaine étape consiste à ignorer un peu SQLMAP. L'attaque que vous faites ' OR 1=1 sélectionnerait tous les enregistrements. Votre URL implique qu'il s'agit d'un type de page view, qui ne montre qu'un seul enregistrement à la fois. En conséquence, de nombreux cas où une telle charge utile d'injection SQL peut ne pas avoir de résultats sur la page en question. C'est la partie qui peut le rendre délicat: l'injection SQL n'est que "réussie" si vous pouvez réellement faire quelque chose avec l'attaque et l'impact de l'application de manière significative. Donc, par exemple, si votre charge utile le fait charger tous les enregistrements de la commande SQL, mais la page en question ne montre que le premier résultat (car il s'agit d'une page de type view), alors vous ne réaliserez pas. que votre injection a réussi.

Le court est que votre charge utile d'injection SQL donnée est spécifique au contexte et peut ne pas fonctionner dans tous les endroits sur un site Web donné, même si la page est vulnérable à l'injection SQL. Cela rend l'injection SQL très délicate. Certains outils d'injection SQL peuvent automatiser une partie de cette tondité, mais je ne sais pas si sqlmap est un tel outil.

Alors fossé sqlmap pour un moment. Essayez un autre type de charge utile. Au lieu de choisir ' OR 1=1 essayer de faire ' AND 1=0. Cela devrait (théoriquement) entraîner des enregistrements zéro. Donc, si vous obtenez un 404 (ou des résultats en général), je considérerais cette preuve que la page est vulnérable à l'injection SQL.

Bien sûr, si vous vous sentez méchant, vous pouvez simplement essayer des variantes sur '; DROP TABLE users-- jusqu'à ce que quelque chose se casse :) ce serait méchant cependant.

3
Conor Mancone

Bonjour 2u.

Vous faites une erreur avec point d'injection. http://example.org/webpage/ '% 20OR% 201 = 1/* <--- Bad http://example.org/webpage/ */<--- bien

Essayez d'attraper une demande HTTP complète avec Web-Debugger (E.x. LivehttTHeaders/Burpsuite) et enregistrez-la dans Fichier (E.x. Req.txt). Après cela, démarrez SQLMAP avec la chaîne suivante: python sqlmap.py -r req.txt -threads 10 -level 5 --Risk 3 --Random-agent -batch -v 3 et coller la sortie ici.

Tout le meilleur, N.T.

0
r3V0Lution