2013-05-05 4 views
-1

Пройдя через sql-инъекцию в hakipedia, я понимаю, что предполагается, что инъекции идут по параметру (который становится частью SQL-запроса на сервере).Нулевой символ в Sql Injection

например.

select news from news_table where id=1 

атакован, как

select news from news_table where id=NULL UNION ALL select * from users 

Однако в информационной схеме (http://hakipedia.com/index.php/SQL_Injection#INFORMATION_SCHEMA) и Mysql Benchmark (http://hakipedia.com/index.php/SQL_Injection#MySQL_BENCHMARK) вектор инъекции NULL до того UNION ALL четко не указано. Это правильно или я чего-то не хватает?

+0

http://xkcd.com/327/ (SCNR) – luksch

+0

@luksch Да. видели это раньше :) lol – Karan

+0

Я серьезно не знаю, почему мои вопросы затушевываются. Это, вероятно, не в первый раз. – Karan

ответ

1

NULL просто используется, чтобы сделать исходный запрос действительным. Это, вероятно, просто примеры использования в качестве отправных точек. Возможно, вам потребуется настроить атаку для разных запросов. Например, если запрос завершается с параметром строки:

... where id = 'abc' 

Код может выглядеть примерно так:

"... where id = '${id}'" 

атака будет необходимо правильно завершить это заявление, чтобы сделать его действительным SQL. Нечто подобное может работать:

' UNION ALL select * from users -- 

Что привело бы:

... where id = '' UNION ALL select * from users --' 

Нулевой пример, вероятно, здесь не работает. Это приведет к чему-то вроде этого:

... where id = 'NULL UNION ALL select * from users' 
+0

Спасибо :) Теперь гораздо яснее. – Karan

1

NULL до UNION гарантирует, что в результирующем наборе нет новостей, поскольку в news_table не должно быть никаких строк без идентификатора, например, id = NULL. Вы также можете попробовать -1 вместо NULL.

0

Нет, я считаю, что вы неправильно понимаете цель NULL в вышеуказанном запросе. Цель запроса - просто вернуть столбец новостей из таблицы новостей для выбранной статьи. Хакер поставляет значение NULL, которое никогда не равно ни к чему, и поэтому первый запрос не вернет строку. Как часть предоставленного параметра для взлома, они пытаются вернуть результаты из таблицы пользователей. Предполагая, что значение id является положительным набором целых чисел, поставка строки атаки -1 UNION ALL select * from users сделала бы то же самое.

Если это не продукт COTS, где известна схема, как только вы обнаружите, что сайт уязвим для инъекционной атаки, следующий шаг состоит в том, чтобы выяснить, что такое базовая СУРБД, а затем какие данные доступны. Контрольные вещи были бы тем, что я хотел бы использовать, чтобы увидеть, что веб-ответ, который обычно мгновенен, теперь занимает 5, 10, 30 секунд. Это говорит мне, что у меня есть хорошая идея, что это цель MySQL.

Следующая задача - получить данные. В приведенном выше примере возвращается только один столбец данных, но мы запросили все столбцы. Это не скомпилируется, по крайней мере, в мире SQL Server, потому что движок увидит, что первый возвращает 1 столбец, а второй возвращает N столбцов. Вместо этого вам нужно либо выборочно возвращать столбцы, либо объединять их вместе.

Если вы просто отправляетесь по вредоносному маршруту, это проще, чем все, что вы делаете, это заменить ваши команды delete/drop и не беспокоиться о формировании атакованного вывода в предопределенной форме.