Я изучаю некоторые основы SQL-инъекций. У меня есть уязвимое приложение (SQLi Labs), поэтому я вижу исходный код и пытаюсь выяснить, как должен быть параметризован URL-адрес, чтобы получить тот же результат, что и интерфейс mysql. Однако есть разница, которую я не могу решить, поэтому, пожалуйста, помогите мне.
Это код PHP:
$sql="SELECT * FROM users WHERE id='$id'";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
Это запрос MySQL:
mysql> select * from users where id=3--'' OR 1=1;
+----+----------+------------+
| id | username | password |
+----+----------+------------+
| 1 | Dumb | Dumb |
| 2 | Angelina | I-kill-you |
| 3 | Dummy | p@ssword |
| 4 | secure | crappy |
| 5 | stupid | stupidity |
| 6 | superman | genious |
| 7 | batman | mob!le |
| 8 | admin | admin |
| 9 | admin1 | admin1 |
| 10 | admin2 | admin2 |
| 11 | admin3 | admin3 |
| 12 | dhakkan | dumbo |
| 14 | admin4 | admin4 |
+----+----------+------------+
Это URL:
http://192.168.19.155/sqli-labs/Less-1/?id=2--%20%27%27%20OR%201=1
URL возвращает мне только одну строку (которая была определена в опции «? Id = 2»), остальная часть запроса (-% 20% 27% 27% 20OR% 201 = 1), похоже, игнорируется.
Запрос URL должен возвращать всю таблицу пользователей, как это делает интерфейс mysql. Здесь нет фильтрации входных данных, поэтому я не могу понять, почему результат URL не совпадает с выходом интерфейса mysql. Пожалуйста, помогите мне!
Спасибо!
Erik
На самом деле, mysql_fetch_array
возвращает информацию только об одной строке. Вы можете изменить скрипт, чтобы получить ожидаемый ответ, таким образом:
while ($row = mysql_fetch_array($result)) {
print_r($row);
}
Других решений пока нет …