
Exploit proof-of-concept per la vulnerabilità di SQL injection in com_fields di Joomla 3.7.0 (CVE-2017-8917), che dimostra rilevamento, enumerazione ed estrazione dei dati in un flusso di lavoro adatto alle CTF.
Questa repository contiene un proof of concept (PoC) semplice e adatto a CTF per la vulnerabilità di SQL injection com_fields di Joomla (CVE-2017-8917). L'obiettivo è mantenere il flusso di lavoro leggero mostrando comunque l'intero flusso di sfruttamento: rilevamento, enumerazione ed estrazione dei dati.
Vulnerabilità: SQL injection nel componente com_fields di Joomla.
Causa principale: il parametro list[fullordering] non viene sanitizzato correttamente, consentendo di iniettare SQL nella query generata. Se combinato con un payload basato su errori (ad es. UpdateXML), il risultato SQL può essere mostrato nella risposta, consentendo l'estrazione dei dati.
Come viene sfruttata (a livello generale):
index.php?option=com_fields&view=fields&layout=modal con il parametro list[fullordering] impostato su un payload dannoso.UpdateXML) per forzare il database a mostrare i risultati.<title>) ed estrai l'output iniettato.Di seguito sono riportati i componenti più critici.
parse_args()Analizza gli argomenti della CLI in un semplice oggetto args con host e debug. Lo script presuppone HTTP sulla porta 80 e costruisce l'URL di base da --host.
run_exploit()run_exploit() è la funzione principale di orchestrazione:
requests.Session() così cookie e header persistono.request_title(): invia una richiesta ed estrae il valore <title>. Il PoC usa SQLi basata su errori per far trapelare i dati in quel tag, quindi questo è il cuore dell'estrazione dei dati.build_params(): crea i parametri vulnerabili della richiesta con la SQL iniettata.sql_list() e dump_table() automatizzano l'enumerazione e l'estrazione a blocchi._fetch_token()Il token CSRF viene estratto dalla pagina di login di Joomla. Anche se alcuni scenari potrebbero non richiederlo, molte route di Joomla impongono comunque controlli CSRF. Includerlo:
wrap_payload() e encode_sql_string()Questi helper generano il payload di iniezione effettivo:
wrap_payload() avvolge una query grezza in UpdateXML(...) per forzare un output basato su errori.encode_sql_string() converte le stringhe in espressioni CHAR(...) per evitare problemi di quoting._dump_table())Le righe vengono concatenate con un separatore e recuperate in sottostringhe per evitare troncamenti. Questo mantiene coerente l'output anche quando i valori delle righe sono lunghi.
python main.py --host <TARGET_IP>
Output di debug opzionale:
python main.py --host <TARGET_IP> --debug
└─$ python exploit.py --host <TARGET>
]LLLLLLmmmmmLLLLLL[
]LLLLLLLLLLLLLLLLL[
]LLLLLLLLLLLLLLLLL[
]LLLLLLLLLLLLLLLLL[
]LLLLLLLLLLLLLLLLL[
ms. ]LLLLLLLLLLLLLLLLL[ ,m
]LLLLs. ]LLLLLLLL~+LLLLLLL[ _gLLLL
LLLLLLLL_. LLLLLLLL ~~\LLLL[ ,gLLLLLLLi
dLLLLLLLLLLm_ -LLLLLLLo LLL[ _mLLLLLLLLLL.
iLLLLLLLLLLLLLLs. ]LLf` , 'c LLL[ ,gLLLLLLLLLLLLLL
iLLLLLLLLLLLLLLLLLLsgL` 'c- \. LLLLLLLLLLLLLLLLLLLLLL
,LLLLLLLLLLLLLLLLLLLLL! =__/Li iLLLLLLLLLLLLLLLLLLLLLLL
gLLLLLLLLLLLLLLLLLLLLLL imm_.Y~'` LLLLLLLLLLLLLLLLLLLLLLLLL.
dLLLLLLLLLLLLLLLLLLLLLLL 'LL_ dLLLLLLLLLLLLLLLLLLLLLLLLLLi
,LLLLLLLLLLLLLLLLLLLLLLLLLi ~--__LLLLLLLLLLLLLLLLLLLLLLLLLLLLs
'LLLLLLLLLLLLLLLLLLLLLLLLLLs. LLLLLLLLLLLLLLLLLLLLLLLLLLLLL~
'LLLLLLLLLLLLLLLLLLLLLLLLLL_. LLLLLLLLLLLLLLLLLLLLLLLLf
'LLLLLLLLLLLLLLLLLLLLLLLLLLm_ 'LLLLLLLLLLLLLLLLLLLLLLf`
'LLLLLLLLLLLLLLLLLLLLLLLLLLm_ 'LLLLLLLLLLLLLLLLLLf`
LLLLLLLLLLLLLLLLLLLLLL 'LL LLLLLLLLLLLLLLLLL
'LLLLLLLLLLLLLLLLLLL L LLLLLLLLLLLLLLL~
_LLLLLLLLLLLLLLL !i ] ,LLLLLLLLLLLLLLLs.
gLLLLLLLLLLLLLLLLL! 's [ _mLLLLLLLLLLLLLLLLLLLs
gmLLLLLLLLLLLLLLLLLLL ~eLLLLLLLLLLLLLLLLLLLLLms
_gLLLLLLLLLLLLLLLLLLLLLL. 'LLLLLLLLLLLLLLLLLLLLLLLs_
_gLLLLLLLLLLLLLLLLLLLLLLLLLL_ !LLLLLLLLLLLLLLLLLLLLLLLLs.
,gLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLm_ YLLLLLLLLLLLLLLLLLLLLLLLLLms
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLs ]LLLLLLLLLLLLLLLLLLLLLLLLLL`
'LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL 'YL ]LLLLLLLLLLLLLLLLLLLLLLLLf
'LLLLLLLLLLLLLLLLLLLLLLLLLLLf`! f ,LLLLLLLLLLLLLLLLLLLLLLLL!
'LLLLLLLLLLLLLLLLLLLLLLLLL[ LmmLLLLLLLLLLLLLLLLLLLLLLLL`
LLLLLLLLLLLLLLLLLf LLLLi t LLLLLLL LLLLLLLLLLLLLLLLL!
'LLLLLLLLLLLLLLLLf LLLL[ '*LLLLLLL 'LLLLLLLLLLLLL[
!LLLLLLLLLLLLf` LLLLLs 'YLLLLL ~LLLLLLLLLL
LLLLLLf~ LLLLLLLs LLLLL ~LLLLLL`
'LLL~ LLLLLLLLLm iLLLLL ~LLL~
~` LLLLLLLL[LLmLLLLLL '`
LLLLLL`d[ LLLLLLLL
LLLLLLdL[ LLLLLLLL
LLLLLLLLLLLLLLLLLL Juergen Jakubowski
LLLLLLLLLLLLLLLLLL
LLLLLLLLLLLLLLLLLL [email protected]
EXPLOIT BY ztrxwzy.
INSPIRED BY THE POC FROM Baptiste Contreras.
[888] Target : http://10.66.187.202:80/index.php
[888] CSRF token : 3ec54b1b32b5dc2dd8186537821b8dc1
[888] http://10.66.187.202:80/index.php is vulnerable to SQLi
[888] Database version detected : 5.5.64-MariaDB
[888] Current database : joomla
[888] Tables in database joomla
Licenza MIT Copyright (c) 2025 Jesús Caldera
Con la presente viene concessa gratuitamente l'autorizzazione a qualsiasi persona che ottenga una copia di questo software e dei relativi file di documentazione (il "Software"), a trattare il Software senza alcuna restrizione, inclusi, a titolo esemplificativo ma non esaustivo, i diritti di utilizzare, copiare, modificare, fondere, pubblicare, distribuire, concedere in sublicenza e/o vendere copie del Software, e di consentire alle persone a cui il Software è fornito di fare altrettanto, alle seguenti condizioni:
L'avviso di copyright sopra riportato e il presente avviso di autorizzazione devono essere inclusi in tutte le copie o parti sostanziali del Software.
IL SOFTWARE È FORNITO "COSÌ COM'È", SENZA GARANZIA DI ALCUN TIPO, ESPRESSA O IMPLICITA, INCLUSI, SENZA LIMITAZIONE, LE GARANZIE DI COMMERCIABILITÀ, IDONEITÀ PER UNO SCOPO PARTICOLARE E NON VIOLAZIONE. IN NESSUN CASO GLI AUTORI O I TITOLARI DEL COPYRIGHT SARANNO RESPONSABILI PER QUALSIASI RECLAMO, DANNO O ALTRA RESPONSABILITÀ, SIA IN UN'AZIONE CONTRATTUALE, EXTRACONTRATTUALE O DANNOSA, DERIVANTE DA, O IN CONNESSIONE CON, IL SOFTWARE O L'USO O ALTRE OPERAZIONI CON IL SOFTWARE.