Вразливість завантаження файлів у AdsManager

Останнім часом трапляються сайти з однією вразливістю в 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']);

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

Але мені не особливо подобається це рішення, тому що тут все одно немає нормальної фільтрації типів файлів. Тому я рекомендую до папки tmp/plupload додати захисний файл .htaccess з кодом:

# Тут ми забороняємо доступ до файлів ззовні, можна замінити на заборону виконання небезпечних файлів OrderDeny,Allow Deny from All # Щоб запобігти заміні файлу .htaccess (Дякую вирішенню з Revisium ) RewriteEngine On RewriteRule ^tmp/ - [F]

Тепер за безпеку сайту можна не перейматися!