|
|
|
| В общем ситуация такая- не фильтруются вообще входные данные в скрипте. Пример запроса к скрипту такой:
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 Это придуманный мной лично код, никого ломать я не собираюсь, да и не умею. Просто интересует тема безопасности, и на примерах реализации уязвимостей усваивать все гораздо проще. Заранее благодарю. | |
|
|
|
|
|
|
|
для: Loneliness
(06.07.2008 в 17:36)
| | Пока скрипт ничего не выводит SQL-инъекции провести не получится - суть SQL-инъекции на SELECT-запросах - вывод вместо одного поля (открытого для просмотра) - другого (закрытого для просмотра, например, пароля). В принципе пароль может находится даже в другой таблице, например, user - но, для этого необходимо представлять структуру базы данных (либо просмотром исходного кода, если это доступно, либо исследованием).
PS Не плохо бы кстати увидеть структуру таблиц mytable и mytable_comment - в реальных условиях эта структура исследуется, путем подбора соответствующих инъекций, но без возможности воспроизвести ситуацию составить работоспособную SQL-инъекцию не реально. | |
|
|
|
|
|
|
|
для: 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 ;
То есть, вообще по идее это что-то вроде гостевой, с возможностью добавления файлов. А разве если в инъекции использовать объединение запросов не получится\, скажем, удалить строку из таблицы, или всю таблицу, без вывода? | |
|
|
|
|
|
|
|
для: 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 /* здесь нужный предикат */
|
| |
|
|
|
|
|
|
|
для: Loneliness
(07.07.2008 в 02:46)
| | >А разве если в инъекции использовать объединение запросов не получится\, скажем,
>удалить строку из таблицы, или всю таблицу, без вывода?
Только в SQL-инъекции DELETE-запроса. Например, один DELETE-запрос удаляет одну запись таблицы, принадлежащую текущему пользователю. Если возможна SQL-инъекция в виде числовой вставки - можно удалить все записи таблицы.
PS SQL-инъекция - это не универсальная атака, как правило, с её помощью пытаются найти пароль, который позволит значительно расширить права доступа и атаковать дальше. | |
|
|
|
|
|
|
|
для: cheops
(07.07.2008 в 09:45)
| | Понятно, более менее. То есть, если пароль не слишком прост и хранится хотя бы в MD5 хеше- результативность SQL инъекции резко теряет шансы? | |
|
|
|
|
|
|
|
для: Loneliness
(07.07.2008 в 13:03)
| | Теоретически да, но лучше их все-таки не допускать (тем более это не так сложно). | |
|
|
|
|
|
|
|
для: cheops
(07.07.2008 в 15:22)
| | Понял что хотел. Благодарю за помощь! | |
|
|
|
|
|
|
|
для: Loneliness
(06.07.2008 в 17:36)
| | Имеет смысл поглядеть на задачу 11 http://www.softtime.ru/info/task.php?id_article=81 и её решения. Там многое пояснено. | |
|
|
|