Wenn Eindringlinge die Tool-Injection verwenden, stellen sie in vielen Fällen fest, dass das Tool die Tabellennamen und Feldnamen nicht entschlüsseln kann. Dies liegt daran, dass alle Tools über ein eigenes Wörterbuch verfügen, das Tabellennamen und Feldnamen enthält Wenn Feldnamen so geändert werden, dass sie nicht in diesem Wörterbuch enthalten sind, kann das von uns verwendete Tool den Feldnamen und den Tabellennamen nicht erraten. Im folgenden Artikel beginnen wir mit der Analyse der manuellen Injektion, um eine Verteidigungslinie gegen SQL-Injection aufzubauen.
Der Eindringling erstellt eine einfache Beurteilungsbedingung, um festzustellen, ob die Seite eine Injektionsschwachstelle aufweist. Die allgemeinen Schritte sind wie folgt:
Die hier zu erkennende Seite ist http://127.0.0.1/111/view.asp?id=198
1 . Eindringling Wenn Sie eine Site manuell injizieren möchten, müssen Sie den Browser so einrichten, dass während der manuellen Injektion Fehlermeldungen zurückgegeben werden können. Die Schritte sind wie folgt:
Klicken Sie mit der rechten Maustaste auf den Browser und wählen Sie „Eigenschaften“ und wählen Sie „. Klicken Sie im Popup-Dialogfeld auf „Erweitert“. Wie unten gezeigt:
Abbildung 1
Entfernen Sie dann den Haken vor „Show Friendly HTTP Error Messages“ und klicken Sie abschließend auf die Schaltfläche „Apply“.
2. Der Eindringling übermittelt die folgende URL an den Browser:
http://127.0.0.1/111/view.asp?id=198 und 1=1.
Wenn eine SQL-Injection-Schwachstelle vorliegt, kann die Datenbank abgefragt werden 1 ist eine Identität. Daher wird eine normale Seite zurückgegeben. Diese Seite ist mit http://127.0.0.1/111/view.asp?id=198 identisch wird voraussichtlich injiziert. Wenn einige Fehlermeldungen zurückgegeben werden, verlassen möglicherweise einige rudimentäre Eindringlinge die Site.
3. Der Eindringling übermittelt außerdem die folgende URL an den Browser:
http://127.0.0.1/111/view.asp?id=198 und 1=2
1=2 ist eine Identitätsungleichheit. Wenn die Site Datenbankabfragen unterstützt, werden wahrscheinlich Informationen zurückgegeben, wie in der folgenden Abbildung dargestellt:
Abbildung 2
Wenn der Eindringling wie in der Abbildung oben dargestellt aussieht, ist grundsätzlich sicher, dass diese Site SQL-Injection-Angriffe ausführen kann.
In vielen Fällen kann ein Eindringling jedoch schnell feststellen, ob die Zielseite eine SQL-Injection-Schwachstelle aufweist, indem er einfach ein einfaches Anführungszeichen verwendet und die folgende URL an den Browser übermittelt:
http://127.0.0.1/111/view.asp? id=198'if Die Rückgabe der folgenden Informationen weist darauf hin, dass die Wahrscheinlichkeit, dass eine Injektionsschwachstelle vorliegt, mehr als halbiert ist:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft] [ODBC Microsoft Access Driver] Der Syntaxfehler der Zeichenfolge ist im Abfrageausdruck „id =1“. /list.asp, Zeile 50
4. Zu diesem Zeitpunkt beginnt der Eindringling, eine spezielle SQL-Abfrageanweisung zu erstellen, um den Tabellennamen der Site-Datenbank abzufragen, und sendet die folgende Anweisung an die URL:
http://127.0.0.1/ 111/view.asp?id= 198 und exist(select * from admin)
Diese Anweisung fragt die Datenbank ab, um zu sehen, ob die Admin-Tabelle vorhanden ist. Wenn die Tabelle nicht vorhanden ist, wird ein Fehler zurückgegeben Seite wird zurückgegeben. Im Allgemeinen testen Eindringlinge zunächst häufig verwendete Tabellennamen, bei denen es sich auch um Tabellennamen und Feldnamen handelt, die im Passwortwörterbuch allgemeiner Injektionstools vorhanden sind. Wenn der Tabellenname nicht zu den häufig verwendeten Tabellennamen gehört, nutzt der Eindringling Social Engineering, um den Tabellennamen zu erraten. In diesem Fall hat der Eindringling eine geringe Chance, den Tabellennamen zu erraten.
5. Nachdem der Eindringling den Tabellennamen erhalten hat, beginnt er mit der Erstellung einer Abfrageanweisung zur Abfrage des Datenbankfeldnamens und sendet die folgende Anweisung an die URL:
http://127.0.0.1/111/view.asp?id=198 und existiert (Benutzer vom Administrator auswählen)
Diese Anweisung soll die Admin-Tabelle in der Datenbank abfragen, ob das Benutzerfeld vorhanden ist. Wenn es vorhanden ist, wird eine normale Seite zurückgegeben. Wenn es nicht vorhanden ist, wird eine Fehlerseite zurückgegeben.
7. Als nächstes beginnt der Eindringling, den Wert des Felds „id“ zu bestimmen und erstellt die folgende Anweisung, um den Wert von „id“ abzufragen: http://127.0.0.1/111/view.asp?id=198 und existiert (wählen Sie „id“) von admin where id=1 )
gibt die richtige Seite zurück, wenn sie korrekt ist, und gibt die Fehlerseite zurück, wenn sie falsch ist.
6. Nachdem der Eindringling den Tabellennamen und den Feldnamen erraten hatte, begann er, eine Abfrageanweisung zu erstellen, um die Länge des Administratorkontos zu erraten, und übermittelte die folgende Anweisung an die URL:
http://127.0.0.1/111/view.asp?id =198 und existiert (wählen Sie die ID vom Administrator aus, wobei len(Benutzer) <6 und ID = 1 ist).
Mit dieser Anweisung wird der Längenbereich des Benutzernamens im Benutzerfeld abgefragt, was bedeutet, dass die Länge kleiner als 6 ist. Wenn dies der Fall ist Wenn es richtig ist, wird zur normalen Seite zurückgekehrt. Wenn es falsch ist, wird zur Fehlerseite zurückgekehrt.
Schränken Sie den Bereich ein und erstellen Sie dann die folgende Anweisung, um die spezifische Länge des Benutzernamens zu bestimmen:
http://127.0.0.1/111/view.asp?id=198 und exist(select id from admin where len(user)= 5 und id=1)
Korrekt Wenn der Fehler auftritt, wird die normale Seite zurückgegeben. Wenn der Fehler auftritt, wird die Fehlerseite zurückgegeben.
8. Als nächstes tritt der Eindringling in den letzten Schritt ein, um eine Anweisung zur Abfrage des Benutzernamens des Administrators zu erstellen, und sendet die folgende Anweisung an die URL: http://127.0.0.1/111/view.asp?id=198 und existiert( select count(*) from admin where left(user,1)='a') Mit
dieser Anweisung wird der Benutzername von der linken Seite des Benutzernamens bis a erraten. Wenn er korrekt ist, wird zur normalen Seite zurückgekehrt . Wenn es falsch ist, wird nacheinander zur Fehlerseite zurückgekehrt. An der zweiten Stelle lautet die geänderte Anweisung (user,2)='ad' und so weiter.
Nachdem der Eindringling den Benutzernamen und das Passwort erhalten hat, steht die Injektion kurz vor dem Abschluss.
Die Präventionsmethode ist sehr einfach. Aus dem obigen Prozess können wir ersehen, dass der Eindringling Social Engineering verwendet, um zu erraten, ob der Tabellenname und der Feldname nicht zu den häufig verwendeten Tabellennamen und Feldnamen gehören Der vom Administrator geänderte Tabellenname und Feldname ist komplex genug. Wenn der Angreifer das Ziel immer noch nicht erreichen kann, gibt es eine weitere einfache Verteidigungsmethode, die darin besteht, einige Anti-Injection-Patches aus dem Internet herunterzuladen und anzuwenden Methode besteht darin, die Site-Dateien zu ändern und Filteranweisungen hinzuzufügen, um die von den Eindringlingen übermittelten Anweisungen zu filtern, um Injektionen zu verhindern. Ja, ich werde Ihnen das Prinzip hier nicht erklären.