Resource-based Constrained Delegation
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Це схоже на базову обмежену делегацію, але замість надання дозволів об'єкту на виконання дій від імені будь-якого користувача проти служби. Ресурсно-орієнтована обмежена делегація встановлює в об'єкті, хто може виконувати дії від імені будь-якого користувача проти нього.
У цьому випадку обмежений об'єкт матиме атрибут msDS-AllowedToActOnBehalfOfOtherIdentity з ім'ям користувача, який може виконувати дії від імені будь-якого іншого користувача проти нього.
Ще одна важлива відмінність цієї обмеженої делегації від інших делегацій полягає в тому, що будь-який користувач з права на запис над обліковим записом комп'ютера (GenericAll/GenericWrite/WriteDacl/WriteProperty/тощо) може встановити msDS-AllowedToActOnBehalfOfOtherIdentity (в інших формах делегації вам потрібні були права адміністратора домену).
У попередній обмеженій делегації говорилося, що TrustedToAuthForDelegation
прапор у значенні userAccountControl користувача потрібен для виконання S4U2Self. Але це не зовсім правда.
Реальність полягає в тому, що навіть без цього значення ви можете виконати S4U2Self проти будь-якого користувача, якщо ви є службою (маєте SPN), але якщо ви маєте TrustedToAuthForDelegation
, повернутий TGS буде Forwardable, а якщо ви не маєте цього прапора, повернутий TGS не буде Forwardable.
Однак, якщо TGS, використаний у S4U2Proxy, НЕ Forwardable, спроба зловживання базовою обмеженою делегацією не спрацює. Але якщо ви намагаєтеся експлуатувати ресурсно-орієнтовану обмежену делегацію, це спрацює (це не вразливість, це функція, очевидно).
Якщо у вас є права на запис, еквівалентні привілеям над обліковим записом комп'ютера, ви можете отримати привілейований доступ до цього комп'ютера.
Припустимо, що зловмисник вже має права на запис, еквівалентні привілеям над комп'ютером жертви.
Зловмисник компрометує обліковий запис, який має SPN, або створює один (“Служба A”). Зверніть увагу, що будь-який адміністратор без будь-яких інших спеціальних привілеїв може створити до 10 об'єктів комп'ютера (MachineAccountQuota) і встановити їм SPN. Тож зловмисник може просто створити об'єкт комп'ютера та встановити SPN.
Зловмисник зловживає своїм правом на запис над комп'ютером жертви (Служба B), щоб налаштувати ресурсно-орієнтовану обмежену делегацію, щоб дозволити Службі A виконувати дії від імені будь-якого користувача проти цього комп'ютера жертви (Служба B).
Зловмисник використовує Rubeus для виконання повної атаки S4U (S4U2Self і S4U2Proxy) від Служби A до Служби B для користувача з привілейованим доступом до Служби B.
S4U2Self (з компрометованого/створеного облікового запису SPN): Запит на TGS адміністратора для мене (не Forwardable).
S4U2Proxy: Використовуйте не Forwardable TGS з попереднього кроку, щоб запитати TGS від адміністратора до хоста жертви.
Навіть якщо ви використовуєте не Forwardable TGS, оскільки ви експлуатуєте ресурсно-орієнтовану обмежену делегацію, це спрацює.
Зловмисник може передати квиток і виконати дії від імені користувача, щоб отримати доступ до жертви Служби B.
Щоб перевірити MachineAccountQuota домену, ви можете використовувати:
Ви можете створити об'єкт комп'ютера в домені, використовуючи powermad:
Використання модуля PowerShell activedirectory
Використання powerview
По-перше, ми створили новий об'єкт Комп'ютера з паролем 123456
, тому нам потрібен хеш цього пароля:
Це виведе хеші RC4 та AES для цього облікового запису. Тепер можна виконати атаку:
Ви можете згенерувати більше квитків, просто запитавши один раз, використовуючи параметр /altservice
Rubeus:
Зверніть увагу, що у користувачів є атрибут під назвою "Не може бути делегований". Якщо у користувача цей атрибут встановлено в True, ви не зможете його імплементувати. Цю властивість можна побачити в bloodhound.
Остання команда виконає повну атаку S4U і впровадить TGS від адміністратора до жертви в пам'яті. У цьому прикладі було запитано TGS для служби CIFS від адміністратора, тому ви зможете отримати доступ до C$:
Дізнайтеся про доступні сервісні квитки тут.
KDC_ERR_ETYPE_NOTSUPP
: Це означає, що kerberos налаштовано на те, щоб не використовувати DES або RC4, а ви надаєте лише хеш RC4. Надайте Rubeus принаймні хеш AES256 (або просто надайте йому хеші rc4, aes128 і aes256). Приклад: [Rubeus.Program]::MainString("s4u /user:FAKECOMPUTER /aes256:CC648CF0F809EE1AA25C52E963AC0487E87AC32B1F71ACC5304C73BF566268DA /aes128:5FC3D06ED6E8EA2C9BB9CC301EA37AD4 /rc4:EF266C6B963C0BB683941032008AD47F /impersonateuser:Administrator /msdsspn:CIFS/M3DC.M3C.LOCAL /ptt".split())
KRB_AP_ERR_SKEW
: Це означає, що час поточного комп'ютера відрізняється від часу DC, і kerberos не працює належним чином.
preauth_failed
: Це означає, що вказане ім'я користувача + хеші не працюють для входу. Ви могли забути вставити "$" в ім'я користувача під час генерації хешів (.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local
)
KDC_ERR_BADOPTION
: Це може означати:
Користувач, якого ви намагаєтеся видати за іншого, не може отримати доступ до бажаного сервісу (тому що ви не можете видати його за іншого або тому, що у нього недостатньо привілеїв)
Запитуваний сервіс не існує (якщо ви запитуєте квиток для winrm, але winrm не працює)
Створений fakecomputer втратив свої привілеї над вразливим сервером, і вам потрібно їх повернути.
Дізнайтеся та практикуйте Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Дізнайтеся та практикуйте Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)