Уязвимость osCommerce 2.2 RC 2a

В последнее время мои клиенты, которые пользуются osCommerce 2.2 RC 2a стали обращаться ко мне с жалобами на странное поведение их магазинов. При осмотре поциента я стал замечать вставки кода, которого быть по определению не должно, и наличие левых файлов. Первой мыслью была халатность заказчиков, которые могли оставить пароль к ftp аккаунту в открытом виде в конфиге total commander'a. Известны случаи, когда трояны собирали подобные файлы и отправляли их по нужному адресу.

По своей наивности я не мог допустить, что в osCommerce может быть дыра, да еще такая огромная, ведь добрая половина предпренимателей пользуется именно коммерсом. Но после моих рекомендаций изменить пароль и не хранить его в открытом виде ситуация снова повторилась. И я начал искать откуда ноги растут.

После продолжительных поисков выяснилось, что мудак злоумышленник может спокойно загружать файлы на сервер через web интерфейс. Причем доступ к нему любезно согластлись дать сами разработчики osCommerce.
Давайте посмотрим программный код и попытаемся разобраться в чем же дело:

файл application_top.php

if (!tep_session_is_registered('admin'))
{
$redirect = false;

$current_page = basename($PHP_SELF);

if ($current_page != FILENAME_LOGIN)
{
if (!tep_session_is_registered('redirect_origin'))
{
tep_session_register('redirect_origin');
$redirect_origin = array('page' => $current_page, 'get' => $HTTP_GET_VARS);
}

$redirect = true;
}

if ($redirect == true)
{
tep_redirect(tep_href_link(FILENAME_LOGIN));
}

unset($redirect);
}

Это проверка сеанса пользователя. Вроде бы все в порядке. Но! Откуда береться переменная $PHP_SELF? А она объявляется выше:

$PHP_SELF = (isset($HTTP_SERVER_VARS['PHP_SELF']) ? $HTTP_SERVER_VARS['PHP_SELF'] : $HTTP_SERVER_VARS['SCRIPT_NAME']);

Уязвимость становиться очевидной, если знать разницу между $HTTP_SERVER_VARS['PHP_SELF'] и $HTTP_SERVER_VARS['SCRIPT_NAME'].

При запросе /admin/categories.php/login.php переменная $HTTP_SERVER_VARS['PHP_SELF']  содержит строку /admin/categories.php/login.php

Результат после выполнения функции $current_page = basename($PHP_SELF); будет содержать login.php и следовательно условие if ($current_page != FILENAME_LOGIN) не выполнится, что и нужно мудаку злоумышленнику, чтобы проникнуть в святую святых )))

insert

upload

Указываем путь к файлу, который необходимо загрузить на сервер. Меняем адрес формы в firebug и отправляем форму.

sussess
 

Вот и все - файл загружен.

file
 

Он занял почетное место среди других файлов. Кстати, чтобы не вызвать подозрений, хакеры называют файлы типа google-analitycs.php и в этом духе.

result

Вызываем файл на исполнение. Как правило, файл выполняет более интересные задачи, нежели в моем примере.

categories

Так же, между делом можно взглянуть на каталог, покупателей или заказы.

Кстати, osCommerce Online Merchant v2.3.1 не содержит в себе такой уязвамости. Поэтому, мы используем его код для устранения дыры в osCommerce 2.2 RC 2a.
Открываем файл application_top.php, находим строчку

$PHP_SELF = (isset($HTTP_SERVER_VARS['PHP_SELF']) ? $HTTP_SERVER_VARS['PHP_SELF'] : $HTTP_SERVER_VARS['SCRIPT_NAME']);

и заменяем ее на

$PHP_SELF = (((strlen(ini_get('cgi.fix_pathinfo')) > 0) && ((bool)ini_get('cgi.fix_pathinfo') == false)) || !isset($HTTP_SERVER_VARS['SCRIPT_NAME'])) ? basename($HTTP_SERVER_VARS['PHP_SELF']) : basename($HTTP_SERVER_VARS['SCRIPT_NAME']);

Переменная $HTTP_SERVER_VARS['SCRIPT_NAME'] содержит в себе только имя исполняемого скрипта и поэтому условие if ($current_page != FILENAME_LOGIN) сработаем, и хакера попросят авторизироватся.
Так же настоятельно рекомендую удалить файловый менеждер, если, конечно, вы его не используете часто. Так будет спокойней.

Интересное

Git и Bitbucket
Git – это распределенная система контроля версий. Пожалуй, на этом теория заканчивается, так как...
Project Glass — Очки будущего от Google
Компания Google представила суперсовременные «очки дополненной реальности» или Project Glass. Впрочем,...
Отзыв о FirstVDS
При покупке хостинга у FirstVDS мне предложили скидку за годный отзыв в блоге или на форуме....
Проверка сайта на вирусы
Если пользоваться привычной терминологией, то web вирусы не являются вирусами в традиционном...

Комментарии

    Чтобы оставлять комментарии, авторизируйтесь

    Войти через OpenID

    рейтинг0+-
    Популярные
    Точки входа
    Наверх