Уязвимость 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) сработаем, и хакера попросят авторизироватся.
Так же настоятельно рекомендую удалить файловый менеждер, если, конечно, вы его не используете часто. Так будет спокойней.

Интересное

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

Комментарии

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

    Войти через OpenID

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