Dans de nombreux cas, lorsque les intrus utilisent l'injection d'outils, ils constatent que l'outil ne peut pas déchiffrer les noms de tables et de champs. En effet, tous les outils ont leur propre dictionnaire, qui inclut les noms de tables et de champs si l'administrateur indique le nom de la table et les noms de champs. les noms de champs sont modifiés afin qu'ils ne soient pas dans ce dictionnaire, l'outil que nous utilisons ne pourra alors pas deviner le nom du champ et le nom de la table. Dans l'article suivant, nous commencerons par analyser l'injection manuelle pour construire une ligne de défense contre l'injection SQL.
L'intrus construira une condition de jugement simple pour déterminer si la page présente une vulnérabilité d'injection. Les étapes générales sont les suivantes :
La page à détecter ici est http://127.0.0.1/111/view.asp?id=198
1. . Intrus Si vous souhaitez injecter manuellement un site, vous devez configurer le navigateur pour garantir que les messages d'erreur peuvent être renvoyés lors de l'injection manuelle. Les étapes sont les suivantes :
cliquez avec le bouton droit sur le navigateur et sélectionnez "Propriétés", puis sélectionnez ". Avancé" dans la boîte de dialogue contextuelle. onglet. Comme indiqué ci-dessous :
Figure 1
Retirez ensuite le crochet devant « Afficher les messages d'erreur HTTP conviviaux » et cliquez enfin sur le bouton « Appliquer ».
2. L'intrus soumet l'URL suivante au navigateur :
http://127.0.0.1/111/view.asp?id=198 et 1=1
S'il existe une vulnérabilité d'injection SQL, la base de données peut être interrogée 1=. 1 est une identité Ignorer, donc une page normale sera renvoyée. Cette page est la même que http://127.0.0.1/111/view.asp?id=198 . devrait être injecté. Si des messages d'erreur sont renvoyés, certains intrus rudimentaires peuvent abandonner le site.
3. L'intrus soumet en outre l'URL suivante au navigateur :
http://127.0.0.1/111/view.asp?id=198 et 1=2
1=2 est une inégalité d'identité. Si le site prend en charge les requêtes de base de données, il renverra probablement les informations comme indiqué dans la figure ci-dessous :
Figure 2
Généralement, si l'intrus apparaît comme indiqué dans la figure ci-dessus, il est fondamentalement certain que ce site peut mener des attaques par injection SQL.
Cependant, dans de nombreux cas, un intrus peut rapidement déterminer si le site cible présente une vulnérabilité d'injection SQL en utilisant simplement un simple guillemet et en soumettant l'URL suivante au navigateur :
http://127.0.0.1/111/view.asp? id=198'if Le renvoi des informations suivantes indique qu'il y a plus de la moitié des chances qu'une vulnérabilité d'injection existe :
Erreur du fournisseur Microsoft OLE DB pour les pilotes ODBC '80040e14'
[Microsoft] [ODBC Microsoft Access Driver] L'erreur de syntaxe de la chaîne est dans l'expression de requête 'id =1'. /list.asp, ligne 50
4. À ce moment-là, l'intrus commence à construire une instruction de requête SQL spéciale pour interroger le nom de la table de la base de données du site et soumet l'instruction suivante à l'URL :
http://127.0.0.1/ 111/view.asp?id= 198 et existe (select * from admin)
Cette instruction interroge la base de données pour voir si la table admin existe. Si elle existe, une page normale sera renvoyée. Si la table n'existe pas, une erreur. la page sera renvoyée. Généralement, les intrus testeront d’abord les noms de tables couramment utilisés, qui sont également des noms de tables et des noms de champs qui existent dans le dictionnaire de mots de passe des outils d’injection généraux. Si le nom de la table ne fait pas partie des noms de table couramment utilisés, l'intrus utilisera l'ingénierie sociale pour deviner le nom de la table. Dans ce cas, l'intrus a peu de chances de deviner le nom de la table.
5. Après avoir obtenu le nom de la table, l'intrus commence à construire une instruction de requête pour interroger le nom du champ de la base de données et soumet l'instruction suivante à l'URL :
http://127.0.0.1/111/view.asp?id=198 et existe (sélectionner l'utilisateur de l'administrateur)
this L'instruction consiste à interroger la table admin dans la base de données si le champ utilisateur existe. S'il existe, une page normale sera renvoyée. S'il n'existe pas, une page d'erreur sera renvoyée.
7. Ensuite, l'intrus commence à déterminer la valeur du champ id et construit l'instruction suivante pour interroger la valeur de id : http://127.0.0.1/111/view.asp?id=198 et existe (sélectionnez id from admin Where id=1 )
renvoie la bonne page si elle est correcte et renvoie la page d'erreur si elle est incorrecte.
6. Après avoir deviné le nom de la table et le nom du champ, l'intrus a commencé à construire une instruction de requête pour deviner la longueur du compte administrateur et a soumis l'instruction suivante à l'URL :
http://127.0.0.1/111/view.asp?id =198 et existe (sélectionnez l'identifiant de l'administrateur où len(user)<6 et id=1)
Cette instruction consiste à interroger la plage de longueurs du nom d'utilisateur dans le champ utilisateur, ce qui signifie que la longueur est inférieure à 6. Si c'est le cas correct, il reviendra à la page normale, s'il est faux, il reviendra à la page d'erreur.
Affinez la portée, puis construisez l'instruction suivante pour déterminer la longueur spécifique du nom d'utilisateur :
http://127.0.0.1/111/view.asp?id=198 et existe (sélectionnez l'identifiant de l'administrateur où len(user)= 5 et id=1)
Correct Si l'erreur se produit, la page normale sera renvoyée. Si l'erreur se produit, la page d'erreur sera renvoyée.
8. Ensuite, l'intrus passe à l'étape finale pour construire une instruction permettant d'interroger le nom d'utilisateur de l'administrateur et soumet l'instruction suivante à l'URL : http://127.0.0.1/111/view.asp?id=198 et existe ( select count(*) from admin Where left(user,1)='a')
Cette instruction consiste à deviner le nom d'utilisateur du côté gauche du nom d'utilisateur jusqu'à a. S'il est correct, il reviendra à la page normale. .Si c'est faux, il reviendra à la page d'erreur. Devinez un par un. Devinez En deuxième position, l'instruction modifiée est (user,2)='ad', et ainsi de suite.
Une fois que l’intrus a obtenu le nom d’utilisateur et le mot de passe, l’injection est presque terminée.
Quant à la méthode de prévention, elle est très simple. D'après le processus ci-dessus, nous pouvons voir que si le nom de la table et le nom du champ ne font pas partie des noms de table et des noms de champs couramment utilisés, l'intrus utilisera l'ingénierie sociale pour deviner s'il s'agit d'un nom. Le nom de la table et le nom du champ modifiés par l'administrateur sont suffisamment complexes, l'intrus envahira le système. Si l'attaquant ne parvient toujours pas à atteindre son objectif, il existe une autre méthode de défense simple qui consiste à télécharger des correctifs anti-injection depuis Internet et à les appliquer. La méthode consiste à modifier les fichiers du site et à ajouter des instructions de filtrage pour filtrer les déclarations soumises par les intrus afin d'éviter les injections. Oui, je ne vous expliquerai pas son principe ici.