SQL Server против MySQL - Уязвимости SQL-инъекций в классическом ASP - PullRequest
1 голос
/ 01 сентября 2009

Недавно один из веб-сайтов наших клиентов стал жертвой атаки SQL-инъекцией из-за невозможности очистки параметров строки запроса, предоставленных странице. С тех пор уязвимый код был идентифицирован и исправляется, но меня удивляет, что MySQL и SQL Server обрабатывают строки с несколькими запросами.

Уязвимый код используется на нескольких десятках веб-сайтов, два из которых работают на SQL-сервере, а остальные - на MySQL. С этим кодом мы никогда ранее не подвергались атаке инъекций (по милости Бога), но как только мы выпустили два веб-сайта, которые работают на сервере SQL (с одной и той же кодовой базой), этот сайт был быстро использован. Способ введения был довольно прост:

page.asp?param=1;delete from [some_table];

Как я уже сказал, уязвимый код распределяется между многими сайтами, но если я пытаюсь выполнить инъекцию такого же типа на наших сайтах MySQL, ASP выдает красивую ошибку сервера, которая сообщает нам, что в запросе произошла ошибка:

SELECT * FROM Table1 WHERE ID = 1;DELETE FROM TABLE1;

Тестируя это далее, я смог убедиться, что драйвер MySQL ODBC 3.51 не позволяет выполнять два запроса SQL в одном и том же выражении, когда объект ADODB.Connection вызывает Execute (""), а собственный клиент SQL Server (10.1). ) не имеет проблем при выполнении двух параллельных запросов. Это на самом деле просто конфигурация провайдера, которая делает SQL-сервер уязвимым таким образом, а MySQL - нет, или это происходит откуда-то еще?

Ответы [ 4 ]

4 голосов
/ 01 сентября 2009

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

В драйвере MySQL ODBC 3.51.18 (август 2007 г.) добавлена ​​поддержка опции подключения FLAG_MULTI_STATEMENTS для включения нескольких операторов. Смотри http://dev.mysql.com/doc/refman/5.1/en/connector-odbc-configuration-connection-parameters.html.

См. Также http://bugs.mysql.com/bug.php?id=7445 для истории этой опции.

См. Также мой ответ на " Mysql change delimiter для лучшей обработки SQL INJECTION? " Обратите внимание, что использование нескольких операторов - это только один из способов получить уязвимость SQL-инъекций. Отключение нескольких утверждений не является 100% доказательством против этих недостатков.

2 голосов
/ 01 сентября 2009

Это особенность сервера SQL, которая поддерживает несколько операторов в строке. Решение заключается не столько в дезинфекции ввода, сколько в использовании параметризованных запросов или хранимых процедур. Если бы запрос был

SELECT * FROM Table1 WHERE ID = @id

Тогда передача "1;DELETE FROM TABLE1;" приведет к ошибке, поскольку это недопустимое целочисленное значение.

1 голос
/ 03 октября 2009

Возможно использовать SQL-инъекцию без стекирования запросов. Очень распространенным методом является использование «Union Select» Вот написанный мною эксплойт для внедрения MySQL, использующий объединение select: http://milw0rm.com/exploits/3002 Выбор объединения позволяет вам сделать оператор выбора внутри другого оператора: выберите 1 союз выберите пароль от mysql.user

Вы также можете сделать дополнительный выбор: вставить в sometable (some, col, id) значения ((выберите Password из mysql.user), 1,1) -)

Слепое внедрение SQL-кода работает на всех платформах, однако, в зависимости от базы данных, эксплойт будет отличаться. Это слепой эксплойт для SQL-инъекций для mysql: " milw0rm.com/exploits/4547

Это очень хорошая статья на тему SQL-инъекций для MySQL: www.ngssoftware.com/papers/HackproofingMySQL.pdf

1 голос
/ 01 сентября 2009

Я думаю, это произошло потому, что SQL Server поддерживает MARS . Насколько я понимаю, MySQL не поддерживает это. Марс - это хорошая функция для ускорения работы с базами данных, чтобы было меньше обходов. Вы можете поместить более одного запроса в оператор SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...