
Sfrutta l'iniezione SQL di Zabbix (CVE-2024-42327) per estrarre la sessione admin ed eseguire comandi tramite API, ottenendo una reverse shell.
_______ ________ ___ ____ ___ __ __ __ __ ___ ________ _____
/ ____/ | / / ____/ |__ \ / __ \__ \/ // / / // /|__ \|__ /__ \/__ /
/ / | | / / __/________/ // / / /_/ / // /_______/ // /___/ / /_ <__/ / / /
/ /___ | |/ / /__/_____/ __// /_/ / __/__ __/_____/__ __/ __/___/ / __/ / /
\____/ |___/_____/ /____/\____/____/ /_/ /_/ /____/____/____/ /_/
NSFOCUS CERT ha rilevato che Zabbix ha pubblicato un avviso di sicurezza e ha corretto la vulnerabilità di SQL injection (CVE-2024-42327) del server Zabbix. A causa della vulnerabilità SQLi nella classe CUser nella funzione addRelatedObjects, gli attaccanti con permessi utente predefiniti o accesso API possono chiamare la funzione CUser.get. Ciò potrebbe portare ad accesso non autorizzato a informazioni sensibili o all'esecuzione di istruzioni SQL arbitrarie. Il punteggio CVSS è 9.9.
Questo PoC sfrutta questa vulnerabilità di SQL injection; per l'approccio di SQL injection basato sul tempo, dobbiamo estrarre la tabella sessions dal database per determinare se l'utente Admin è connesso. Questo script fornisce uno script multi-thread per accelerare l'estrazione della sessione admin per ulteriori sfruttamenti. Con il token API dell'utente admin, procediamo a creare un item e poi possiamo attivarlo. Otteniamo quindi una reverse shell inviando un payload.
In sintesi, questo strumento estrae l'ID di sessione admin (admin_session) con SQL injection basata sul tempo utilizzando l'API Zabbix e poi invia un comando di reverse shell al sistema di destinazione utilizzando questo ID. Innanzitutto, lo script riceve le credenziali dell'utente, invia una richiesta di autenticazione all'API Zabbix e riceve auth_token. Quindi, estrae l'ID admin_session utilizzando SQL injection. L'ID admin_session estratto viene utilizzato per recuperare gli ID host e interface con la richiesta host.get all'API Zabbix. Infine, una richiesta item.create contenente il comando di reverse shell viene inviata con gli ID host e interface ottenuti. In questo modo, viene aperta una reverse shell sul server di destinazione e viene stabilita una connessione.
