MySQL-Injection mal anders

Man nehme folgenden Script-Aufbau:

<?php
$mysqli = new mysqli('localhost', 'root', '', 'datatabletest');
$rating = $mysqli->real_escape_string($_GET['rating']);
$sql = "SELECT name, rating FROM movies WHERE rating > " . $rating;

Da wir ja mustergültig escapen, sollte eigentlich nichts schief gehen – oder? Nun, der Benutzer übermittelt in $_GET[‚rating‘] folgenden Wert:

3 AND 0 = IF(1, BENCHMARK(1000000, MD5(REPEAT(CONVERT(1, CHAR), 1000))), 0)

Der Wert von $sql lautet danach:

SELECT name, rating FROM movies WHERE rating > 3 AND 0 = IF(1, BENCHMARK(1000000, MD5(REPEAT(CONVERT(1, CHAR), 1000))), 0)

Ein astreines DoS-Einfallstor. In solchen Fällen besser intval verwenden.

Original entdeckt von ulf-wendel.de.

Error: No site found with the domain 'test.basti1012.bplaced.net' (Learn more)