
Эксплуатирует SQL-инъекцию в Zabbix (CVE-2024-42327) для извлечения сессии администратора и выполнения команд через API, получая обратную оболочку.
_______ ________ ___ ____ ___ __ __ __ __ ___ ________ _____
/ ____/ | / / ____/ |__ \ / __ \__ \/ // / / // /|__ \|__ /__ \/__ /
/ / | | / / __/________/ // / / /_/ / // /_______/ // /___/ / /_ <__/ / / /
/ /___ | |/ / /__/_____/ __// /_/ / __/__ __/_____/__ __/ __/___/ / __/ / /
\____/ |___/_____/ /____/\____/____/ /_/ /_/ /____/____/____/ /_/
NSFOCUS CERT обнаружила, что Zabbix выпустила уведомление о безопасности и исправила уязвимость SQL-инъекции (CVE-2024-42327) в сервере Zabbix. Из-за уязвимости SQLi в классе CUser в функции addRelatedObjects злоумышленники с правами обычного пользователя или доступом к API могут вызывать функцию CUser.get. Это может привести к несанкционированному доступу к конфиденциальной информации или выполнению произвольных SQL-запросов. Оценка CVSS составляет 9.9.
Данный PoC эксплуатирует эту уязвимость SQL-инъекции. Для подхода с временной SQL-инъекцией нам необходимо извлечь таблицу sessions из базы данных, чтобы определить, выполнен ли вход пользователя Admin. Этот скрипт предоставляет многопоточный скрипт для ускорения извлечения сессии администратора для дальнейшей эксплуатации. С помощью API-токена пользователя Admin мы создаём элемент (item), а затем можем его запустить. После этого мы получаем обратную оболочку (reverse shell), отправляя полезную нагрузку.
Если кратко, этот инструмент извлекает идентификатор сессии администратора (admin_session) с помощью временной SQL-инъекции через Zabbix API, а затем отправляет команду обратной оболочки на целевую систему, используя этот идентификатор. Сначала скрипт получает учётные данные пользователя, отправляет запрос аутентификации в Zabbix API и получает auth_token. Затем он извлекает идентификатор admin_session с помощью SQL-инъекции. Извлечённый идентификатор admin_session используется для получения идентификаторов хоста и интерфейса с помощью запроса host.get к Zabbix API. Наконец, отправляется запрос item.create, содержащий команду обратной оболочки, с полученными идентификаторами хоста и интерфейса. Таким образом, на целевом сервере открывается обратная оболочка и устанавливается соединение.
