


Comment implémenter l'analyse de l'injection temporelle sqlmap
1. Préface
Comment détecter l'injection SQL ?
Ma réponse est la suivante : en ce qui concerne la sécurité de la partie A, la détection des injections SQL est relativement facile à réaliser.
1) Détection d'erreur d'injection.
2) N'injectez pas de rapports d'erreurs booléens, car les faux positifs sont relativement élevés.
3) Effectuez une injection de temps basée sur le temps, l'exploitation et la maintenance des contacts pour créer des enregistrements de base de données de journaux lents, surveiller le sommeil et évaluer les mots clés. Vous pouvez ajouter le numéro d'identification de la tâche d'analyse à la virgule décimale du temps de sommeil pour faciliter. positionnement. (ps. Cette méthode peut trouver 99% des injections SQL)
Par conséquent, lorsque je fais une injection temporelle basée sur le temps, je limite très sévèrement l'erreur de temps. Cependant, @chengable effectue un travail lié à la sécurité sur la partie B, et l'injection de temps basée sur le temps n'est généralement pas possible. Il est entendu qu'il filtre principalement d'abord l'existence de points d'injection, puis détecte sqlmapapi.py. J'ai également utilisé sqlmap pour les tests plus tôt. Les problèmes que j'ai rencontrés étaient de nombreux faux positifs et un temps d'analyse long. Ensuite, j'ai essayé sqlmapapi.py. Le problème était que le temps d'analyse était trop long et qu'il ne prenait pas en charge l'injection au format json (détails). . Cependant, l'injection temporelle de sqlmap est relativement précise. Que faire si vous ne souhaitez pas utiliser sqlmapapi.py ? Ici, je vais supprimer la logique d'injection basée sur le temps de sqlmap.
2. Analysez brièvement l'injection temporelle de sqlmap
Plaintez-vous : le code de sqlmap n'est pas standardisé, moche et volumineux. Quelqu'un m'a déjà recommandé de lire le code source de sqlmap et d'en apprendre beaucoup. Maintenant que j'y pense, j'ai abandonné très tôt.
Donc, si vous êtes paresseux et que vous ne voulez pas regarder le code source, ajoutez --technique=T -v 3 et regardez d'abord la charge utile de détection sqlmap.
Il semble que j'ai été paresseux et que j'ai trouvé quelques moyens. Vous pouvez le voir sur la capture d'écran :
Tout d'abord, sqlmap a bourré la charge utile d'injection de sommeil :
Premier sommeil bourré (5) , après avoir constaté qu'il est exécuté ; sleep(0) est inséré, et enfin sleep(5) est inséré.
Ensuite, faites une supposition. L'idée générale de la vérification est de dormir(5) d'abord, puis de dormir(0) si le deuxième délai réussit. Si aucun délai n'est trouvé, continuez sleep(5). Si le délai réussit à nouveau, un rappel qu'il peut y avoir une injection apparaîtra :
Enfin, très intelligemment, sqlmap est utilisé pour éviter les faux positifs. si la condition de jugement est utilisée pour éliminer les faux positifs. À partir de la figure ci-dessus, vous pouvez voir que sqlmap teste deux fois si l'équation est vraie et deux fois si l'équation ne tient pas, les faux positifs sont jugés en fonction du deuxième délai.
3. Analysez le code source en profondeur
Retournez au code source et jetez un œil : sur la base de certains des mots-clés précédents, passons directement au code pour y jeter un œil. Par exemple, *apparaît être* apparaît avant la recherche. Voir le code de la première étape :
sqlmap/lib/controller/checks.py:
J'ai trouvé ici que c'est presque le. pareil à ce que j'avais deviné auparavant.
Recherchez où se trouve la charge utile, en particulier la charge utile avec la condition if. Utilisez une requête par mot-clé et trouvez-la ici :
sqlmap/xml/payloads/time_blind.xml:
Vous pouvez voir chacun si La charge utile de les conditions sont dans le champ vectoriel.
4. Fermeture
Fermer les caractères avant le point d'injection est la clé pour savoir s'il peut être injecté.
Observed tools/sqlmap/xml/boundaries.xml, nous devons donc également nous référer aux différentes situations de fermeture ici :
5. Déterminer s'il y a un retard
5.1 Méthode 1
Référez-vous à la Lors de l'injection awvs précédente, j'ai pensé à une méthode de détection plus facile à comprendre. Prenez le temps de consommation de 6 tests normaux sans charge utile injectée et calculez la valeur moyenne comme temps de requête natif (ori_time).
Lorsque l'heure d'injection est sleep(5), soustrayez ori_time de l'heure actuelle comme sleep_time. Si sleep_time est inférieur à 4, on considère que le délai ne s'est pas produit. (Considérant que ori_time est affecté par le réseau et devient plus grand, le seuil est ajusté à quatre secondes.)
Lorsque le temps d'injection est sleep(0), soustrayez ori_time de l'heure actuelle comme sleep_time. Si sleep_time est supérieur à 2, cela signifie qu'il y a une fausse alarme dans le délai.
5.2 Méthode 2
Regardez le code sqlmap, ils ont utilisé un problème mathématique que je ne comprends pas (détails)
Suivi : Request.queryPage --->wasLastResponseDelayed Vous pouvez voir que la logique est : Prenez le temps de consommation de 30 tests normaux sans charge utile injectée et mettez-les dans kb.responseTimes. Calculez l'écart type 30 fois sous forme d'écart et calculez le temps de réponse le plus lent en fonction de l'écart sous forme de lowerStdLimit :
Sa valeur est la moyenne de 30 fois plus TIME_STDEV_COEFF*écart type (écart). Quant à TIME_STDEV_COEFF, le régler sur 7 peut donner une précision de jugement de 99,9999999997440 %.
Enfin, jugez si le temps de consommation actuel de la requête est supérieur à lowerStdLimit. S'il est supérieur, cela signifie que le délai s'est produit, et s'il est inférieur, cela signifie qu'il n'y a pas de délai (en plus, lorsque lowerStdLimit. est inférieur à 0,5 seconde, lowerStdLimit prend 0,5 seconde).
L'émotion me dit que je devrais choisir la première méthode, et la rationalité me dit que je devrais choisir la deuxième méthode. J'ai quand même choisi la deuxième méthode et mesuré le point d'injection (détails). Une analyse très stable a trouvé des vulnérabilités d’injection.
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Utilisez sqlmap pour automatiser l'injection dans dvwa, définissez le niveau dvwa sur bas, ouvrez SQLInjection (SQLInjection(Blind)) de dvwa, ouvrez le débogage du navigateur, entrez l'ID utilisateur et soumettez-le, et affichez les requêtes interceptées. Vous pouvez voir qu'il s'agit d'une requête GET, l'url "http://192.168.1.222:8089/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" On la met directement dans salmap pour le tester, utilisez le - u commande -u"http://192.168.1.22

