So überprüfen Sie ein anfälliges SQL-Injection-Anmeldeformular in PHP

Zusammenfassung

Wir haben ein in PHP geschriebenes und für SQL-Injection anfälliges Anmeldeformular überprüft. Wir haben verschiedene Versionen des Codes verglichen und für jeden Fall eine SQL-Injection-Nutzlast erstellt.

Holen Sie sich Hinweise zum OSCP-Zertifikat

Erste Codeprüfung

So überprüfen Sie das PHP-Anmeldeformular auf SQL-Injection - Sichere Codierung

Der Code ist ein PHP-Code für ein Anmeldeformular. Wie wir sehen können, werden der Anmeldebenutzername und das Anmeldekennwort in zwei Variablen gespeichert. Der Wert jeder Variablen wird als Eingabe vom Benutzer über eine HTTP-POST-Anforderung übernommen.

Das Problem hierbei besteht darin, dass alles, was der Benutzer in das Anmeldeformular eingibt, direkt in der SQL-Abfrage in der folgenden Zeile verwendet und dann im Backend ausgeführt wird, wodurch böswillige Eingaben möglich sind.

Ausbeutung

Der folgende Screenshot zeigt, wie wir eine SQL-Nutzlast in das Anmeldeformular eingefügt haben

So überprüfen Sie das PHP-Anmeldeformular auf SQL-Injection - Sichere Codierung

Wir können verschiedene Nutzlastvarianten ausprobieren, wie zum Beispiel

root' oder 1=1##

' oder 1=1 — #

' oder 1–

Solange die Variablen der Anmeldefelder nicht in einfachen Anführungszeichen verwendet werden. Wir werden Codebeispiele sehen, in denen die Variablen in Anführungszeichen gesetzt sind. In diesen Fällen würde die SQL-Injection-Nutzlast abweichen.

Der folgende Screenshot zeigt die erfolgreiche Ausnutzung des Anmeldeformulars.

So überprüfen Sie das PHP-Anmeldeformular auf SQL-Injection - Sichere Codierung

Zweite Codeprüfung

Im folgenden Screenshot haben wir ein weiteres anfälliges PHP-Anmeldeformular für SQL-Injection untersucht. Der Unterschied besteht darin, dass die Anmeldevariablen in der Abfragevariable mit einfachen Anführungszeichen verwendet werden

Daher würde sich unsere SQL-Nutzlast unterscheiden. Unsere Nutzlast sollte in diesem Fall mit einem Anführungszeichen beginnen und enden, um die in der Abfragevariablen verwendeten Anführungszeichen abzuschließen.

Ein Beispiel wäre:

So überprüfen Sie das PHP-Anmeldeformular auf SQL-Injection - Sichere Codierung

oder ”='

'root oder ”='

Dritte Codeprüfung

Wir haben denselben Code geändert, um Klammern mit einfachen Anführungszeichen in der SQL-Abfrage zu verwenden.

In diesem Fall müsste unsere SQL-Nutzlast auch mit einem einfachen Anführungszeichen und einer Klammer beginnen

') oder wahr–

Vierte Codeprüfung

Was wäre, wenn der Code die beiden Anmeldevariablen mit Klammern und Anführungszeichen enthielte?

Unsere SQL-Payloads müssen in diesem Fall die Klammern und die Anführungszeichen schließen

” oder wahr–

“) oder wahr–

')) oder wahr–

Vollständiges Video-Walkthrough

Über den Autor

Ich erstelle Notizen zur Cybersicherheit, Notizen zum digitalen Marketing und Online-Kurse. Ich biete auch Beratung zum digitalen Marketing an, einschließlich, aber nicht beschränkt auf SEO, Google- und Meta-Anzeigen und CRM-Verwaltung.

Artikel anzeigen