可能我们平时接触到的ACL更多的是指在路由交换里面设置的ACL列表来对相关流量的访问控制。其实在域内也有ACL,这里的ACL与与路由交换的访问控制类似但是不大一样,一个是流量基于数据包的,而域内是基于权限的访问控制。
在 Active Directory 中设置权限,其方式与在文件中设置权限的方式几乎相同
记得把高级功能点上
1、windows 访问控制模型(ACM)
windows 访问控制模型是由两部分组成。分别由访问令牌和安全描述符组成。
访问令牌包括:
包含用户的标识(User SID,Group SID),以及特权列表。
访问令牌(Access Tokens)是Windows操作系统安全性的一个概念。当用户登陆时,系统创建一个访问令牌,里面包含登录进程返回的SID和由本地安全策略分配给用户和用户的安全组的特权列表。以该用户身份运行的的所有进程都拥有该令牌的一个拷贝。系统使用令牌控制用户可以访问哪些安全对象,并控制用户执行相关系统操作的能力
安全描述符包括:
被访问的安全对象的相关安全信息
- NTFS卷上的文件和目录
- 注册表项
- 网络共享
- 服务
- 进程等等
Active Directory对象
安全描述符包含自主决定的访问控制表(DACL),里面包含有访问控制项(ACE),因此可以允许或拒绝特定用户或用户组的访问。它们还包含一个系统访问控制列表(SACL)以控制对象访问请求的日志(logging)。ACE可以显式应用于对象,或者从父对象继承。ACE的顺序在ACL中很重要,拒绝访问的ACE应该比允许访问的ACE更早出现。安全描述符还包含对象所有者。
说到这里可能大部分人还不大明白是怎么回事。但是我们可以用一段话来进行总结:
1、我们用sid来标识用户的身份属性,它在Access Token里存在。
大体流程为:当对象A来访问B的时候,A会出示自己的Access Token,包含自己的用户sid,自己所在的组的sid,以及特权列表。而B这个安全对象,有自己的ACL。- B首先判断是不是需要特权才能访问,如果需要特权,则查看A的Access Token看有没有那个特权。
- B通过A的Access Token,来判断A的用户 sid以及组sids,跟自己的ACL做比对,来判断是否让A进行访问。
2、ACL
ACL包含了两个东西,分别为DACL和SACL
权限访问控制DACL
- 一个用户能不能访问安全对象
日志记录功能SACL
- 访问成功与否
1、DACL
可以看到下面的统称DACL,起到访问控制的作用,是拒绝,还是允许。而一条一条的东西我们单个分开叫做ACE,ACE构成了DACL
针对DACL例子的话,dailker大佬给出了详细的例子,大家也可以看看。
https://daiker.gitbook.io/windows-protocol/ldap-pian/11
但是我这里总结的话,其实域内的ACL和路由交换的ACL是非常像的,总结:
1、遵循默认拒绝原则,即没匹配赛允许,也没匹配赛拒绝,那就是拒绝。
2、优先看拒绝规则,如果同时有允许和拒绝的ACE规则,那就先匹配上拒绝规则。
2、SACL
这个比较简单,就是记录日志,查看对象的访问成功或失败
ACE在DACL和SACL都存在,我们来看DACL,因为在SACL里的ACE就是一条条的日志。
3、ACE
所有的可访问对象都有三种ACE,分别是Access-denied ACE,Access-allowed ACE,System-audit ACE。
Access-denied ACE用于拒绝账户访问,Access-allowed ACE用于允许账户访问,而System-audit ACE用于 SACL
一条一条的列我们叫它ACE,可以看到ACE有五个属性:
1、类型
2、名称
3、权限
4、继承于
5、应用于
总结有无个方面
谁对你有权限——名称
是允许还是拒绝——类型
有什么权限——权限
这个权限能不能被继承——继承与
用在谁身上——应用于
在ACE中有Access Mask这个字段,它代表着此条ACE所对应的权限,比如完全控制(GenericAll)、修改密码(ResetPassword)、写入属性(WriteMembers)等等。
4、SDDL
安全描述符定义语言,定义了ConvertSecurityDescriptorToStringSecurityDescriptor和
ConvertStringSecurityDescriptorToSecurityDescriptor函数来进行文本与安全描述符之间的转换
具体字段的分析可以查看daiker大佬的文章
其实就是ACL权限控制的字符串版本
3、关于实战的利用
在域内各种各样的权限太多了,但是你想在实战情况下遇到一个配置不恰当的ACL权限控制的确是非常难,但是并不是不可能,我们大部分使用ACL来制作后门,或者通过一些配置来寻找攻击路径
特殊的权限配置
(1) 对某些属性的WriteProperty ,有以下属性
- member(bf9679c0-0de6-11d0-a285-00aa003049e2)
- servicePrincipalName(28630EBB-41D5-11D1-A9C1-0000F80367C1)
- GPC-File-Sys-Path(f30e3bc1-9ff0-11d1-b603-0000f80367c1)
(2) 扩展权限有
- User-Force-Change-Password(0299570-246d-11d0-a768-00aa006e0529)可以在不知道当前目标用户的密码的情况下更改目标用户的密码
- DS-Replication-Get-Changes(1131f6aa-9c07-11d1-f79f-00c04fc2dcd2) 和 DS-Replication-Get-Changes-All(1131f6ad-9c07-11d1-f79f-00c04fc2dcd2)对域对象具有这两个扩展权限的用户具备dcsync 权限
(3) 通用权限有
- WriteDacl
- AllExtendedRights
- WriteOwner
- GenericWrite
- GenericAll
- Full Control
具体的利用在dailker大佬的文章里写了,这里简单做个总结
1、member——addmember
可以将任意用户,组或计算机添加到目标组
2、servicePrincipalName
设置SPN,如果对一个对象有写入spn的权限,那么就可以对这个对象进行kerberosting了,如果密码强度不强的话,有机会获取到密码。
3、GPC-File-Sys-Path
可以修改组策略配置信息的内容
4、User-Force-Change-Password
可以在不知道当前目标用户的密码的情况下更改目标用户的密码
5、DS-Replication-Get-Changes
拥有可以进行Dcsync的权限,做后门很好用
6、WriteDACL
可以将新ACE写入目标对象的DACL的功能。例如,攻击者可以向目标对象DACL写入新的ACE,从而使攻击者可以完全控制”目标对象
7、AllExtendedRights
顾名思义,所有扩展权限。比如,User-Force-Change-Password权限
8、WriteOwner
这个权限这个修改Owner为自己。
9、GenericWrite、GenericAll、Full Control
拥有几乎全部权限,这个不用多说了
寻找了配置错误的ACL的用户
当域管给某个普通域用户委派了一些权限时,我们可以找到这个域用户然后直接干,如果它拥有创建、删除和管理用户账户的权限,那么域管也是可以拿下的
这里设置的委派控制本质是更改了用户权限的ACL
查看ACL,可以看到ACL已经变了
ADACLScanner
https://github.com/canix1/ADACLScanner
powershell -exec bypass -c "&{.\ADACLScan.ps1 -Base 'DC=iceice,DC=com' -output html}"
powershell .\ADACLScan.ps1 -Base "DC=iceice,DC=com" -output html -scope subtree -filter "(objectclass=*)"
dsacls(域控自带)
dsacls “CN=Users,DC=iceice.com,DC=com”
制作DSYNC后门
获得任意个用户的权限:Domain Admins组内的用户、Enterprise Admins组内的用户
操作:
111为低权限的普通域账户
给111添加账户的DCSync权限
import-module .\powerview.ps1
Add-DomainObjectAcl -TargetIdentity “DC=iceice,DC=com” -PrincipalIdentity 111 -Rights DCSync
此时就会看到出现了这两条权限
即可使用相关账户导出域内用户hash。
可以看到直接使用111账户dump出了域内所有的hash
mimikatz.exe “lsadump::dcsync /domain:0day.org /all /csv” exit
是不是非常简单!!!
除去ACL相关的权限控制,域内还可以配置SeEnableDelegationPrivilege和AdminSDHolder来当做后门
本文仅做自我总结
https://github.com/RedTeamWing/Hunting-Active-Directory
https://daiker.gitbook.io/windows-protocol/ldap-pian/11
https://www.cnblogs.com/zpchcbd/p/12374668.html
https://blog.csdn.net/weixin_43804472/article/details/84578796
https://mp.weixin.qq.com/s/Eo7h1cNnN5_8QYse7qrJXQ
https://mp.weixin.qq.com/s/YCf-0FiqFfQ7WW0V5JR7jA