Hallo und willkommen zurück! Ich möchte mein „Bypass Login“ vorerst abschließen. Also kommen wir zum 3. und vorerst letzten Teil der Reihe. In den letzten beiden Teilen haben wir unseren Arbeitsplatz eingerichtet und den Login programmiert. Also möge das Hacken beginnen!
Es gibt in jeder Sprache und in jeder Art des Hackens gewisse Anzeichen, aus denen man lesen kann, dass eine Funktion fehlerhaft ist und Sicherheitslücken aufweist. Ein schneller Test um herauszufinden, ob eine Anwendung anfällig für eine SQL Injection ist, ist ein Apostroph (anders genannt „Hochkomma“) in die betreffende Form oder Parameter einzugeben. Wenn man sehr viel Glück hat, erzeugt man dadurch eine Fehlermeldung und weiß direkt wo man ansetzen kann oder sollte.
Ich weise nur noch einmal darauf hin, dass man dort schon sehr viel Glück haben muss. Es gibt natürlich viel mehr Möglichkeiten, um so etwas zu testen und auszunutzen, aber für unser Beispiel reicht der Apostroph.
login page

Kommen wir zur Praxis! Unser Login sieht aktuell so (links) aus. Wenn wir nun, wie beschrieben, ein Apostroph in die Passwort-Form eingeben und auf Login drücken, bekommen wir eine Fehlermeldung.

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, bool given in C:xampphtdocsmauricewoitzyk.deSpielwieselogin.php on line 23

Notice: Trying to access array offset on value of type null in C:xampphtdocsmauricewoitzyk.deSpielwieselogin.php on line 25
Kein korrektes Passwort

Das hat natürlich mit der Funktionsweise unseres Codes zu tun. Die Anfrage wurde durch unser Formular an die Datenbank weitergeleitet und konnte dort, durch das Apostroph, nicht verarbeitet werden. Kurz gesagt, wir haben die SQL Abfrage unterbrochen und dadurch einen Fehler provoziert.
Das ist unsere Abfrage an die Datenbank. Unser Apostroph wird in der Variable $password gespeichert. Dadurch das es ein Apostroph ist, unterbrechen wir den Code und produzieren die Fehlermeldung.
$sql_query = "select count(*) as cntUser from user where passwort='".$password."'";
Unser Ziel ist es aber nicht die Abfrage zu unterbrechen, sondern die Abfrage gültig zu halten, ohne dass wir das Passwort kennen. Dafür benutzen wir ‚ or 1=1 — . Dadurch produzieren wir eine positive Rückmeldung, ohne das Passwort zu kennen. Die Kommentarsequenz (–) bewirkt, dass der Rest der Abfrage ignoriert wird. Versuchen wir es! 

Heureka! Wir haben es geschafft. Und das eigentlich ziemlich einfach! Einen kleinen Tipp von mir gibt es noch. Zenodermus Javanicus von securityidiots.com hat 2014 eine kleine aber feine „bypass list“ geschrieben. Diese möchte ich euch natürlich nicht vorenthalten. Ich hoffe, ihr hattet mit meinem kleinen Kurs eine Menge Spaß! Bis zum nächsten Mal!