HTB Absolute. Атакуем Active Directory с повышением привилегий через KrbRelay

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

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

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

На­ша цель — зах­ват рута на тре­ниро­воч­ной машине Absolute с пло­щад­ки Hack The Box. Слож­ность про­хож­дения оце­нена как «безум­ная». Тем инте­рес­нее оно будет!

warning

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

 

Разведка

 

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

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

10.10.11.181 absolute.htb

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

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

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

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

#!/bin/bashports=$(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;
  • 80 (HTTP) — веб‑сер­вер Microsoft IIS/10.0;
  • 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;
  • 9389 — веб‑служ­бы AD DS.

Ни одна служ­ба не поз­волила прой­ти аутен­тифика­цию от име­ни поль­зовате­ля guest, поэто­му идем смот­реть, что нам покажет веб‑сер­вер.

Глав­ная стра­ница сай­та 

Точка входа

На сай­те ничего инте­рес­ного нет, но всег­да сто­ит изу­чать метадан­ные всех при­ложен­ных фай­лов. На сай­те нам дос­тупны толь­ко кар­тинки, берем любую из них (мне попалась под руку hero_5.jpg), ска­чива­ем и про­веря­ем метадан­ные.

exiftool hero_5.jpg

Ме­тадан­ные изоб­ражения

В поле авто­ра явно имя поль­зовате­ля! Ска­чива­ем все дос­тупные кар­тинки и извле­каем отту­да име­на. Инте­рес­но, что они все раз­ные.

exiftool hero_*.jpg | grep Author

По­лучен­ные име­на поль­зовате­лей

Так как на сер­вере активна служ­ба Kerberos, мы можем переб­рать име­на поль­зовате­лей. Kerberos име­ет три раз­ных вари­анта отве­та в слу­чае невер­ной аутен­тифика­ции:

  • учет­ные дан­ные невер­ны;
  • нет такого поль­зовате­ля;
  • пред­варитель­ная аутен­тифика­ция не тре­бует­ся.

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

names = ["James Roberts", "Michael Chaffrey", "Donald Klay", "Sarah Osvald", "Jeffer Robinson", "Nicole Smith"]list = ["Administrator", "Guest"]for name in names: n1, n2 = name.split(' ') list.append(n1) list.append(n1+n2) list.append(n1+"."+n2) list.append(n1+n2[0]) list.append(n1+"."+n2[0]) 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[0]) list.append(n2+"."+n1[0]) list.append(n1[0]+n2) list.append(n1[0]+"."+n2)for n in list: print(n)

А теперь выпол­няем перебор имен поль­зовате­лей с помощью ути­литы kerbrute.

./kerbrute_linux_amd64 userenum --dc absolute.htb -d absolute.htb test_users.txt

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

По­луча­ем спи­сок из семи сущес­тву­ющих учет­ных записей. Я уже говорил, что есть вари­ант, при котором для учет­ной записи не тре­бует­ся пред­варитель­ная аутен­тифика­ция. Давай прос­каниру­ем наших поль­зовате­лей с при­мене­нием тех­ники ASRep Roasting. Она поз­воля­ет получить поль­зователь­ский билет, из которо­го перебо­ром мож­но извлечь пароль поль­зовате­ля. Выпол­ним дан­ную ата­ку с помощью скрип­та GetNPUsers из набора impacket.

impacket-GetNPUsers absolute.htb/ -no-pass -usersfile users.txt

Ре­зуль­тат ASRep Roasting

Что­бы переб­рать хеш с помощью hashcat, нуж­но знать режим перебо­ра. Его мож­но най­ти в справ­ке hashcat.

hashcat --example | grep 'krb5asrep' -A2 -B12

Справ­ка hashcat

Те­перь ука­зыва­ем режим 18200 и переби­раем получен­ный хеш.

hashcat -a 0 -m 18200 klay_hash.krb5asrep rockyou.txt

Ре­зуль­тат взло­ма хеша

И получа­ем пароль поль­зовате­ля D.Klay.

 

Продвижение

 

Пользователь svc_smb

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

crackmapexec smb 10.10.11.181 -u D.Klay -p Darkmoonsky248girl

Ре­зуль­тат под­клю­чения к служ­бе SMB

Ни­чего не выш­ло, так как не работа­ет NTLM-аутен­тифика­ция. Поэто­му исполь­зуем аутен­тифика­цию Kerberos, для чего выписы­ваем тикет с помощью скрип­та getTGT из набора impacket. Не забыва­ем выс­тавить оди­нако­вое вре­мя на кли­енте и сер­вере. Что­бы не делать это вруч­ную, мож­но авто­мати­чес­ки син­хро­низи­ровать вре­мя с помощью net time.

sudo timedatectl set-ntp falsesudo net time set -S 10.10.11.181
impacket-getTGT 'absolute.htb/[email protected]:Darkmoonsky248girl'

По­луче­ние тикета поль­зовате­ля D.Klay

А теперь пов­торим под­клю­чение к SMB с аутен­тифика­цией Kerberos.

export [email protected]
cme smb 10.10.11.181 -u D.Klay -d absolute.htb -k --kdcHost dc.absolute.htb

Ре­зуль­тат под­клю­чения к служ­бе SMB

И сно­ва неуда­ча, хотя в отве­те видим, что эта служ­ба не про­писа­на в билете. Про­буем под­клю­чить­ся к LDAP.

cme ldap 10.10.11.181 -u D.Klay -d absolute.htb -k --kdcHost dc.absolute.htb

Ре­зуль­тат под­клю­чения к служ­бе SMB

Под­клю­чение успешное, и мы можем работать с LDAP. Пер­вым делом зап­рашива­ем всех поль­зовате­лей. Это мож­но сде­лать, ука­зав флаг --users.

cme ldap 10.10.11.181 -u D.Klay -d absolute.htb -k --kdcHost dc.absolute.htb --users

Поль­зовате­ли домена

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

impacket-getTGT 'absolute.htb/[email protected]:AbsoluteSMBService123!'export [email protected]
impacket-smbclient [email protected] -k -no-passshares

Об­щие катало­ги SMB

Мы получи­ли дос­туп к обще­му ресур­су домена.

 

Пользователь m.lovegod

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

Ответить

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