Пірнаючи в AD: частина перша

Починаючи з 2022 Offsec додали AD як обов’язкову секцію в OSCP, та і в реальному світі майже кожна велика компанія використовує AD. Тому я змушений занурити свою голову в це відро від Microsoft. Без лишньої абстракції - Active directory складається з централізованої бази даних на домен контролері і компах, які весь час просять базу даних скинути їм нові апдейти. І скидає вона їм все, що можна налаштувати. Заставки, файли, політики паролів і заборони на програми. Домен контролер - контролює все що відбувається на компі, на всіх компах які в цьому домені, що і робить акаунт Domain Administrator - універсальним ключем і високопріоритетною ціллю для хакера. І більшість функціоналу, як зрозуміло, вимагає від нас логіну і паролю до акаунту в домені. Банальний приклад - використовуючи креди, ти шлеш Ldap запит, щоб отримати список всіх користувачів. Але є речі які працюють і анонімно. Одне з поширених - анонімні SMB шари, доступ до яких дозволений всім. На умовному HTB там, зазвичай, кладуть якісь файли з паролями чи щось в цьому дусі. В реальному світі, там можна знайти документи з чутливими данними. Деякі конфіругації також дозволяють анонімні Ldap запити. Не всі звісно, але все ж. І це дозволяє нам з акаунтом Gues виконати Sid Lookup. В системах Windows кожен користувач має SID - унікальний код для ідентифікації. Типово він виглядає отак :S-1-5-21-3623811015-3361044348-30300820-1013, він скалається з мета інфи (S-1-5), коду домену (21-3623811015-3361044348-30300820) і ідентифікатора користувача (1013). Якщо все ж ми маємо доступ до анонімних запитів - ми запитуємо Domain SID, а далі підставляємо числа від 1 до 1000 і просимо домен контролер дати нам інфу, що за користувач за цим SID. Існує автоматизована тулза в Impacket пакеті, яка робить цей брутфорс:

impacket-lookupsid -target-ip 10.10.10.149  guest:@10.10.10.149

У відповідь отримуємо цілий словник користувачів які є в домені. Завжди можна використовувати словники з інету, але погодься, коли словник точно підійде - приємніше. І от, озброєні словником користувачів можемо спробувати забрутфорсити їх паролі(рідко працює), а ще AS-REP Roasting. Тут треба почати трохи здалеку. В версіях віндовс після 2010 почали використовувати Kerberos - спеціальний протокол автентифікації, який прийшов на заміну старим технлогіям. Багато в нього є приколів. І основна концепція - тікети - спеціальні структури даних зашифровані і підписані. Ticket Granting Ticket - спеціальний вид квитка, який видається на вході в домен, і має частину зашифровану хешем krbtgt і Session key зашифрований хешем паролю користувача, щоб тільки користувач міг ним користуватися і керберос на домен контролері (KDC). Далі користувач шле цей тікет керберосу щоразу коли хоче отримати доступ до якогось сервісу, наприклад веб чи sql. Існує тулза kerbrute яка шле запити на TGT і намагається за відповідями зрозуміти чи існує корисувач в домені. Ось синтакс:

kerbrute userenum --dc <domain controller>  -d <domain name>  <usernames file>

Але поки зосередимося на TGT. Щоб надіслати запит на нього - треба надіслати креди. Але існує спеціальний параметр в користувача DONT_REQUIRE_PREAUTH. Що дозволяє запитувати TGT знаючи тільки ім’я. Ти можеш запитати, а нах*я взагалі такий функціонал? Ну Microsoft вважає що раз тікет зашифрований хешем krbtgt і хешем користувача, то можна давати - всеодно не розшифрують. Мем в тому, що розшифрують) І от діставши словник - ідемо по всім користувачам і перевіряємо, раптом в когось вимкнений Pre Auth і він люб’язно віддасть нам тікет. Для цього Impacket теж має тулзу impacket-GetNPUsers. Ось синтакс:

impacket-GetNPUsers domain.loc/ -dc-ip 10.211.12.10 -usersfile users.txt -format hashcat -outputfile hashes.txt -no-pass

Це видасть нам всі тікети, які були доступні. Але ж ми не можемо їх використати. Блінб, сраний майкрософт обійшов мене((9(. Але раз ми знаємо чим і як він зашифрований, чому не спробувати розшифрувати? Беремо rockyou.txt (для HTB достатньо його). Хешуємо паролі звідти один за одним і тоді пробуємо дешифрувати Session key цим хешем, аж поки не отримаємо щось хоч трохи зрозуміле. Автоматизовано цим займається John The Ripper та Hashcat:

john hashes.txt --wordlist=/usr/share/wordlists/rockyou.txt

або

 hashcat -m 18200 hashes.txt -w /usr/share/wordlists/rockyou.txt

І от якщо щось підійде - ми отримаємо пароль користувача, кайф же)? Також існує N-на кількість багів у всіляких службах, типу LLMNR, PrintSpooler і MS-EFSRPC, основна суть яких зводиться до того щоб змусити віндовс машину залогінитися на нашу SMB шару зі своїми кредами, але це вже наступного разу. За підсумками сьогодні - ми пройшлися по найбільш популярним і простим атакам на AD якщо ми починаємо з голою жопою без будь яких кредів. А зараз - пора спати.