Heim >häufiges Problem >So implementieren Sie einen SQL-Injection-Angriff

So implementieren Sie einen SQL-Injection-Angriff

(*-*)浩
(*-*)浩Original
2019-05-10 17:12:5016686Durchsuche

Dieser Artikel konzentriert sich hauptsächlich auf die Bedeutung der SQL-Injection und die Durchführung der SQL-Injection. Die entsprechenden Personen sind hauptsächlich Tester, die uns beim Testen von SQL-Angriffsschwachstellen in Anmelde-, Veröffentlichungs- und anderen Modulen helfen sollten. Es sollte klar sein, dass Entwickler dies verstehen sollten Das Testen und Klären der Prinzipien wird es uns ermöglichen, die Ursachen von Fehlern besser zu verstehen~ Okay, ohne weitere Umschweife, kommen wir zum Punkt~

Empfohlene Kurse: MySQL-Tutorial

So implementieren Sie einen SQL-Injection-Angriff

Wie ist SQL-Injection (Angriff) zu verstehen?

SQL-Injection ist eine Angriffstechnik, die SQL-Code zu Eingabeparametern hinzufügt und ihn zur Analyse und Ausführung an den Server übergibt.

Bei SQL-Injection-Angriffen werden die Eingabeparameter nicht gefiltert und dann zur Analyse direkt in die SQL-Anweisung eingebunden, und bei der Ausführung kommt es zu unerwartetem Verhalten, das als SQL-Injection-Angriff bezeichnet wird.

SQL-Injection-Angriffsprinzip:

Ein SQL-Injection-Angriff tritt auf, wenn eine Anwendung Eingabeinhalte verwendet, um dynamische SQL-Anweisungen für den Zugriff auf die Datenbank zu erstellen. Eine SQL-Injection kann auch auftreten, wenn der Code gespeicherte Prozeduren verwendet, die als Zeichenfolgen mit ungefilterten Benutzereingaben übergeben werden. Durch SQL-Injection könnte ein Angreifer die Anwendungsanmeldung nutzen, um Befehle in der Datenbank auszuführen.

Dieses Problem kann schwerwiegend werden, wenn die Anwendung ein überprivilegiertes Konto verwendet, um eine Verbindung zur Datenbank herzustellen. In einigen Formularen wird der vom Benutzer eingegebene Inhalt direkt zum Erstellen dynamischer SQL-Befehle oder als Eingabeparameter für gespeicherte Prozeduren verwendet. Diese Formulare sind besonders anfällig für SQL-Injection-Angriffe. Beim Schreiben vieler Website-Programme wird die Rechtmäßigkeit der Benutzereingaben nicht beurteilt oder die Variablen im Programm werden nicht ordnungsgemäß behandelt, was zu Sicherheitsrisiken in der Anwendung führt. Auf diese Weise kann der Benutzer einen Datenbankabfragecode übermitteln und einige vertrauliche Informationen erhalten oder den gesamten Server basierend auf den vom Programm zurückgegebenen Ergebnissen steuern, sodass eine SQL-Injection erfolgt.

Der Zugriff auf die SQL-Injection erfolgt über den normalen WWW-Port und unterscheidet sich oberflächlich betrachtet nicht vom normalen Webseitenzugriff. Daher geben die derzeit auf dem Markt befindlichen Firewalls keine Warnung für die SQL-Injection aus, wenn der Administrator dies tut Überprüfen Sie das IIS-Protokoll nicht. Gewohnheiten können über einen längeren Zeitraum unbemerkt angegriffen werden. Die Methode der SQL-Injection ist jedoch recht flexibel. Während der Injektion werden Sie auf viele unerwartete Situationen stoßen und Sie müssen clevere SQL-Anweisungen erstellen, um die gewünschten Daten erfolgreich zu erhalten.

Wie erfolgt die SQL-Injection?

1. Das Knacken der Backend-Datenbank ist die am häufigsten verwendete Methode, um vertrauliche Informationen von einer Website zu stehlen.

2. Die Injektion kann die gespeicherte Prozedur der Datenbank verwenden, um eine Rechteausweitung und andere Vorgänge durchzuführen

3. Der Angreifer verwendet die an den SQL-Server gesendeten Eingabeparameter, um ausführbaren SQL-Code zu erstellen (kann werden zur Get-Anfrage, Post-Anfrage, http-Header-Informationen, Cookie hinzugefügt)

