Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #75, ФЕВРАЛЬ 2007 г.

special faq

НА ВОПРОСЫ ОТВЕЧАЛ SPIDER_NET

Хакер, номер #075, стр. 070


(SPIDER_NET@INBOX.RU), WWW.VR-ONLINE.RU

Вопрос:

Возможно ли внедрить SQL-Injection через плюшки (cookies)?

Ответ:

Да. Бывают такие случаи, когда веб-программисты извращаются и осуществляют любую передачу данных посредством post-запросов. При использовании этого метода в адресной строке не будут отображаться имена переменных. Некоторые программисты считают, что так они могут обезопасить свой проект от всех бед, и забивают на проверку передаваемых от пользователя данных. К тому же многие важные данные они сохраняют в cookies. При таком раскладе ты можешь открыть плюшку, скажем, в CookieEditor и попытаться внедрить в один из параметров SQL-Injection. Способ очень действенный. Так что не стоит пренебрегать проверкой данных из Cookies.

Вопрос:

Чем отличается внедрение SQL-Injection в 3-ей и 4-ой версии MySQL?

Ответ:

Главное отличие в новых операторах, которые появились в 4-ой версии. В 4-ую версию MySQL разработчики добавили несколько новых фишек. В том числе оператор UNION, благодаря которому появилась возможность объединять запросы и получать доступ ко всем таблицам БД пользователя. Этот оператор существенно облегчает жизнь программистам. Взломщику же это дает дополнительную возможность внедрения SQL-Injection. Посмотри любой архив Bugtraq и увидишь, что большинство найденных ошибок типа SQL-Injection основано на использовании этого оператора. Сейчас уже есть 5-ая версия MySQL, но ее пока мало кто использует. В основном все сидят на проверенной временем 4-ой версии.

Вопрос:

Какой сервер БД надежнее? Легче ли внедрить SQL-Injection для MS SQL Server?

Ответ:

SQL-Injection не имеет отношения к надежности сервера БД, так как основная проблема не в самом сервере, а в сценариях, через ошибки в которых внедряется SQL-Injection. Но стоит заметить, что после успешного применения SQL-Injection возможности сервера БД играют важную роль, так как от этого зависит выгода, которую можно получить. Например, у MS SQL Server можно вызвать встроенную процедуру exec master..xp_cmdshell 'dir /p' и, если администратор упустил этот момент из виду, ты увидишь содержимое папки, в которой установлен MS SQL Server. С помощью этой процедуры можно много чего наделать. Все зависит от прав, с которыми работает MS SQL Server. Если окажется, что это права «SYSTEM», то можно «порутить» весь сервер.

Вопрос:

Существуют ли способы определения сервера БД и его версии?

Ответ:

Существуют, хотя 100% работающего способа нет. Для начала нужно попробовать внедрить какой-нибудь спецсимвол в любой запрос, допустим, это будет одинарная кавычка. Если сценарий не фильтрует переданные параметры, то ты должен увидеть сообщение об ошибке. Из текста ошибки можно узнать название сервера БД. Допустим, это MySQL. Чтобы определить версию, можно попробовать внедрить функцию version() в запрос. Она возвращает номер версии mySQL. Некоторые грамотные программисты отключают вывод любых ошибок, но, тем не менее, данные, которые сценарий получает от пользователя, фильтруются плохо. В результате SQL-Injection не отменяется, но в этом случае приходится работать вслепую.

Вот реальный пример. На официальном сайте одной из моих любимых групп есть раздел с текстами их песен, все тексты хранятся в БД, и их выборка происходит с помощью сценария на PHP следующим образом. При загрузке этой ссылки - www.kipelov.ru/ly.php?idtxt=1 - получаем страничку с текстом песни под номером один. Если попробовать вставить какой-нибудь спецсимвол в переменную idtxt, то загрузится просто чистая страница без каких-либо намеков на ошибку. В таком случае попробуем внедрить функцию version() в этот запрос: www.kipelov.ru/ly.php?idtxt=version(). Теперь мы видим не чистую страницу, а песенку под номером четыре. Значит, функция version вернула «4», и, следовательно, мы имеем дело с четвертой версией «мускула». Чтобы точно определить название сервера БД, можно попытаться внедрить в запрос те функции, которые присутствуют только в реализации SQL определенного сервера БД. Для этого необходимо знать тонкости большинства известных серверов или использовать специальные программки.

Если ни одна попытка не увенчалась успехом, не расстраивайся! Узнай хостера, на сервере которого расположен этот сайт. Потом зайди на его официальную страницу. В большинстве случаев хостеры описывают конфигурацию своих серверов и ПО, установленное на них. Если на сайте ничего нет, то попробуй написать письмо. В письме объясни, что ты хочешь воспользоваться услугами хостинга, а главный критерий — сервер БД. В итоге, ты получишь ответ на свой вопрос. Что касается сервера MySQL, то для определения его версии существуют специальные программки. К примеру, релиз от команды UkrTeam. Ее исходный текст есть на диске к журналу. Можешь еще заглянуть на www.packetstortsecuiry.nl.

Вопрос:

Можно ли с помощью SQL-Injection задосить сервер?

Ответ:

Да, причем сложного в этом ничего нет. В MySQL есть функция BenchMark, которая предназначена для вычисления определенного выражения заданное количество раз. Синтаксис функции следующий: benchamrk(1000000, md5(current_time)). Вычисляется 100000 раз md5 хэш текущего времени. Это довольно ресурсоемкая операция, поэтому отнимает много процессорного времени. Теперь представь, что будет, если увеличить количество вычислений, а еще лучше — сделать функцию benchmark вложенной. MySQL-сервер начнет активно потреблять ресурсы системы, в результате чего начнутся жуткие тормоза, и, как следствие, сервер перестанет успевать обрабатывать запросы. Для успешного проведения подобной атаки нужно написать сценарий, который будет постоянно посылать подобные запросы.

Вопрос:

Как находить возможности внедрения SQL-Injection? Есть ли какая-нибудь литература по этой теме?

Ответ:

Для начала стоит научиться программировать на одном из языков, используемых для разработки web-приложений. Только так ты сможешь научиться находить ошибки в чужих проектах. Рекомендуется начать с PHP. Сейчас этот язык очень популярен и используется практически везде – начиная от домашних страничек и заканчивая серьезными порталами. Если нет желания заморачиваться с PHP, то учи ASP. Тоже довольно популярный язык. Что касается конкретных книг, то в случае с PHP рекомендую первым делом прочитать книгу Лари Уильяма. В ней описывается программирование на PHP 4 с нуля. Книга написана простым языком, поэтому проблем с пониманием возникнуть не должно.

Затем необходимо разобраться с работой серверов БД. Зная все возможные операторы и функции, ты сможешь использовать их по назначению :). Почти все книги зарубежных авторов подойдут для начинающих - выбирай любую. После этого рекомендую обратить внимание на книги Михаила Фленова: «PHP глазами хакера» и «Web-сервер глазами хакера» помогут разобраться с использованием разных уязвимостей (в том числе и SQL-Injection) на практике. В них приведено очень много практических примеров, поэтому читать интересно.

Содержание