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

Форум MySQL

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

 

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

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

тема: SQL инъекция
 
 автор: Loneliness   (06.07.2008 в 17:36)   письмо автору
 
 

В общем ситуация такая- не фильтруются вообще входные данные в скрипте. Пример запроса к скрипту такой:
http://localhost/script.php?id=408&todo=view

Часть кода, выполняющая запрос к базе данных:

<?
if($todo== 'view' && !empty($id))
{
        
$res mysql_query("select * from mytable where id=$id");
        
$row mysql_fetch_assoc($res);
        
$res mysql_query("select * from mytable_comment where id_m=$id order by dtDate");
            while (
$rw=mysql_fetch_assoc($res))
}
?>

Помогите составить запрос SQL инъекции в данном случае?
P.S Это придуманный мной лично код, никого ломать я не собираюсь, да и не умею. Просто интересует тема безопасности, и на примерах реализации уязвимостей усваивать все гораздо проще. Заранее благодарю.

   
 
 автор: cheops   (06.07.2008 в 18:49)   письмо автору
 
   для: Loneliness   (06.07.2008 в 17:36)
 

Пока скрипт ничего не выводит SQL-инъекции провести не получится - суть SQL-инъекции на SELECT-запросах - вывод вместо одного поля (открытого для просмотра) - другого (закрытого для просмотра, например, пароля). В принципе пароль может находится даже в другой таблице, например, user - но, для этого необходимо представлять структуру базы данных (либо просмотром исходного кода, если это доступно, либо исследованием).

PS Не плохо бы кстати увидеть структуру таблиц mytable и mytable_comment - в реальных условиях эта структура исследуется, путем подбора соответствующих инъекций, но без возможности воспроизвести ситуацию составить работоспособную SQL-инъекцию не реально.

   
 
 автор: Loneliness   (07.07.2008 в 02:46)   письмо автору
 
   для: cheops   (06.07.2008 в 18:49)
 

Вот структуры таблиц:
CREATE TABLE `mytable` (
`id` int(11) NOT NULL auto_increment,
`sAvtor` varchar(255) character set cp1251 NOT NULL default '',
`sText` text character set cp1251 NOT NULL,
`dtDate` bigint(20) NOT NULL default '0',
`sNameFotka` varchar(255) character set cp1257 NOT NULL default '',
`key_gen` varchar(4) NOT NULL default '',
`sNameVideo` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`),
FULLTEXT KEY `sText` (`sText`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10424 ;


CREATE TABLE `mytable_comment` (
`id` int(11) NOT NULL auto_increment,
`id_m` int(11) NOT NULL default '0',
`txComment` text character set cp1251 collate cp1251_bin NOT NULL,
`tName` varchar(255) character set cp1251 collate cp1251_bin NOT NULL default '',
`dtDate` bigint(20) NOT NULL default '0',
`sNameFotka` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2792 ;

То есть, вообще по идее это что-то вроде гостевой, с возможностью добавления файлов. А разве если в инъекции использовать объединение запросов не получится\, скажем, удалить строку из таблицы, или всю таблицу, без вывода?

   
 
 автор: sms-send   (07.07.2008 в 04:24)   письмо автору
 
   для: Loneliness   (07.07.2008 в 02:46)
 

Если первое ключевое слово запроса - "select", то будет выполнен только SELECT.

Если в запрос подставить:
id=-1+UNION+SELECT+1,2,3,4,5,6,7


Узнаем в каком виде выводятся поля запроса и можно будет в удобное поле подставить свой подзапрос, либо изменить текущий запрос, чтобы он выбирал другую запись:

id=-1+UNION+SELECT+1,2,3,(SELECT USER()),5,6,7

id=-1+UNION+SELECT+*+FROM+`mytable` WHERE /* здесь нужный предикат */

   
 
 автор: cheops   (07.07.2008 в 09:45)   письмо автору
 
   для: Loneliness   (07.07.2008 в 02:46)
 

>А разве если в инъекции использовать объединение запросов не получится\, скажем,
>удалить строку из таблицы, или всю таблицу, без вывода?
Только в SQL-инъекции DELETE-запроса. Например, один DELETE-запрос удаляет одну запись таблицы, принадлежащую текущему пользователю. Если возможна SQL-инъекция в виде числовой вставки - можно удалить все записи таблицы.

PS SQL-инъекция - это не универсальная атака, как правило, с её помощью пытаются найти пароль, который позволит значительно расширить права доступа и атаковать дальше.

   
 
 автор: Loneliness   (07.07.2008 в 13:03)   письмо автору
 
   для: cheops   (07.07.2008 в 09:45)
 

Понятно, более менее. То есть, если пароль не слишком прост и хранится хотя бы в MD5 хеше- результативность SQL инъекции резко теряет шансы?

   
 
 автор: cheops   (07.07.2008 в 15:22)   письмо автору
 
   для: Loneliness   (07.07.2008 в 13:03)
 

Теоретически да, но лучше их все-таки не допускать (тем более это не так сложно).

   
 
 автор: Loneliness   (08.07.2008 в 04:21)   письмо автору
 
   для: cheops   (07.07.2008 в 15:22)
 

Понял что хотел. Благодарю за помощь!

   
 
 автор: Trianon   (06.07.2008 в 21:06)   письмо автору
 
   для: Loneliness   (06.07.2008 в 17:36)
 

Имеет смысл поглядеть на задачу 11 http://www.softtime.ru/info/task.php?id_article=81 и её решения. Там многое пояснено.

   
Rambler's Top100
вверх

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