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

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

 

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

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

тема: Обсуждение задачи N 11
 
 автор: cheops   (13.03.2006 в 00:26)   письмо автору
 
 

Так как задача достаточно специфичная и не объёмная решил не оценивать скрипты по читабельности и тонкостям, так как, ИМХО, чем менее читабельны SQL-инъекции и чем меньше тонкостей они учитывают, тем лучше для окружающей среды :) Оценки производились по опасности: сможет ли и с какой эффективностью использовать готовую SQL-инъекцию дебил, который с трудом читает и не способен к самостоятельному построению SQL-инъекций. А также по защите, насколько эффективна предложенная защита
NNN опасн защит
001   1     4
002   3     5
003   4     5
004   5     5

   
 
 автор: cheops   (13.03.2006 в 00:31)   письмо автору
 
   для: cheops   (13.03.2006 в 00:26)
 

Интересно отметить, что никто не использовал регулярные выражения
<?php
  
if(!preg_match("|^[\d]+$|",$_GET['id_user'])) exit("Не верный формат вывода");
?>

что наверное верно, так как регулярные выражения не назовёшь самым читабельным вариантом защиты, тем не менее им также можно воспользоваться, так как его использование даёт гарантированную защиту от посягательств, так как ничего кроме целых чисел не будет пропущено.

   
 
 автор: ed209   (15.03.2006 в 16:19)   письмо автору
 
   для: cheops   (13.03.2006 в 00:31)
 

Здраствуйте.
Объясните, каким образом с пом. скл-инъекции можно
прочитать пароль?
Ведь нигде в скрипте не нету echo $row['pass'].
У меня ни один вариант не прокатил (mysql 4.1.8).

   
 
 автор: cheops   (15.03.2006 в 21:40)   письмо автору
 
   для: ed209   (15.03.2006 в 16:19)
 

В строку запроса вместо http://localhost/user.php?id_user=1 необходимо подставить SQL-инъекцию, например, из http://www.softtime.ru/forum/read.php?id_forum=7&id_theme=14376
http://localhost/user.php?id_user=0+union+select+id_user,name,pass,version()+as+email,pass+as+url+from+userslist+where+id_user=2

Для инъекции и не нужно поле $row['pass'], пароль путём манипуляций со вторым SELECT-запросом в UNION подставляется в поле name или любое другое поле, которое выводится в окно браузера.

   
 
 автор: ed209   (15.03.2006 в 23:28)   письмо автору
 
   для: cheops   (15.03.2006 в 21:40)
 

с приведёным вами выше запросом, мне пишут это:
ошибка
Illegal mix of collations (cp1251_general_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation 'UNION'
Что это значит?
А вот с таким запросом:
user.php?id_user=99 UNION SELECT 0,pass,0,0,0 FROM userslist LIMIT 0,1 

Выдаётся -> User name - cheops, и никаго пароля(((

   
 
 автор: cheops   (16.03.2006 в 00:37)   письмо автору
 
   для: ed209   (15.03.2006 в 23:28)
 

У вас кодировки не совпадают в запросе и в базе - скрипт ориентирован на ситуацию, когда в качестве кодировки используется cp1251.

   
 
 автор: Trianon   (16.03.2006 в 01:15)   письмо автору
 
   для: cheops   (16.03.2006 в 00:37)
 

Вторая строка из решения была как раз под такой случай. Так что со скриптом всё ОК :)

   
 
 автор: Sergey89   (17.03.2006 в 14:56)   письмо автору
 
   для: ed209   (15.03.2006 в 23:28)
 

там и имя и пароль у ID=1 были cheops =) Т.ч. всё работает

   
Rambler's Top100
вверх

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