0x00 Présentation Récemment, j'ai rencontré un phénomène étrange lors de l'utilisation des tests d'injection sqlmap. 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 n'est pas un faux positif après. tests comparatifs et visualisation du code source de sqlmap, j'ai trouvé deux petits trous. Format du point d'injection de reproduction du scénario 0x01 : json..."whereparams":[{"name":"keyWord","value":"test"}]} Paramètres injectables : commande valuesqlmap : pythonsqlmap.py-rsqlpk.txt– flush -session-vvsqlmapv1.2.11 ne peut pas injecter de s

Première partie : Utilisation de Sqlmap 1.1 Introduction à sqlmap 1. J'ai mentionné quelques instructions de base sur l'injection SQL, mais l'injection manuelle est très gênante. Nous pouvons utiliser sqlmap, un puissant outil d'injection SQL, pour obtenir des données. # sqlmap est un outil de test d'intrusion open source qui peut détecter et exploiter automatiquement les vulnérabilités d'injection SQL et les serveurs connectés à la base de données. Il dispose d'un moteur de détection très puissant, d'un testeur d'intrusion doté de multiples fonctionnalités, d'un accès au système de fichiers sous-jacent via l'empreinte digitale de la base de données et l'exécution de commandes via une connexion hors bande. Site officiel : sqlmap.org(2)#Bases de données prises en charge : MySQL, Oracle, PostgreS

