From 10255f134e040a0a80e30e33e25f8aafb9034b1b Mon Sep 17 00:00:00 2001 From: Oshgnacknak Date: Sun, 30 Jan 2022 19:43:58 +0100 Subject: [PATCH] Add SQL Injection write up --- sql-injection/README.md | 44 +++++++++++++++++++++++++++++ sql-injection/dummy-login-code.php | 23 +++++++++++++++ sql-injection/sql-injection.png | Bin 0 -> 14802 bytes 3 files changed, 67 insertions(+) create mode 100644 sql-injection/README.md create mode 100644 sql-injection/dummy-login-code.php create mode 100644 sql-injection/sql-injection.png 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 0000000000000000000000000000000000000000..0ce368fe82e7312540c9b15ac083cb771eab7340 GIT binary patch literal 14802 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 an9rKjl?#m5x!{*H0ci;Z@hZ_Tf&T+aZQm^b literal 0 HcmV?d00001