
Exploit Python per CVE-2026-109618: sfrutta la corruzione dell'heap di PHP session.upload_progress per sovrascrivere zend_call_function e ottenere l'esecuzione remota di comandi.
██████╗ ██╗ ██╗██████╗ ██████╗ ███████╗██╗ ██╗███████╗██╗ ██╗ ██╔══██╗ ██║ ██║██╔══██╗╚════██╗██╔════╝██║ ██║██╔════╝██║ ██║ ██████╔╝ ███████║██████╔╝ █████╔╝███████╗███████║█████╗ ██║ ██║ ██╔═══╝ ██╔══██║██╔═══╝ ██╔═══╝ ╚════██║██╔══██║██╔══╝ ██║ ██║ ██║ ██║ ██║██║ ███████╗███████║██║ ██║███████╗███████╗███████╗ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚══════╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝╚══════╝
Exploit per l'esecuzione di codice remoto tramite l'avanzamento dell'upload di sessione PHP (CVE-2026-109618)
CVE-2026-109618 è una vulnerabilità critica di corruzione della memoria e di logica nel motore PHP relativa al monitoraggio dell'avanzamento dell'upload dei file tramite sessioni (session.upload_progress).
Il difetto risiede nel modo in cui il puntatore esterno post_bytes_processed viene memorizzato nella cache durante la prima fase della richiesta (FILE_START) e non viene aggiornato correttamente negli eventi di upload successivi. Combinando una race condition, il rilascio distruttivo degli alberi Hash (HashTable.pDestructor = zval_ptr_dtor) e uno heap spray controllato tramite strutture con padding (tabelle naturali impacchettate t[]), è possibile sovrascrivere i puntatori a funzione interni del motore (come zend_call_function) per reindirizzare il flusso di esecuzione verso system() con comandi arbitrari.
Lo strumento richiede la libreria rich per il rendering dell'interfaccia console, dei banner e dei pannelli interattivi.
git clone [https://github.com/Ghxstsec/php2shell-poc.git](https://github.com/Ghxstsec/php2shell-poc.git)
cd php2shell-poc
Installa le dipendenze richieste
pip install -r requirements.txt
(O semplicemente: pip install rich)
🚀 Utilizzo ed esempi
Esegui lo script con i parametri appropriati per il sistema di destinazione:
python3 php2shell.py -u "[https://target-domain.com/path/index.php](https://target-domain.com/path/index.php)" -c "uname -a; id"
Opzioni della riga di comando Parametro Descrizione Valore predefinito -u, --url URL completo dell'endpoint PHP vulnerabile Obbligatorio -c, --command Comando da eseguire sul sistema operativo uname -a; id; echo JACKALPOC --sid Identificatore di sessione personalizzato (PHPSESSID) a1b2c3d4e5f6a7b8c9d0e1f2a3 --stall Durata dello stallo in secondi 1.35 --dtor Indirizzo di memoria divulgato di zval_ptr_dtor (hex/int) 0 --call Indirizzo di memoria esplicito per zend_call_function Calcolato tramite offset --dry Modalità simulazione: genera e salva il payload binario su disco False 🛠️ Dettagli tecnici
Heap Spraying: Utilizza un blocco di 149 elementi (tabella naturale compatta con bin da 320 byte) per garantire il riutilizzo del blocco di memoria liberato.
Supporto SAPI: Progettato per ambienti valutati con architetture CGI/FastCGI e server front-end compatibili (come LiteSpeed LSAPI / Apache / Nginx).
Dry Run: Consente di scaricare l'esatto flusso di byte del payload multipart generato per analisi forense o debug tramite il flag --dry.
🛠️ Dettagli tecnici
Versioni interessate: da PHP 5.4 fino a PHP 8.x (patch rilasciate dai manutentori di PHP per 8.2, 8.3, 8.4 e 8.5).
Heap Spraying: Utilizza un blocco di 149 elementi (tabella naturale compatta con bin da 320 byte) per garantire il riutilizzo del blocco di memoria liberato.
Supporto SAPI: Progettato per ambienti valutati con architetture CGI/FastCGI e server front-end compatibili (come LiteSpeed LSAPI / Apache / Nginx).
Dry Run: Consente di scaricare l'esatto flusso di byte del payload multipart generato per analisi forense o debug tramite il flag --dry.
📦 File requirements.txt
rich>=13.0.0
urllib3>=1.26.0
⚠️ Avviso legale (Disclaimer)
Questo software è stato creato esclusivamente per scopi educativi, di ricerca sulla sicurezza e per l'uso in attività di auditing autorizzate (Pentesting). L'autore (Ghxstsec) non si assume alcuna responsabilità per usi impropri o danni causati dall'utilizzo non corretto di questo script su sistemi non autorizzati.