So funktioniert der SQL-Injection-Angriff

Inhaltsverzeichnis

Wenn wir die Schwachstellen in Webanwendungen auflisten, die aufgrund ihres Schweregrades die größten Auswirkungen hatten, finden wir ohne Zweifel die SQL-Injektion. Dies Verletzlichkeit es kann dem Angreifer sogar ermöglichen, den Inhalt der Datenbank aufzulisten, um vollen Zugriff auf den Server zu erhaltenMal sehen, woraus es besteht.

Der Begriff Injektion, bezieht sich auf das Einfügen oder Anhängen von SQL-Anweisungen in eine Abfrage, die die Anwendung an die Datenbank ausführt, dies erfolgt unter Ausnutzung aller Dateneingaben, die die Anwendung direkt oder indirekt vom Benutzer anfordert, wir verweisen direkt auf Felder, beispielsweise von Formularen wo der Benutzer bestimmte Daten eingibt, können dies indirekt Parameter sein, die per URL (GET) übergeben werden. Das Ziel des Einfügens von SQL-Anweisungen in die Abfrage besteht darin, die Logik der Abfrage oder das Ergebnis, das von der Datenbank zurückgegeben wird, zu ändern.

Dies ist ein typisches Formular, bei dem ein Benutzername und ein Passwort angefordert werden, um auf einen privaten Bereich zuzugreifen. Der serverseitige Code, der die Abfrage bildet, sieht in etwa wie folgt aus:

 $ Benutzername = $ _POST ['Benutzername']; $ passwort = $ _POST ['passwort']; $ sql = "SELECT * FROM users WHERE username = '$ username' AND password = '$ password'"; 
Wie wir sehen können, werden zuerst der in den Variablen Benutzername und Passwort eingegebene Benutzername und das Passwort gespeichert, dann werden diese Werte in die Abfrage aufgenommen, die an die Datenbank gesendet wird, um zu prüfen, ob der Benutzer existiert. Angenommen, in unserem Beispiel gibt der Benutzer als Benutzernamen admin und Passwort ein pass123, wenn das Formular gesendet wird, wird die folgende Abfrage erstellt:
 SELECT * FROM users WHERE username = 'admin' AND password = 'pass123'
Wie wir sehen können, befinden sich die Eingabedaten beim Platzieren zwischen den einfachen 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, falls vorhanden, und der Zugriff auf den privaten Bereich wird erlaubt, andernfalls wird ein leeres Ergebnis zurückgegeben und der Zugriff verweigert.

Wie wir bereits erwähnt haben, SQL-Injektion Es besteht darin, SQL-Code an eine Abfrage anzuhängen, und dieses Formular ermöglicht dies durch die Eingabefelder, sodass wir eine Anwendung haben, die für SQL-Injection anfällig ist.

Ausnutzen von Schwachstellen
Das Ziel der Ausnutzung dieser Sicherheitsanfälligkeit besteht darin, sich ohne Kenntnis des richtigen Benutzernamens oder Passworts Zugang zum privaten Bereich zu verschaffen und die Sicherheitsanfälligkeit auszunutzen. Was wir also erreichen müssen, ist, SQL-Code einzufügen, um eine Abfrage zu bilden, die ein gültiges Ergebnis zurückgibt.

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

Wenn die Abfrage gebildet wird, sieht sie wie folgt aus:

 SELECT * FROM users WHERE username = 'hacker' AND password = '' or 1 = 1 # '
Wichtig ist dabei zu beachten, dass der eingefügte Code zwischen den einfachen Anführungszeichen steht, die das Passwort umschließen, das einfache Anführungszeichen am Anfang des eingefügten Codes ist für die Vervollständigung des offenen Anführungszeichens im Passwort verantwortlich = 'Teil des Anfrage erhalten wir auf diese Weise vorübergehend die folgende Anfrage:
 SELECT * FROM users WHERE username = 'hacker' AND password = ''
Diese Abfrage gibt im Moment keine Ergebnisse zurück, da es keinen solchen Benutzer mit diesen Anmeldeinformationen gibt. Lassen Sie uns jedoch den Rest des eingefügten Codes analysieren:
 oder 1 = 1 #
Satz oder 1 = 1 ändert die Logik der Abfrage radikal, da, wie wir wissen, in einer Abfrage, die durch die Bedingung gebildet wird, ODER Es wird true zurückgegeben, wenn mindestens einer der beiden Ausdrücke erfüllt ist, in unserem Fall ist der erste Ausdruck Benutzername = 'Hacker' UND Passwort = '' , und der zweite oder 1 = 1 , ist letzteres immer wahr, d. h. 1 ist immer gleich 1, da die Abfrage ein gültiges Ergebnis zurückgibt.

Schließlich müssen wir das Anführungszeichen loswerden, das den Satz schließt, dafür können wir die Kommentare verwenden, die in verwendet werden SQL: #, - (Doppelstrich), Ach ja /* */ . somit lautet die komplette Abfrage:

 SELECT * FROM users WHERE username = 'hacker' AND password = '' or 1 = 1 # '
Alles nach dem # wird als Kommentar berücksichtigt und ist nicht Teil der Abfrage.

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

wave wave wave wave wave