Parce qu'il est nécessaire d'effectuer des tests d'intrusion sur les sites Web externes, la plupart des sites Web disposent d'un contrôle de fréquence d'accès. Une fois cette fréquence dépassée, l'IP sera directement bannie. Surtout lorsque SQLMAP est en cours d'exécution, il est encore plus "tante rouge", et il se terminera avec une erreur avant la fin de l'exécution de SQLMAP. J'ai donc commencé à étudier le mode proxy de SQLMAP. SQLMAP a deux modes proxy, l'un est un proxy normal (proxy HTTP) et l'autre est un proxy oignon. Au départ, je voulais écrire sur l'application des agents ordinaires, mais Baidu a vu que cet article était suffisamment détaillé et a arrêté de dire des bêtises. Extension Sqlmap - Implémentation d'un pool de proxy IP externe Concentrons-nous sur le proxy onion Au début, lorsque l'onion était utilisé directement pour l'injection, il n'y avait pas de rapport « tante rouge ». Plus tard, à mesure que le nombre de sites Web pénétrés augmentait,

1. Préface Comment détecter l'injection SQL ? Ma réponse est la suivante : lorsque la partie A assure la sécurité, la détection des injections SQL est relativement facile à effectuer. 1) Détection d'injection d'erreur. 2) N'injectez pas de rapports d'erreurs booléennes car les faux positifs sont relativement élevés. 3) Effectuez une injection de temps basée sur le temps, l'exploitation et la maintenance des contacts pour créer des enregistrements de base de données de journaux lents, surveiller le sommeil et évaluer les mots clés. Vous pouvez ajouter le numéro d'identification de la tâche d'analyse à la virgule décimale du temps de sommeil pour faciliter le positionnement. (ps. Cette méthode peut trouver 99 % des injections SQL) Par conséquent, lorsque je fais une injection temporelle basée sur le temps, je limite très sévèrement l'erreur de temps. Cependant, @chengable effectue un travail lié à la sécurité dans la partie B, sur la base de t

Il y a trop peu d'articles sur l'injection DNS pour sqlmap sur Internet. Ils ne présentent que brièvement le paramètre --dns-domain. Les articles pratiques pertinents sont soit vagues, soit mentionnés d'un seul coup, ce qui prête à confusion (principalement malhonnête, la clé est). pas encore Big Boss). Puis j’ai recommencé en me référant aux méthodes sur Internet. Les éléments à préparer incluent un sqlmap, une injection aveugle de Windows, deux noms de domaine et un serveur réseau externe. Un jour, alors que je faisais quelque chose, je suis tombé sur une injection aveugle temporelle. Il s'agissait d'une machine Windows et je me suis souvenu de la méthode d'injection DNS. Avant de commencer, je prévois d'utiliser la commande --sql-shell de sqlmap pour tester la charge utile de l'injection DNS. Tout d'abord, accédez à burpsuite.

Lorsque j'ai testé l'application de l'entreprise, j'ai découvert que nous avions ajouté un caractère 32 bits à tous les contenus des paramètres et finalement effectué le cryptage MD5. Étant donné que le processus de traitement de l'APP vérifie d'abord si le signe est correct, si la vérification de la signature échoue, il ne pourra pas du tout entrer dans la base de données. Afin d'utiliser SQLMAP pour le tester, j'ai écrit un script pour les données proxy après l'interception. le paquet de données, effectue le remplacement crypté de son contenu de paramètre et de 32 caractères. Remarque : ce script convient au système interne de l'entreprise, car vous pouvez connaître le processus de cryptage ou obtenir la méthode de cryptage du JS frontal ; Tout d'abord, j'ai écrit un programme utilisant Django pour simuler le système de l'entreprise. Le processus consistait à obtenir l'ID POST et le jeton, et à ajouter un mot crypté personnalisé.

sqlmap lit et écrit des fichiers –file-read : lit les fichiers à partir du système de fichiers du système de gestion de base de données principal –file-write : modifie les fichiers locaux sur le système de fichiers du système de gestion de base de données principal (écrit à partir du système local) –file-dest : Le chemin absolu du fichier écrit par le système de gestion de base de données back-end (chemin cible d'écriture). Vous pouvez utiliser les commandes ci-dessus pour lire et écrire le fichier système après l'injection SQL, mais la condition préalable est que vous ayez besoin d'avoir lu et écrit. autorisations et être un administrateur de base de données, sinon les opérations de lecture et d'écriture ne peuvent pas être effectuées avec succès. En prenant DVWA comme exemple, construisez DVWA sous Kali pour lire et écrire des fichiers. Lire le fichier : Vérifiez les informations pertinentes dans PHPinfo, utilisez -file-r
