
Python-эксплойт для CVE-2026-109618: использует повреждение кучи в PHP session.upload_progress для перезаписи zend_call_function и удалённого выполнения команд.
██████╗ ██╗ ██╗██████╗ ██████╗ ███████╗██╗ ██╗███████╗██╗ ██╗ ██╔══██╗ ██║ ██║██╔══██╗╚════██╗██╔════╝██║ ██║██╔════╝██║ ██║ ██████╔╝ ███████║██████╔╝ █████╔╝███████╗███████║█████╗ ██║ ██║ ██╔═══╝ ██╔══██║██╔═══╝ ██╔═══╝ ╚════██║██╔══██║██╔══╝ ██║ ██║ ██║ ██║ ██║██║ ███████╗███████║██║ ██║███████╗███████╗███████╗ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚══════╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝╚══════╝
Эксплойт удалённого выполнения кода через прогресс загрузки сессии PHP (CVE-2026-109618)
CVE-2026-109618 — это критическая уязвимость повреждения памяти и логическая ошибка в движке PHP, связанная с отслеживанием прогресса загрузки файлов через сессии (session.upload_progress).
Недостаток заключается в том, как внешний указатель post_bytes_processed кэшируется на первой фазе запроса (FILE_START) и не обновляется должным образом при последующих событиях загрузки. Комбинируя состояние гонки, деструктивное освобождение деревьев Hash (HashTable.pDestructor = zval_ptr_dtor) и контролируемый heap spray с использованием дополненных структур (упакованных натуральных таблиц t[]), можно перезаписать внутренние указатели функций движка (такие как zend_call_function), чтобы перенаправить поток выполнения на system() с произвольными командами.
Инструменту требуется библиотека rich для отрисовки консольного интерфейса, баннеров и интерактивных панелей.
git clone [https://github.com/Ghxstsec/php2shell-poc.git](https://github.com/Ghxstsec/php2shell-poc.git)
cd php2shell-poc
Установите необходимые зависимости
pip install -r requirements.txt
(Или просто: pip install rich)
🚀 Использование и примеры
Запустите скрипт с соответствующими параметрами для целевой системы:
python3 php2shell.py -u "[https://target-domain.com/path/index.php](https://target-domain.com/path/index.php)" -c "uname -a; id"
Параметры командной строки Параметр Описание Значение по умолчанию -u, --url Полный URL уязвимой конечной точки PHP Обязательно -c, --command Команда для выполнения в операционной системе uname -a; id; echo JACKALPOC --sid Пользовательский идентификатор сессии (PHPSESSID) a1b2c3d4e5f6a7b8c9d0e1f2a3 --stall Длительность задержки в секундах 1.35 --dtor Утёкший адрес памяти zval_ptr_dtor (hex/int) 0 --call Явный адрес памяти для zend_call_function Вычисляется через смещение --dry Режим симуляции: генерирует и сохраняет бинарную полезную нагрузку на диск False 🛠️ Технические детали
Heap Spraying: Использует блок из 149 элементов (упакованная natural-таблица с 320-байтовыми бинами) для обеспечения повторного использования освобождённого блока памяти.
Поддержка SAPI: Разработан для сред, оцениваемых в архитектурах CGI/FastCGI, и совместимых фронтенд-серверов (таких как LiteSpeed LSAPI / Apache / Nginx).
Dry Run: Позволяет выгрузить точный байтовый поток сгенерированной multipart-полезной нагрузки для криминалистического анализа или отладки с помощью флага --dry.
🛠️ Технические детали
Затронутые версии: PHP 5.4 вплоть до PHP 8.x (патчи, выпущенные сопровождающими PHP для 8.2, 8.3, 8.4 и 8.5).
Heap Spraying: Использует блок из 149 элементов (упакованная natural-таблица с 320-байтовыми бинами) для обеспечения повторного использования освобождённого блока памяти.
Поддержка SAPI: Разработан для сред, оцениваемых в архитектурах CGI/FastCGI, и совместимых фронтенд-серверов (таких как LiteSpeed LSAPI / Apache / Nginx).
Dry Run: Позволяет выгрузить точный байтовый поток сгенерированной multipart-полезной нагрузки для криминалистического анализа или отладки с помощью флага --dry.
📦 Файл requirements.txt
rich>=13.0.0
urllib3>=1.26.0
⚠️ Правовая информация (Отказ от ответственности)
Данное программное обеспечение создано исключительно в образовательных целях, для исследований в области безопасности и авторизованного аудита (пентестинга). Автор (Ghxstsec) не несёт ответственности за неправомерное использование или ущерб, вызванный ненадлежащим применением этого скрипта на неавторизованных системах.