Эксплуатация уязвимости Zabbix

Эксплуатация уязвимости Zabbix

Сегодня рассмотрим прохождение еще одной уязвимой машины средней сложности, с площадки HTB (Hack The Box), которая называется Shibboleth. Мы будем зах­ватывать кон­трол­лер управле­ния пла­тами (BMC), который работает по про­токо­лу IPMI. Для это­го будем эксплуатировать уязвимость в Zabbix, а потом повысим при­виле­гии с помощью уяз­вимос­ти в MySQL.

Еще по теме: Эксплуатация уязвимости PrintNightmare

Лучше подключаться к машине HTB с помощью VPN. И желательно не делать это со своего личного компа, на котором хранится  чувствительная информация.

Разведка

Для начала до­бав­им IP-адрес машины в /etc/hosts:

Начнем со сканирования портов. Это стан­дар­тная операция при любом пентесте. Сканирование портов позволит определить, какие служ­бы на машине при­нима­ют соеди­нение.

Для этого отлично подходит популярный сканер Nmap. Следующий скрипт улучшит резуль­таты сканирования:

Он дей­ству­ет в два эта­па. Пер­вый про­изво­дит­ просто быс­трое ска­ниро­вание, вто­рой — глубокое ска­ниро­вание, используя име­ющиеся скрип­ты (опция A).

Эксплуатация уязвимости Zabbix

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

Hack The Box Shibboleth

Изучение сайта не принесло пользы, поэто­му перейдем к перебо­ру адре­сов в надежде найти скрытые ресур­сы.

Сканирование веба c ffuf

Начинать тестирование безопас­ности веб‑при­ложе­ния следует с перебо­ра катало­гов. Это позволит най­ти скры­тую информа­цию и недос­тупные обыч­ным посети­телям фун­кции. Для это­го отлично подойдут прог­раммы типа ffuf, dirsearch и DIRB.

Сегодня будем использовать ffuf. Во время запуска следует указать парамет­ры:

  • -u — URL (адрес).
  • -t — количес­тво активных потоков.
  • -w — сло­варь (можно использовать словарь SecLists).
  • -fc — убрать из резуль­тата отве­ты с кодом 403.

Запуск ffuf:

Ска­ниро­вание катало­гов с ffuf

Нашелся файл changelog.txt, который указывает на чем работа­ет сайт.

Со­дер­жимое changelog.txt
Со­дер­жимое changelog.txt

Иногда стоит кроме катало­гов также переб­рать вир­туаль­ные хос­ты (под­домены). Для этого можно заюзать тот же ffuf и переби­рать HTTP-заголо­вок Host (параметр -H). Можно отфильтровывать результат (параметр -fl), так как ответ на все зап­росы вклю­чает десять строк:

Ска­ниро­вания под­доменов с ffuf
Ска­ниро­вания под­доменов с ffuf

Нашлись три домена, которые ведут на один и тот же сайт. Добавляем их в файл /etc/hosts и пробуем открыть какой-нибудь. Нас встречает панель авто­риза­ции Zabbix.

Авто­риза­ции Zabbix
Авто­риза­ции Zabbix

Так как ид­ти даль­ше некуда, попробуем ска­ниро­вание UDP-пор­тов. Это долгий процесс, но может принести много пользы в прохождении Shibboleth Hack The Box.

Ре­зуль­тат ска­ниро­вания UDP-пор­тов
Ска­ниро­вание UDP-пор­тов

Пор­т UDP 623 используется служ­бой IPMI. А этот про­токо­л используется для общения кон­трол­леров управле­ния пла­тами.

Точка входа

По­хоже, мы име­ем дело с кон­трол­лером управле­ния пла­той, BMCS. Это что‑то вро­де мини‑компь­юте­ра, который исполь­зует­ся для монито­рин­га нас­толь­ных компь­юте­ров и сер­веров. BMCS час­то реали­зова­ны как встра­иваемые сис­темы ARM, работа­ющие под управле­нием Linux и под­клю­чен­ные непос­редс­твен­но к материн­ской пла­те основной сис­темы.

