
Скрипты proof-of-concept и Docker-лаборатория для воспроизведения CVE-2023-41892, уязвимости удаленного выполнения кода без предварительной аутентификации в Craft CMS. Включает эксплойты для отравления логов (log poisoning) и записи файлов MSL Imagick.
Этот репозиторий содержит скрипты proof-of-concept и локальный Vulhub-стенд для воспроизведения CVE-2023-41892 — уязвимости удаленного выполнения кода без предварительной аутентификации в Craft CMS.
Используйте этот проект только в авторизованной локальной лаборатории или других системах, где у вас есть явное разрешение на тестирование.
CVE-2323-41892_PoC/
+-- README.md
+-- LFI_to_RCE.py
+-- Imagick_PoC.py
+-- Vulnhub_env/
+-- docker-compose.yml
+-- README.md
+-- README.zh-cn.md
+-- 1.png ... 5.png
| Путь | Назначение |
|---|
LFI_to_RCE.py | PoC для отравления логов с последующим включением локального файла через гаджет Psy\Configuration. |
Imagick_PoC.py | PoC для произвольной записи файлов через гаджет MSL Imagick. |
Vulnhub_env/docker-compose.yml | Docker Compose стенд, запускающий уязвимую Craft CMS 4.4.14 и MySQL 5.7. |
Vulnhub_env/README.md | Оригинальные заметки по воспроизведению в стиле Vulhub с примерами запросов и скриншотами. |
Vulnhub_env/README.zh-cn.md | Китайская версия заметок по воспроизведению Vulhub. |
Vulnhub_env/*.png | Скриншоты, используемые в документации окружения Vulhub. |
CVE-2023-41892 затрагивает Craft CMS версий от 4.0.0-RC1 до 4.4.14.
Проблема исправлена в Craft CMS 4.4.15.
Уязвимая конечная точка, используемая обоими скриптами:
/index.php?action=conditions/render
PoC нацелены на URL локального стенда по умолчанию:
http://localhost:8088
Если ваш стенд работает на другом хосте или порту, обновите значение URL в начале файлов
LFI_to_RCE.py и Imagick_PoC.py.
requestsУстановите зависимость Python:
pip install requests
Запустите уязвимое окружение Craft CMS:
cd Vulnhub_env
docker compose up -d
Откройте установщик Craft CMS:
http://localhost:8088/admin/install
Используйте следующие параметры базы данных по умолчанию во время установки:
| Настройка | Значение |
|---|---|
| Хост базы данных | db |
| Имя базы данных | craftcms |
| Пользователь базы данных | root |
| Пароль базы данных | root |
После установки убедитесь, что сайт доступен по адресу:
http://localhost:8088
Выполняйте команды из корня репозитория:
cd CVE-2323-41892_PoC
Запустите:
python LFI_to_RCE.py
Что он делает:
Отправляет некорректный JSON, содержащий PHP-код, в лог Craft CMS.
Формирует путь к файлу лога, используя текущую локальную дату:
../storage/logs/web-YYYY-MM-DD.log
Использует craft\elements\conditions\users\UserCondition с
\Psy\Configuration для включения отравленного файла лога.
Проверяет, появился ли вывод phpinfo() в ответе.
Ожидаемый успешный вывод:
[*] Starting Log Poisoning...
[+] Payload sent successfully!
[*] Starting LFI to RCE...
[+] phpinfo() executed successfully!
Запустите:
python Imagick_PoC.py
Что он делает:
Imagick.webshell.php в корень веб-сервера.http://localhost:8088/webshell.php и проверяет наличие phpinfo().Ожидаемый успешный вывод:
[*] Sending multipart/form-data payload to trigger Imagick gadget...
[+] Success: phpinfo() output found.
Путь Imagick может привести к аварийному завершению PHP-воркера после активации полезной нагрузки. В
стенде Vulhub это может быть нормальным, если webshell.php записан до сбоя.
Оба скрипта определяют целевой URL в начале файла:
URL = "http://localhost:8088"
Измените это значение, если уязвимый стенд доступен по другому адресу.
Imagick_PoC.py проверяет созданный файл по адресу:
OUTPUT_FILE = "/webshell.php"
Убедитесь, что контейнеры запущены:
cd Vulnhub_env
docker compose ps
Убедитесь, что сайт доступен по адресу http://localhost:8088.
Проверьте, не использует ли другой сервис порт 8088.
Обновите значение URL в скриптах Python, если вы изменили открытый порт.
LFI_to_RCE.py не показывает PHP Versionstorage/logs/.web-YYYY-MM-DD.log
в LFI_to_RCE.py.Imagick_PoC.py возвращает 404 для /webshell.php/tmp/php*.Остановите стенд:
cd Vulnhub_env
docker compose down
Удалите контейнеры и том базы данных, если хотите выполнить чистую переустановку:
docker compose down -v
Обновите Craft CMS до версии 4.4.15 или новее.
При подозрении на эксплуатацию смените ключ безопасности Craft CMS, учетные данные базы данных, секреты приложения и все учетные данные, хранящиеся в окружении.