Maison >Opération et maintenance >Sécurité >Comment analyser les problèmes avec sqlmap
0x00 Présentation
Récemment, j'ai rencontré un phénomène étrange lors de l'utilisation de sqlmap pour les tests d'injection. La version supérieure de sqlmap ne peut pas détecter l'injection, mais la version inférieure peut détecter l'injection et les données peuvent être épuisées, ce qui est le cas. pas un faux positif. Après des tests de comparaison et en regardant le code source de sqlmap, j'ai trouvé deux petits trous.
Reproduction de scénario 0x01
Format du point d'injection : json
..."whereparams":[{"name":"keyWord","value":"test"}]}
Paramètres injectables : value
sqlmap Command :
python sqlmap.py -r sqlpk.txt –flush-session -vv
sqlmap v1.2.11 ne peut pas être injecté
sqlmap v1.2 injecté avec succès
Identique à la v1.2.1 0 impossible d'injection, la v1.1.12 peut être injectée
Après analyse, les deux pièges sont les suivants :
(1) Le border.xml de la v1.2.11 (/v1.2.10/v1.2.9/master) n'a pas de test de flou requête (%). Et la v1.2 (/v1.1.12/1.1.4/1.2.2) l'a.
(2) v1.2.11 (/v1.2.10/1.2.9/master) doit définir manuellement un certain paramètre de json sur * afin d'injecter ce paramètre (même si y-inject inside est sélectionné), sinon la charge utile sera suivre directement json ne peut pas être injecté, mais la v1.2 (/v1.1.12) peut par défaut appuyer sur Entrée (y) pour injecter un certain paramètre de json.
0x02 Test détaillé
points de fosse (1) :
Comprenez d'abord la composition de la charge utile de sqlmap :
//Source de l'image https://www.freebuf.com/colum...
Prenez un coup d'oeil Charge utile de test de la v1.2 :
Charge utile utilisée : %' et 5731=5731 et '%'='
Il s'agit d'une injection de champ de recherche très courante
Regardez les limites.xml de la V1.2 :
Le border.xml de la v1.2.11 n'a pas de test d'injection pour les requêtes floues !
https://github.com/sqlmapproj...
J'ai donc ajouté le test d'injection de la requête floue au fichier de la v1.2.11, et ajouté manuellement * aux paramètres d'injection (comme la valeur), et l'injection a été réussi!
Ci-joint la version ajoutée :
https://github.com/theLSA/sql...
pr a obtenu la réponse car il y avait trop de faux positifs, donc la charge utile pertinente a été supprimée, mais elle le sera limitée.
https://github.com/sqlmapproj...
Points de pit (2) :
Comparez les charges utiles de la v1.2 et de la v1.2.11 :
On peut voir que la v1.2.11 directement connecte la charge utile à la fin de json.
Ajoutez manuellement *
%22whereparams%22%3A%5B%7B%22name%22%3A%22keyWord%22%2C%22value%22%3A%22*%22%7D%5D%7D
c'est-à-dire lors de l'injection valeur du paramètre Peut être injecté avec succès !
0x03 Conclusion
Je recommande personnellement d'ajouter une charge utile de test de requête floue. Les faux positifs sont meilleurs que les faux négatifs, et il s'agit d'une injection de requête floue très courante.
Lorsque vous rencontrez des paramètres json, essayez de les ajouter manuellement* (pour certaines versions de sqlmap).
Il est recommandé d'ajouter -vv lors des tests avec sqlmap.
Ne comptez pas trop sur les outils Essayez d'utiliser des outils + des tests manuels pour être plus sûr.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!