Dieser Eintrag startet hier [wiki]Blinde SQL - Injektion - Gefahren und Maßnahmen[/wiki]
== Das Zielskript ==
Alles anzeigen
Zuerst müssen wir vermerken, dass die Variable „$id“ als ganze Zahl betrachtet wird, denn sie darf nicht durch das Skript gefiltert werden. Man kann annehmen, das die Zeichenkette in der Abfrage, später mit Hilfe des Operators von MySQL mir CHAR() kodiert wird.
Wenn die Zahl in der Eintragung in der Tabelle information _schema.TABLES kleiner als 1 ist, dann braucht die Abfrage eine bestimmte Zeit, um ausgeführt zu werden, dies spiegelt sich dann auf die Ladezeit der HTML – Seite wieder. Nach einer gewissen Anzahl an Injektionen, ist man nun im Stande, die genaue Anzahl an Tabellen, die für den Benutzer zugänglich sind, zu bestimmen. Diesen Vorgang, kann man auch anwenden um die Zahl von Benutzern auf einer Internetseite festzulegen.
Beim beschriebenen timing – Angriff, gibt es jedoch mehrere Schwachstellen.
Quellcode
- <?php
- mysql_connect('location','test','test');
- mysql_select_db('test')
- $id = $_GET['id'];
- if ($id!='')
- $query ="SELECT id,name FROM products WHERE id=" .$id." LIMIT 1"
- $res = mysql_query($query);
- if ($res!=NULL) { echo('Coto voir article'); mysql_free_result ($res)}
- }} else {
- ?>
- <html>
- <head> <title>SQL Injection: demo</title> </head>
- <body>
- <form action='' methode'GET'>
- ID Article:<input type="text" name="id"><br>
- <input type="submit" value="View"
- </form>
- </body>
- </html>
- <?php
- }
- ?>
- Der Befehl „IF()“ gilt nur für alle zurückgelieferten Eintragungen, dessen Zahl muss auf 1 gesetzt erden. Mit „COUNT()“ kann diese umgangen werden.
- Man braucht viel Zeit um die Gesamtheit der Dateien, wieder zu gewinnen
10.455 mal gelesen