Дефейс по-правильному! Докучаев Дмитрий aka Forb Хакер, номер #070, стр. 070-060-1 (forb@real.xakep.ru) Ликбез по совершению дефейсов К нам приходит очень много писем и SMS-сообщений, в которых вы спрашиваете: «Как взломать сайт?». Ответить на такой вопрос в формате SMS невозможно, поэтому мы решили сделать специально для тебя материал, в котором расскажем об основных приемах дефейса. Прочитав эту увлекательную статью, ты узнаешь об известных багах в CGI/PHP-сценариях и научишься грамотно их эксплуатировать. Я не забуду упомянуть о методах поиска ошибок, а также о собственной безопасности. Итак, начинаем! Ошибки бывают разные Ну что ж, понеслась! Как и обещал, приведу небольшой обзор самых популярных WWW-багов, через которые ты можешь влегкую замутить дефейс. Практически все они позволяют получить на ломаемом проекте полноценный web-шелл. Задефейсить после этого index-страницу не составляет большого труда. 1. CGI::open(). Итак, первая ошибка заключается в неверном использовании функции open() в перловых CGI-скриптах. Баг эксплуатируется, когда хакер запрашивает нестандартный параметр у сценария. Характерным признаком присутствия ошибки является название опции, передаваемой скрипту. Если параметр называется file, filename, article, id и т.д., можешь быть уверен - сценарий уязвим. Попробуй изменить значение параметра на |id, id| или |id|. В случае, когда скрипт выведет текущие права пользователя (смотри скриншот), можешь прыгать до потолка - по всей видимости, сегодня благоприятный день для дефейса :). Убедись, что команды, состоящие из двух слов, также работают исправно. Для этого скомандуй, например, uname -a. Не забывай про обрамление вертикальными палочками (пайпами) - именно из-за них баг в open() проявляется в выводе скрипта. Часто бывает, что команда, включающая пробел, не выполняется. В этом случае необходимо заменить все пробельные символы на переменную $IFS, только тогда команда исправно переварится сервером. Посмотри на скриншот и все поймешь без лишних вопросов. 2. CGI::open()::Null-byte (тупиковый баг). Следующая уязвимость не является критической и не ведет к исполнению команд, поэтому максимум пользы, которую ты можешь извлечь из обработки нулевого байта, - затирание index.html. Имена параметров, указывающих на брешь, остаются такими же, как в первом случае. Отличие от первого бага в том, что запрос скрипту будет включать имя файла с нулевым байтом в конце (символ %00). Как ты понимаешь, кроме чтения файла, скрипткидис ничего не добьется. Но иногда документ можно обнулить, а ведь это тоже своего рода дефейс! Чтобы воспользоваться перезаписью index.html, после указания пути к index.html поставь символ > , и посетители портала будут лицезреть пустой index. 3. CGI::system() и PHP::system(). Ошибки в системных функциях очень просты для понимания. В ряде случаев админы обращаются к функции, выполняющей системные команды. При этом они подставляют в эту функцию переменные, приходящие извне, безо всякой проверки. Если поисковая система нашла для тебя странный скрипт, принимающий опцию man, которая имеет значение, к примеру, ps, у тебя есть шанс протестировать сценарий на системный баг. Обрами значение параметра символом «;» с обеих сторон, а в середине напиши команду. Пусть это будет уже знакомое слово id. Представь: твоя команда попадает в system(), слово man игнорируется (в связи с отсутствием запрошенного мануала), а вот /usr/bin/id выполнится без вопросов. В итоге ты будешь наблюдать свои права в окне браузера. Эта ошибка характерна как для CGI, так и для PHP, поэтому можешь тестить на баг оба интерпретатора. |