Willkommen beim 2. Teil meiner SQL Injection – Bypass Login Reihe! Im ersten Teil haben wir uns um die Einrichtung unseres Arbeitsplatzes gekümmert. Heute wollen wir unseren Login programmieren.
Ich weise direkt am Anfang darauf hin, dass wir diesen mit Absicht nicht sicher programmieren. Warum zeige ich das denn? Gerade wenn man mit der Programmierung anfängt, möchten viele auf bereits vorgefertigte Scripte setzen. Diese sind oft nicht sicher programmiert und können ausgenutzt werden. Daher möchte ich euch zeigen wie man es NICHT macht, damit Ihr es besser machen könnt. Außerdem verbesserst du gleich deine Programmierkenntnisse.
Also los! Fangen wir an. Wir öffnen unseren Editor Atom und fangen direkt an. Übrigens verzichte ich auf zu viel Code. Es soll ja nur zweckmäßig sein.

Was brauchen wir?

Wir brauchen 3 Dateien. Eine index.php Datei, welche unsere Startseite darstellt. In dieser soll auch unser Login dargestellt werden. Dann brauchen wir eine login.php Datei. In dieser wird unser Login verarbeitet, eine Datenbank Verbindung aufgebaut und bei erfolgreichem Login werden wir zu unserer home.php Datei weitergeleitet. Am Ende designen wir mit SQL noch unsere Datenbank Struktur und schon sind wir durch!

index.php

Die index.php Datei wird immer direkt vom Browser als Startseite angezeigt. In dieser Datei programmieren wir nur unseren Login, mehr nicht. Wie bereits erwähnt empfehle ich jeder Person diesen Code nicht einfach nur zu kopieren, sondern nachzuvollziehen und zu verstehen.
<form method="get" action="login.php">
   <h1>Sicherer Login</h1>
   <input name="txt_pwd" placeholder="Passwort"/>
   <input type="submit" value="Login" name="but_submit"/>
</form>
Mit dem Element „<form>“ Leiten wir das Formular ein. Diesem Formular weisen wir nun Attribute zu. Mit „method“ unterweisen wir das Formular mit welcher Methode wir die Daten übertragen wollen. Ich habe für unser Formular die Methode „GET“ gewählt, weil unsere Eingaben dann klar ersichtlich in der Browserleiste zu sehen sind.  Mit „action“ weisen wir dem Formular eine Datei zu die unsere Eingaben verarbeiten soll. In unserem Fall ist das also die Datei login.php.
Was folgt, ist eine Überschrift und zwei „<input>“ Elemente. In dem ersten Element (wird als Eingabefeld dargestellt) möchten wir das der Nutzer das Passwort eingibt. Auch hier weisen wir Attribute zu. Mit „name“ weisen wir diesem Element eine Erkennung zu, welche wir in dem Script brauchen, welches die eingegebenen Daten verarbeitet. Das Attribut „placeholder“ ist nur Design und ist theoretisch unwichtig. Für ein Passwortfeld brauchen wir theoretisch noch ein „type“ Attribut, welches ich mit Absicht nicht zugewiesen habe. Mit der Eingabe „type="password“ maskieren wir unsere Eingabe.
Das zweite input Element ist unser Button, der die Eingabe abschickt. Das Attribut „type="submit“ weist diesen als Button aus und auch hier brauchen wir einen eindeutigen Namen. Anschließend wird die Form mit </form> wieder geschlossen und fertig ist unser erstes Dokument.

home.php

In der home.php soll nur eine kleine Begrüßung stehen. Theoretisch könnten wir auch auf diese Datei zugreifen, ohne ein Passwort zu kennen. Da dies aber nur zu Demonstrationszwecken reichen muss, habe ich das nicht mit programmiert.
<h1>Glückwunsch! Du hast bestimmt das korrekte Passwort eingegeben!</h1>
Als nächstes kümmern wir uns nun um den Brocken.

login.php

In der login.php soll unsere Angabe verarbeitet, überprüft und validiert werden.
<?php
session_start();
$host = "localhost";
$user = "root";
$passwort = "";
$dbname = "mauricewoitzyk_db";

$con = mysqli_connect($host, $user, $passwort, $dbname);

if (!$con) {
   die("Keine Verbindung du Otto: " . mysqli_connect_error());
}

if(isset($_GET['but_submit'])){
   $password = $_GET['txt_pwd'];
if ($password != ""){
   $sql_query = "select count(*) as cntUser from user where passwort='".$password."';
   $result = mysqli_query($con,$sql_query);
   $row = mysqli_fetch_array($result);

$count = $row['cntUser'];

if($count > 0){
   $_SESSION['pword'] = $password;
   header('Location: home.php');
}else{
   echo "Kein korrektes Passwort";
}

}

}
?>
Das ist natürlich erstmal viel zu lesen. In den ersten Zeilen starten wir nur eine Session und definieren unsere Datenbank Verbindung. Diese Informationen speichern wir in Variablen, damit wir später damit einfacher arbeiten können. Mit $con = mysqli_connect($host, $user, $passwort, $dbname); bauen wir dann eine Datenbankverbindung auf und lassen uns im Falle eines Problemes mit der Verbindung eine Fehlermeldung ausgeben.
Danach wird die Eingabe aus dem Passwortfeld in einer Variable (ungefiltert) gespeichert. $password = $_GET[‚txt_pwd‘]; Diese Variable trägt den Namen password. Danach folgt die Abfrage in der Datenbank. Sollten wir die richtigen Daten eingeben haben werden wir mit header(‚location: home.php‘); zu unserer home.php Datei weitergeleitet. Andernfalls bekommen wir die Aussage „Kein korrektes Passwort“.
Alles was wir jetzt noch brauchen ist unsere Datenbank Struktur und die korrekten Daten in der Datenbank.
CREATE TABLE `user` ( 
`id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, 
`passwort` varchar(80) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Diesen Code müsst ihr im Tab von phpmyadmin ausführen. Dazu erstellt ihr erstmal eine Datenbank. Meine hat den Namen mauricewoitzyk_db (denkt bitte daran bei einem anderen Namen auch das Script login.php anzupassen). Anschließend wechselt ihr in eure Datenbank und geht auf den Reiter „SQL“. Dort könnt ihr einfach den Code ausführen und eure Struktur ist erstellt. Nur noch die ID 1 und als Passwort „test“ eintragen und schon kann das hacken anfangen.
Ich bedanke mich ganz herzlich auch dieses Mal für deine Aufmerksamkeit und freue mich schon auf den 3. Teil meiner Reihe! Maurice 👌