Хакер - HTB Ambassador. Повышаем привилегии через Consul

Хакер - HTB Ambassador. Повышаем привилегии через Consul

hacker_frei

https://t.me/hacker_frei

RalfHacker

Содержание статьи

  • Разведка
  • Сканирование портов
  • Точка входа
  • Точка опоры
  • Продвижение
  • Локальное повышение привилегий

В этом рай­тапе я покажу, как читать фай­лы из Grafana, затем мы порабо­таем с базой дан­ных для получе­ния дос­тупа к хос­ту и повысим при­виле­гии через Consul.

Уп­ражнять­ся будем на учеб­ной машине Ambassador с пло­щад­ки Hack The Box. Уро­вень слож­ности — сред­ний.

WARNING

Под­клю­чать­ся к машинам с HTB рекомен­дует­ся толь­ко через VPN. Не делай это­го с компь­юте­ров, где есть важ­ные для тебя дан­ные, так как ты ока­жешь­ся в общей сети с дру­гими учас­тни­ками.

РАЗВЕДКА

Сканирование портов

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

10.10.11.183 ambassador.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).

Ре­зуль­тат работы скрип­та

Ска­ниро­вание показа­ло нес­коль­ко откры­тых пор­тов:

  • 22 — служ­ба OpenSSH 8.2p1;
  • 80 — веб‑сер­вер Apache 2.4.41;
  • 3000 — не опре­делен­ный веб‑сер­вер;
  • 3306 — служ­ба MySQL 8.0.30.

Пер­вым делом пос­мотрим на сай­ты.

Глав­ная стра­ница http://ambassador.htb/

В пер­вом же пос­те находим информа­цию о том, как под­клю­чать­ся к сер­веру по SSH, и получа­ем имя поль­зовате­ля — developer. Так­же узна­ем, что можем где‑то най­ти пароль.

Ин­форма­ция про сер­вер раз­работ­ки

На вто­ром сай­те нас встре­чает фор­ма авто­риза­ции Grafana.

Глав­ная стра­ница http://ambassador.htb:3000/

ТОЧКА ВХОДА

Grafana — сис­тема визу­али­зации дан­ных, ори­енти­рован­ная на сис­темы ИТ‑монито­рин­га. Поль­зовате­лю пре­дос­тавля­ются диаг­раммы, гра­фики и таб­лицы с раз­ными показа­теля­ми. На стра­нице авто­риза­ции мы можем уви­деть вер­сию плат­формы — 8.2.0.

Пер­вым делом сто­ит про­верить, есть ли для обна­ружен­ной вер­сии готовые экс­пло­иты. Искать нуж­но в базах вро­де HackerOne и exploit-db, а так­же сто­ит заг­лянуть на GitHub. Так, по зап­росу «grafana v8.2.0 (d7f71e9eae) exploit» мы сра­зу узна­ем, что в этой вер­сии есть уяз­вимость с иден­тифика­тором CVE.

По­иск экс­пло­итов с помощью Google

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

Даль­нейший поиск на GitHub при­водит нас к ра­боче­му экс­пло­иту, которо­му в качес­тве парамет­ра нуж­но передать толь­ко URL сис­темы монито­рин­га.

Справ­ка по экс­пло­иту

В качес­тве тес­та про­буем про­читать файл /etc/passwd.

Со­дер­жимое фай­ла /etc/passwd

Сре­ди поль­зовате­лей обна­ружим отме­чен­ного ранее поль­зовате­ля developer

ТОЧКА ОПОРЫ

Пер­вым делом сра­зу попыта­емся про­читать при­ват­ный SSH-ключ /home/developer/.ssh/id_rsa.

Чте­ние фай­ла id_rsa

Та­кого фай­ла не сущес­тву­ет, поэто­му нуж­но поис­кать дру­гие вари­анты. К при­меру, файл кон­фигура­ций Grafana /etc/grafana/grafana.ini, который дол­жен содер­жать учет­ные дан­ные адми­нис­тра­тора.

Со­дер­жимое фай­ла grafana.ini

С получен­ными учет­ными дан­ными мы лег­ко авто­ризу­емся через веб‑интерфейс.

Па­нель адми­нис­тра­тора Grafana

ПРОДВИЖЕНИЕ

Прод­вига­ясь даль­ше, получим файл базы дан­ных grafana.

curl --path-as-is http://ambassador.htb:3000/public/plugins/alertlist/../../../../../../../../var/lib/grafana/grafana.db -o grafana.db

Я прос­матри­ваю такие фай­лы в DB Browser. Там находим таб­лицу data_source, из стол­бца password которой получа­ем пароль для под­клю­чения к базе дан­ных grafana.

Дан­ные в фай­ле grafana.db

Раз­деление дос­тупа к раз­ным базам дан­ных в СУБД может быть не нас­тро­ено, и мож­но будет получить дан­ные из дру­гих баз, а не толь­ко из grafana. Под­клю­чаем­ся и прос­матри­ваем сущес­тву­ющие базы дан­ных.

mysql -h ambassador.htb -u grafana -p'dontStandSoCloseToMe63221!'

show databases;

Ба­зы дан­ных

Ви­дим базу дан­ных whackywidget, которая не явля­ется слу­жеб­ной. Выбира­ем ее для работы и получа­ем спи­сок таб­лиц.

use whackywidget;

show tables;

Таб­лицы в базе дан­ных whackywidget

Таб­лица здесь все­го одна, при­чем очень инте­рес­ная. Зап­росим ее содер­жимое.

select * from users;

Со­дер­жимое таб­лицы users

По­луча­ем закоди­рован­ный в Base64 пароль локаль­ного поль­зовате­ля developer.

echo YW5FbmdsaXNoTWFuSW5OZXdZb3JrMDI3NDY4Cg== | base64 -d

Де­коди­рова­ние пароля из базы

С получен­ным паролем авто­ризу­емся по SSH и забира­ем пер­вый флаг.

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

ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ

По­лучив дос­туп к хос­ту, мы пер­вым делом дол­жны соб­рать информа­цию. Я, как обыч­но, вос­поль­зуюсь набором скрип­тов PEASS.

Справка: скрипты PEASS

Что делать пос­ле того, как мы получи­ли дос­туп в сис­тему от име­ни поль­зовате­ля? Вари­антов даль­нейшей экс­плу­ата­ции и повыше­ния при­виле­гий может быть очень мно­го, как в Linux, так и в Windows. Что­бы соб­рать информа­цию и наметить цели, мож­но исполь­зовать Privilege Escalation Awesome Scripts SUITE (PEASS) — набор скрип­тов, которые про­веря­ют сис­тему на авто­мате.

Заг­рузим скрипт для Linux на уда­лен­ный хост, дадим пра­во на выпол­нение и запус­тим. Теперь сле­дует отоб­рать важ­ную информа­цию, которую под­све­тит скрипт.

Во‑пер­вых, в катало­ге /opt есть два про­екта, один из которых называ­ется consul.

Со­дер­жимое катало­га consul

На хос­те для локаль­ного адре­са открыт порт 8500, что типич­но для Consul.

Спи­сок откры­тых пор­тов

HashiCorp Consul — это опен­сор­сный инс­тру­мент, который облегча­ет раз­работ­чикам орга­низа­цию вза­имо­дей­ствия меж­ду сер­висами, управле­ние кон­фигура­цией и сег­мента­цию сети. Consul уме­ет находить сер­висы и про­верять их работос­пособ­ность, балан­сировать наг­рузку и показы­вать наг­лядные гра­фики. Так­же у него есть воз­можность хра­нить клю­чи авто­риза­ции.

Нам нуж­но най­ти, где в сис­теме исполь­зует­ся Consul. Для это­го ана­лизи­руем обна­ружен­ный про­ект в катало­ге /opt/.

Со­дер­жимое катало­га /opt

Это репози­торий Git, поэто­му мы можем пос­мотреть исто­рию изме­нений, выпол­нив коман­ду git show внут­ри катало­га.

Ис­тория изме­нений кода в про­екте

И наконец, находим коман­ду consul, которая при­меня­ется для экспор­та пароля MySQL. Здесь нуж­но обра­тить вни­мание на то, что мы наш­ли токен и теперь смо­жем работать с Consul API. Опи­раясь на пуб­ликацию в бло­ге Wallarm, мы можем получить выпол­нение кода с помощью Consul API в кон­тек­сте работы служ­бы. А так как Consul работа­ет от име­ни рута, это повыше­ние при­виле­гий в сис­теме.

Для экс­плу­ата­ции нам нуж­но исполь­зовать API /agent/check/register со сле­дующи­ми парамет­рами.

{

"ID": "ralf",

"Name": "ralf",

"Address": "127.0.0.1",

"Port": 80,

"check": {

"Args": ["/bin/bash", "/tmp/lpe.sh"],

"interval": "10s",

"timeout": "1s"

}

}

Та­ким обра­зом мы запус­тим скрипт /tmp/lpe.sh в Bash. Внут­ри скрип­та прос­то прис­воим S-бит фай­лу коман­дной обо­лоч­ки: chmod u+s /usr/bin/bash. Выпол­няем зап­рос к API с помощью curl:

curl --header "X-Consul-Token: bb03b43b-1a81-d62b-24b5-39540ee469b5" --request PUT -d '{"ID": "ralf", "Name": "ralf", "Address": "127.0.0.1", "Port": 80, "check": {"Args": ["/bin/bash", "/tmp/lpe.sh"], "interval": "10s", "timeout": "1s"}}' http://127.0.0.1:8500/v1/agent/service/register

За­тем про­верим файл /bin/bash и уви­дим пос­тавлен­ный нами S-бит.

Пра­ва фай­ла /bin/bash

Справка: бит SUID

Ког­да у фай­ла уста­нов­лен атри­бут setuid (S-атри­бут), обыч­ный поль­зователь, запус­кающий этот файл, получа­ет повыше­ние прав до поль­зовате­ля — вла­дель­ца фай­ла в рам­ках запущен­ного про­цес­са. Пос­ле получе­ния повышен­ных прав при­ложе­ние может выпол­нять задачи, которые недос­тупны обыч­ному поль­зовате­лю. Из‑за воз­можнос­ти сос­тояния гон­ки мно­гие опе­раци­онные сис­темы игно­риру­ют S-атри­бут, уста­нов­ленный shell-скрип­там.

За­пус­тив /bin/bash -p, мы получим при­виле­гиро­ван­ный шелл.

Флаг рута

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

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



Report Page