Дос­туп к сети обес­печива­ется либо через основную сетевую кар­ту, либо через спе­циаль­ный интерфейс. Поч­ти все сер­веры и рабочие стан­ции пос­тавля­ются с той или иной фор­мой BMC.

Ин­теллек­туаль­ный интерфейс управле­ния плат­формой (IPMI) — это набор спе­цифи­каций, опре­деля­ющих про­токо­лы свя­зи для обме­на дан­ными как по локаль­ной шине, так и по сети. Через IPMI мож­но уда­лен­но под­клю­чить­ся к сер­веру и управлять его работой:

  • мо­нито­рить сос­тояние обо­рудо­вания, нап­ример про­верять тем­перату­ру отдель­ных сос­тавля­ющих сис­темы, уро­вень нап­ряжения, ско­рость вра­щения вен­тилято­ров;
  • вос­ста­нав­ливать работос­пособ­ность сер­вера в авто­мати­чес­ком или руч­ном режиме (уда­лен­ная перезаг­рузка сис­темы, вклю­чение и вык­лючение питания, заг­рузка ISO-обра­зов и обновле­ние прог­рам­мно­го обес­печения);
  • уп­равлять перифе­рий­ными устрой­ства­ми;
  • вес­ти жур­нал событий;
  • хра­нить информа­цию об исполь­зуемом обо­рудо­вании.

Пер­вым делом получим базовую информа­цию, такую как номер вер­сии (1.5 или 2.0). В этом нам может помочь модуль ipmi_version из Metasploit Framework.

Нас­трой­ки ipmi_version
Нас­трой­ки ipmi_version

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

По­луче­ние вер­сии IPMI
По­луче­ние вер­сии IPMI

У нас вер­сия 2.0. В ней есть уяз­вимость обхо­да аутен­тифика­ции. При исполь­зовании шиф­ра типа 0 (кли­ент хочет исполь­зовать аутен­тифика­цию откры­тым тек­стом) дос­туп мож­но получить прак­тичес­ки с любым паролем. Про­верим, уяз­вим ли хост, с помощью модуля ipmi_cipher_zero, которо­му так­же нуж­но ука­зать адрес хос­та.

Про­вер­ка типа аутен­тифика­ции

Ба­зовую информа­цию узна­ли, для даль­нейшей работы нам пот­ребу­ется ути­лита ipmitool, уста­новить которую мож­но пря­мо из репози­тория.

А теперь зап­росим спи­сок поль­зовате­лей (user list). Для аутен­тифика­ции исполь­зуем дефол­тное имя поль­зовате­ля Administrator.

Спи­сок поль­зовате­лей
Спи­сок поль­зовате­лей

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

Нас­трой­ки ipmi_dumphashes
Нас­трой­ки ipmi_dumphashes

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

По­лучен­ный хеш адми­нис­тра­тора
По­лучен­ный хеш адми­нис­тра­тора

С помощью зна­мени­того hashcat мож­но не толь­ко быс­тро ломать хеши и соз­давать пра­вила или спис­ки паролей, но и опре­делять тип хеша.

По­луче­ние алго­рит­ма хеширо­вания
По­луче­ние алго­рит­ма хеширо­вания

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

Взлом най­ден­ного IPMI2 SHA1-хеша
Взлом най­ден­ного IPMI2 SHA1-хеша

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

Глав­ная панель Zabbix
Глав­ная панель Zabbix

Точка опоры и продвижение

Че­рез панель Zabbix мож­но выпол­нить код и получить реверс‑шелл. Для это­го перей­дем к меню Configuration —> Host —> Items и выберем Add Item.

Ме­ню Host
Ме­ню Host

 

Ме­ню Items
Ме­ню Items

Те­перь следующей коман­дой откро­ем лис­тенер для при­ема соеди­нения:

