So funktioniert der SQL Injection-Angriff

Wenn wir die Schwachstellen in Webanwendungen auflisten, die aufgrund des Schweregrads, den sie verursachen können, die größte Auswirkung hatten, werden wir zweifellos die SQL-Injection finden . Diese Sicherheitsanfälligkeit kann es dem Angreifer ermöglichen, Inhalte aus der Datenbank aufzulisten, bis der vollständige Zugriff auf den Server möglich ist .

Der Begriff Injection bezieht sich auf das Injizieren oder Anhängen von SQL-Anweisungen in eine Abfrage, die die Anwendung an die Datenbank ausführt. Dabei wird jede Dateneingabe ausgenutzt, die die Anwendung direkt oder indirekt vom Benutzer anfordert, auf die wir direkt verweisen B. zu Formularfeldern, in die der Benutzer bestimmte Daten eingibt, indirekt zu Parametern, die per URL (GET) übergeben werden. Das Ziel des Injizierens von SQL-Anweisungen in die Abfrage besteht darin, die Logik dieser Abfrage oder das Ergebnis, das von der Datenbank zurückgegeben wird, zu ändern.

SQLInjection.jpg

Dies ist ein typisches Formular, bei dem ein Benutzername und ein Kennwort für den Zugriff auf einen privaten Bereich erforderlich sind. Der serverseitige Code, aus dem die Abfrage besteht, sieht ungefähr so ​​aus:

 $ username = $ _POST ['username']; $ password = $ _POST ['password']; $ sql = "SELECT * FROM users WHERE Benutzername = '$ Benutzername' AND Passwort = '$ Passwort'"; 

Wie wir sehen können, werden der Benutzername und das Kennwort, die in den Variablen Benutzername und Kennwort eingegeben wurden, zuerst gespeichert. Diese Werte werden dann in die Abfrage einbezogen, die an die Datenbank gesendet wird, um zu überprüfen, ob der Benutzer existiert. Angenommen, in unserem Beispiel gibt der Benutzer als Benutzername admin und Kennwort pass123 Folgendes ein , wenn das Formular gesendet wird:

 SELECT * FROM users WHERE Benutzername = 'admin' AND Passwort = 'pass123' 

Wie wir sehen, stehen die Eingabedaten zwischen den einzelnen Anführungszeichen, um anzuzeigen, dass es sich um eine Textzeichenfolge handelt. Diese Abfrage wird an die Datenbank gesendet und gibt ein Ergebnis mit den Daten des Benutzers zurück, sofern vorhanden, und der Zugriff auf die private Zone wird zugelassen. Andernfalls wird ein leeres Ergebnis zurückgegeben und der Zugriff verweigert.

See also  ASP.NET MVC - Erstellen von Datendiensten

Wie bereits erwähnt, besteht SQL Injection aus dem Anhängen von SQL-Code an eine Abfrage. Dieses Formular ermöglicht das Durchsuchen der Eingabefelder, sodass eine Anwendung für SQL Injection anfällig ist.

Sicherheitslücke ausnutzen

Das Ziel der Ausnutzung dieser Sicherheitsanfälligkeit besteht darin, Zugriff auf die private Zone zu erhalten, ohne den Benutzer oder das richtige Kennwort zu kennen, und die Sicherheitsanfälligkeit auszunutzen. Wir müssen also SQL-Code einfügen, um eine Abfrage zu erstellen, die ein gültiges Ergebnis zurückgibt.

Sehen wir uns an, wie die Abfrage gebildet wird, wenn wir den folgenden SQL-Code in das Kennwortfeld einfügen:

SQLInjection_2.jpg

Bei der Erstellung der Abfrage wird wie folgt vorgegangen:

 SELECT * FROM users WHERE Benutzername = 'Hacker' AND Passwort = '' oder 1 = 1 # ' 

Wir müssen darauf achten, dass sich der eingefügte Code zwischen den einfachen Anführungszeichen befindet, die das Passwort einschließen. Das einfache Anführungszeichen am Anfang des eingefügten Codes ist für die Vervollständigung des offenen Anführungszeichens im Abfrageteil password = ‘verantwortlich. Auf diese Weise erhalten wir vorübergehend die folgende Abfrage:

 SELECT * FROM users WHERE Benutzername = 'Hacker' AND Passwort = '' 

Diese Abfrage gibt keine Ergebnisse zurück, da es keinen solchen Benutzer mit diesen Anmeldeinformationen gibt. Analysieren wir jedoch den Rest des eingefügten Codes:

 oder 1 = 1 # 

Der Satz oder 1 = 1 ändert die Logik der Abfrage radikal, da er, wie wir in einer durch das bedingte ODER gebildeten Abfrage wissen, true zurückgibt, wenn mindestens einer der beiden Ausdrücke erfüllt ist. In unserem Fall ist der erste Ausdruck username = ‘hacker’. AND password = ” und das zweite oder 1 = 1 , letzteres ist immer erfüllt, dh 1 ist immer gleich 1, da die Abfrage ein gültiges Ergebnis liefert.

See also  MS Powerpoint 2010 - Aktionsschaltflächen

/* */ . Schließlich müssen wir das Zitat loswerden, das den Satz schließt. Dazu können wir die in SQL verwendeten Kommentare verwenden : #, – (doppelter Bindestrich) oder / * * / . Auf diese Weise lautet die vollständige Abfrage:

 SELECT * FROM users WHERE Benutzername = 'Hacker' AND Passwort = '' oder 1 = 1 # ' 

Alles nach # wird als Kommentar berücksichtigt und ist nicht Teil der Konsultation.

Um ein gültiges Ergebnis zu erhalten, gibt es viele andere Variationen im Code, die wir einfügen können, zum Beispiel:

SQLInjection_3.jpg

administrator

Leave a Reply

Your email address will not be published. Required fields are marked *