Wie führt man einen SQL-Injection-Angriff durch?

Nehmen Sie die Programmiersprache PHP und die MySQL-Datenbank als Beispiele, um die Konstruktionsfähigkeiten und Konstruktionsmethoden von SQL-Injection-Angriffen vorzustellen

1. Digitale Injektion

Im Browser Adresse Geben Sie die Spalte ein: learn.me/sql/article.php?id=1. Das Senden dieser Anfrage entspricht dem Aufruf einer Abfrageanweisung:

$sql = "SELECT * FROM article WHERE id =",$id

Unter normalen Umständen eine id= Es sollten 1 Artikelinformationen zurückgegeben werden. Wenn Sie dann: learn.me/sql/article.php?id=-1 OR 1 =1 in die Adressleiste des Browsers eingeben, handelt es sich um einen SQL-Injection-Angriff, der möglicherweise relevante Informationen zu allen Artikeln zurückgibt. Warum passiert das?

Das liegt daran, dass id = -1 immer falsch ist, 1=1 immer wahr ist und alle gesamten Where-Anweisungen immer wahr sind, sodass die Where-Bedingung gleichbedeutend ist mit dem Nicht-Hinzufügen der Where-Bedingung und dann der Abfrage Das Ergebnis entspricht dem gesamten Inhalt der Tabelle

2. String-Injection

Es gibt ein solches Benutzeranmeldeszenario: Die Anmeldeschnittstelle enthält Eingabefelder für Benutzernamen und Passwort sowie eine Schaltfläche zum Senden. Geben Sie Benutzernamen und Passwort ein und senden Sie es ab.

Dies ist eine Post-Anfrage. Rufen Sie beim Anmelden die Schnittstelle learn.me/sql/login.html auf, stellen Sie zunächst eine Verbindung zur Datenbank her und führen Sie dann eine Parameterüberprüfung für den im Post enthaltenen Benutzernamen und das Kennwort durch Anforderungsparameter im Hintergrund, d. h. SQL-Abfrageprozess. Gehen Sie davon aus, dass der richtige Benutzername und das richtige Passwort „user“ und „pwd123“ sind. Geben Sie den richtigen Benutzernamen und das richtige Passwort ein und senden Sie es ab. Dies entspricht dem Aufruf der folgenden SQL-Anweisung:

SELECT * FROM user WHERE username = 'user' ADN password = 'pwd123'

Da der Benutzername und das Passwort beide Zeichenfolgen sind, Die SQL-Injection-Methode lautet: Die vom Parameter übertragenen Daten werden zu einer in MySQL mit Anmerkungen versehenen Zeichenfolge. Es gibt zwei Kommentarmethoden in MySQL:

1) '#': Alle Zeichenfolgen nach '#' werden als Kommentare behandelt

Eingabe des Benutzernamens: user'# (einfach) Schließen Sie das einfache Anführungszeichen (links neben „Benutzer“), geben Sie das gewünschte Passwort ein, z. B. 111, und klicken Sie dann auf die Schaltfläche „Senden“. Äquivalent zur SQL-Anweisung:

SELECT * FROM user WHERE username = 'user'#'ADN password = '111'

'#' ist auskommentiert, äquivalent zu:

SELECT * FROM user WHERE username = 'user'

2) '-- ' (nach -- steht ein Leerzeichen): '- - ' Die folgenden Zeichenfolgen werden als Kommentare behandelt

Benutzername-Eingabe: user'-- (Beachten Sie, dass danach ein Leerzeichen steht und ein einfaches Anführungszeichen das einfache Anführungszeichen links von „Benutzer“ schließt. Geben Sie das Passwort ein als). Geben Sie die gewünschte Datei ein, z. B. :111, und klicken Sie auf die Schaltfläche „Senden“. Äquivalent zur SQL-Anweisung:

SELECT * FROM user WHERE username = 'user'-- 'AND password = '111'
SELECT * FROM user WHERE username = 'user'-- 'AND password = '1111'

'-- ' ist auskommentiert, äquivalent zu:

SELECT * FROM user WHERE username = 'user'

因此,以上两种情况可能输入一个错误的密码或者不输入密码就可登录用户名为'user'的账号,这是十分危险的事情。

Das obige ist der detaillierte Inhalt vonSo implementieren Sie einen SQL-Injection-Angriff. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn