передается непосредственно в строке запроса к БД и если разработчик скрипта забыл о фильтрации, у нас появляется возможность модифицировать запрос по своему усмотрению. Для проверки этого предположения заменим catid с 1 на, допустим, 669. Сервер немедленного отобразит в ответ пустой экран. Теперь добавим к нашему URL следующую конструкцию "'or'1'1='1" (полностью он будет выглядеть так: modules.php?name=News&file=categories&op=newindex&catid=669'or'1'='1). Сервер послушно отобразит все новостные сообщения раздела, подтверждая, что SQL-инъекция сработала!
Рисунок 3 SQL-инъекции через строку URL
Еще можно попытаться вызвать ошибку SQL, подсунув ей заведомо неправильный запрос (например, символ одиночной кавычки) и тогда она может сообщить много интересного. Отсутствие ошибок еще не означает, что скрипт фильтрует пользовательский ввод – быть может он просто перехватывает сообщения об ошибках, что является нормальной практикой сетевого программирования. Также возможна ситуация, когда при возникновении ошибки возвращается код ответа 500, или происходит переадресация на главную страницу. Подобная двусмысленность ситуации существенно затрудняет поиск уязвимых серверов, но отнюдь не делает его невозможным!
Анализ показывает, что ошибки фильтрации встречаются в большом количестве скриптов (включая коммерческие), зачастую оставаясь неисправленными годами. Естественно, дыры в основных полях ввода давным-давно заткнуты и потому рассчитывать на быстрый успех уже не приходится. Запросы, передаваемые методом POST, протестированы значительно хуже, поскольку, передаются скрыто от пользователя и не могут быть модифицированы непосредственно из браузера, отсекая армаду начинающих "хакеров". Между тем взаимодействовать с WEB-сервером можно и посредством netcat'а (telnet'а), формируя POST-запросы вручную.
команда |
назначение |
CREATE TABLE |
создание новой таблицы |
DROP TABLE |
удаление существующей таблицы |
INSERT INTO |
добавление в таблицу поля с заданным значением |
DELETE FROM …WHERE |
удаление из таблицы всех записей, отвечающих условию WHERE |
SELECT * FROM … WHERE |
выборка из базы всех записей, отвечающих условию WHERE |
UPDATE ... SET ... WHERE |
обновление всех полей базы, отвечающих условию WHERE |
Таблица 1 основные команды SQL