Запол­няем обя­затель­ные поля, а в поле Key ука­зыва­ем реверс‑шелл.

Ме­ню Add Item
Ме­ню Add Item

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

Ус­пешно соз­данная запись
Ус­пешно соз­данная запись

 

Бэк­коннект
Бэк­коннект

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

Про­вер­ка поль­зовате­лей
Про­вер­ка поль­зовате­лей

С име­ющим­ся паролем авто­ризу­емся как ipmi-svc.

Флаг поль­зовате­ля
Флаг поль­зовате­ля

Локальное повышение привилегий

Один из спо­собов повысить при­виле­гии — най­ти учет­ные дан­ные. В дан­ном слу­чае есть шанс получить их из Zabbix. Пос­коль­ку он под­клю­чает­ся к базе дан­ных, парамет­ры это­го под­клю­чения дол­жны где‑то содер­жать­ся. В слу­чае с Zabbix они находят­ся в кон­фиге:

Со­дер­жимое фай­ла zabbix_server.conf
Со­дер­жимое фай­ла zabbix_server.conf

Этот пароль к поль­зовате­лю root не подошел, зато поз­волит авто­ризо­вать­ся в MySQL.

Под­клю­чение к MySQL
Под­клю­чение к MySQL

При под­клю­чении мы узна­ем вер­сию MySQL, поэто­му можем поис­кать готовые экс­пло­иты.

Поиск готовых эксплоитов

При пен­тесте луч­ше все­го искать экс­пло­иты в Google, пос­коль­ку этот поис­ковик заг­лядыва­ет и в лич­ные бло­ги, и в самые раз­ные отче­ты. Уско­рят дело спе­циали­зиро­ван­ные сайты для поиска уязвимостей вро­де Exploit-DB — там час­то мож­но обна­ружить под­ходящие вари­анты.

Если вы работа­ете в спе­циали­зиро­ван­ной ОС вро­де Kali Linux, то эта база у вас уже есть и для поис­ка мож­но исполь­зовать ути­литу searchsploit.

По­иск экс­пло­ита для 10.3.25-MariaDB

По­иск экс­пло­ита для 10.3.25-MariaDBНа­ходим баг CVE-2021-27928. Экс­плу­ата­ция этой уяз­вимос­ти при­водит к уда­лен­ному выпол­нению кода: мы можем уста­новить зна­чение wsrep_provider (сис­темная перемен­ная MySQL, ука­зыва­ющая рас­положе­ние биб­лиоте­ки wsrep).

Управле­ние путем к биб­лиоте­ке, которая будет заг­ружена в MySQL, дает нам воз­можность помес­тить в нее вре­донос­ный код, который запус­тится в при­виле­гиро­ван­ном кон­тек­сте.

Та­кая биб­лиоте­ка дол­жна быть фай­лом .so, сге­нери­ровать который нам поможет MSFVenom, вхо­дящий в сос­тав Metasploit Framework. Фор­мат фай­ла ука­зыва­ем в парамет­ре -f, а в качес­тве наг­рузки исполь­зуем обыч­ный реверс‑шелл (параметр -p).

Ге­нери­рова­ние фай­ла .so
Ге­нери­рова­ние фай­ла .so

Заг­ружа­ем на уда­лен­ный хост сге­нери­рован­ную биб­лиоте­ку и откры­ваем на локаль­ном хос­те лис­тенер:

А теперь экс­плу­ати­руем уяз­вимость, прос­то уста­новив зна­чение перемен­ной wsrep_provider.

Ус­танов­ка wsrep_provider
Ус­танов­ка wsrep_provider

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

Флаг рута
Флаг рута

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

Заключение

Теперь вы знаете, как эксплуатировать уязвимость в Zabbix и MySQL, а также научились другим интересным вещам, которые пригодятся в этичном хакинге.

Еще по теме: Эксплуатация уязвимости Log4j

ВКонтакте
OK
Telegram
WhatsApp
Viber

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *