В последнее время попадаются сайты с одной и той же уязвимостью в AdsManager, в этой статье я расскажу, как найти и закрыть уязвимость на сайте.

Первым мне попались в логах следующие строки:

"POST /index.php?option=com_adsmanager&task=upload&tmpl=component HTTP/1.0" 200
"GET /tmp/plupload/yzb.php?input HTTP/1.0" 200

Итак, к нам на сайт через эксплоит загрузили шелл в папку tmp/plupload, и теперь с нашим сайтом можно сделать всё, что угодно.

В чем же заключается уязвимость? В следующей статье я более подробно воспроизведу атаку на сайт, здесь лишь оговорюсь, что при загрузке файлов отсутствует какая либо фильтрация.

Открываем файл components/com_adsmanager/controller.php и видим, что это действительно так:

$filename = $directory."/".basename($file['name']); - нету никакой проверки расширения файлов.

 Теперь перейдем к тому, как нам избавиться от проблемы. Самым простым методом будет обновить компонент до актуальной версии, где дыра немного прикрыта. Однако этот универсальный метод подходит не всем, так как у многих AdsManager прилично бывает модифицирован и обновление принесет проблемы с восстановлением функционала. Поэтому мы можем просто внести правки в код с новой версии касательно безопасности. Достаточно будет в файл контроллера добавить следующие строки после строки $filename = $directory."/".basename($file['name']);

$ext = strrpos($fileName, '.');

$fileName_b = strtolower(substr($fileName, $ext+1));

      if (!in_array($fileName_b,array("jpg","jpeg","gif","png"))) {

               exit();

       }

Но мне не особо нравится это решение, по той причине, что здесь всё равно нету нормальной фильтрации типов файлов. Поэтому я рекомендую в папку tmp/plupload добавить защитный файл .htaccess с кодом:

# Здесь мы запрещаем доступ к файлам извне, можно заменить на запрет исполнения опасных файлов
Order Deny,Allow
Deny from All
# Чтобы предотвратить замену файла .htaccess (Спасибо решению с Revisium )
RewriteEngine On
RewriteRule ^tmp/ - [F]

Теперь за безопасность сайта можно не переживать!

Комментарии   
0 # Андрей 07.05.2016 16:00
Установил AdsManeger пол года назад и недавно заметил, что мне в папку tmp заливают файлы. Сначала я их просто удалял, но потом случайно нашел статью про уязвимость в компоненте, сделал два варианта по защите сайта, через пару месяцев отпишусь.
Ответить | Ответить с цитатой | Цитировать
0 # Денис 11.11.2017 19:09
Добрый вечер, спасибо за статью!

А не подскажите, как будет выглядеть код для htaccess и controller.php

Если нужно ограничить все расширения кроме одного, например mp3, и ограничить размер загружаемого файла, например до 5 Mb

Заранее спасибо!
Ответить | Ответить с цитатой | Цитировать
0 # Protect Your Site 12.11.2017 08:06
Добрый день, Денис!
Вот в этой строке:
Цитата:
if (!in_array($fileName_b,array("jpg","jpeg","gif","png"))) {
Как раз и указываются разрешенные расширения, а ограничения на рзамер загружаемого файла задаются у хостинга на сервере. Я бы советовал посмотреть, какая версия AdsManager используется, вполне возможно, что в новых версиях это можно отредактировать в админке в настройках, без правок ядра расширения.
Ответить | Ответить с цитатой | Цитировать
Добавить комментарий