Пірнаючи в AD: частина друга От, розібралися ми з TGT(дивитись першу частину) і навіть освоїли AS-REP roasting. Далі за логікою речей іде Kerberoasting, певне найвідоміша атака на AD. Але трохи бекграунду. Active directory не має окремих акаунтів для сервісів, по факту, це такі ж акаунти як і користувацькі, з правами, атрибутами і тд. Тобто коли адмін хоче створити умовний сервіс MSSQL - він створює користувача mssqlservice. Головною відмінністю є те, що такі акаунти мають атрибут SPN(Service principle name). Формат наступний: SERVICECLASS/hostname[:port][/servicename]. Як приклад - MSSQLSvc/db01.corp.local:1433. І от коли ми хочемо отримати TGS(Ticket Granting Service) - ми просимо керберос дати нам сервіс саме за SPN, у відповідь на що керберос пройдеться по всіх акаунтах, гляне в кого є такий SPN і віддасть нам тікет, який теж складається з двох частин - тіла тікета, підписаного паролем сервісу і session key, підписаного паролем користувача. І як ми вже знаємо з AS-REP roasting-у - ми можемо підібрати пароль сервісу по словнику. В цьому випадку ламати треба вже тіло тікета. Знову ж таки, impacket має утиліту і для цього - impacket-GetUserSPNs. Синтакс ось:

impacket-GetUserSPNs domain.local/user:password -dc-ip 10.0.0.1 -request

І от на руках в нас буде список хешів, які тоді вже ламаємо John-ом чи hashcat-ом.

john hash --wordlist=/usr/share/wordlists/rockyou.txt
hashcat -m 13100 hash /usr/share/wordlists/rockyou.txt

І от ми вже маємо сервісний акаунт з паролем. Але можна піти далі. Популярним вектором у всяких СTF є привілей WriteProperty (servicePrincipalName) або ж GenericWrite. І дають нам ці права можливість записати SPN для користувача. Можеш спитати “І що з цього?”. А суть в тому, що керберосу абсолютно всеодно чи існує сервіс, чи існує хост, він просто дивиться чи є SPN. Бачиш куди я веду? Ми пишемо користувачу SPN, а потім просимо керберос дати нам тікет до сервісу цього користувача. І він дає нам тікет, бо знаходить SPN. А далі лірика - ламаємо і дістаємо пароль. І для цього теж є тулза) targetedKerberoast. Ось приклад використання:

python3 targetedKerberoast.py -d domain.local -u user1 -p complexpassword -v 

image Таким чином ми можемо отримати пароль користувача просто використовуючи права на запис SPN. Дякую за читання, зустрінемося на просторах мережі)