База данных под прицелом


         

Навязывание запроса или SQL-injecting - часть 5


По его внешнему виду можно предположить, что значение catid

передается непосредственно в строке запроса к БД и если разработчик скрипта забыл о фильтрации, у нас появляется возможность модифицировать запрос по своему усмотрению. Для проверки этого предположения заменим 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




Содержание  Назад  Вперед