前言
在实际情况中,往往多个服务不可能都在一台机器中,那么如果用户在使用服务A时,又需要用到服务B上的数据,那么最简单的方式就是A代替用户去请求B并返回相应的数据,这个过程就是委派。即 委派=我帮你去做什么事
委派攻击分为非约束委派、约束委派、基于资源的约束委派三种。
非约束委派攻击
非约束委派的请求过程如图,当service1的服务账户开启了非约束委派后,user访问service1时,service1会将user的TGT保存在内存中,然后server1就可以利用TGT以user的身份去访问域中的任何user可以访问的服务。
如果域管理员访问了某个开启了非约束委派的服务,那么该服务所在计算机会将域管理员的TGT保存至内存中,那么获得其特权就可以获取域控权限。
非约束委派有两种:
- 设置主机账户为非约束委派,通过域管理账户对该主机账户进行访问,留下票据在该主机账户下,然后拿该票据去写入内存,从而可以利用域管理的TGT去访问域控。
- 设置服务账号为非约束委派,通过域管理账户对该服务进行访问,留下票据在该主机账户下,然后拿该票据去写入内存,从而可以利用域管理的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
如下,在域控中开启yuwin7主机账号的委派属性
yuwin7主机账号开启了委派属性,若我们拿下yuwin7权限,域管访问了该机器则会将域管理员的TGT保存至内存中,从而获取域控权限
查询非约束委派的主机和用户
以下委派攻击实验基于将主机账户设置为非约束委派
使用adfind查找
Adfind 下载地址:
- 查询非约束委派的主机
win7上执行如下命令,可以发现,除了默认开启非约束委派的域控主机账户,还有ADMIN-PC账户,而admin-PC就是本机的主机名。查找⾮约束委派⽤户的⼯具还有很多!例如 Adfind、ldapdomaindump、PowerView … 等等。
查询非约束委派的域用户
⾮约束委派攻击利⽤
1. 基础利用
win7机器查看内存票据,可发现票据中没有域管的。
当设置了非约束性委派,需要让域控模拟访问被设置了非约束委派的机器。可以使用如下的方式连接目标winrm服务模拟访问
- 在域管理员win2012上执行
域管理员模拟访问被设置了约束委派的机器后,这个时候其实域管理员yuwin2012的 TGT 已经缓存在 win7机器上了
- mimikatz再次导出凭据
导出票据如下,此时发现了域管yuwin2012的凭据,其中有三个票据,我们将其中一个重命名为1.kirbi,方便操作
- 通过 ptt 将 TGT 注⼊到当前会话中
我们现在访问域控肯定是访问不了的
接下来以域用户权限运行mimikatz,通过 ptt 将 TGT 注⼊到当前会话中
这个时候就能访问到域控了:
2. 利用 Spooler服务让域控主动连接
上面的攻击方式在实战情况下,除非域管理员连接过该服务,否则十分鸡肋,而在特定情况下,可以利用splooer服务让域控主动连接。
Spooler服务默认开启,域用户可以利用windows打印系统远程协议(MS-RPRN)强制任何运行了spooler服务的域内计算机通过kerberos或ntlm对任何目标进行身份验证,这便是该攻击方式的原理。
注:splooer服务是默认运行的
攻击过程
- 域:test.lab
- 域控:192.168.10.2 win2016,账号 administrator,主机名DC
- 域内主机:192.168.10.5 win7 ,账号 yuwin7,主机名admin-PC
攻击者控制一个开启了非约束委派的主机账户,当域控开启Print Spooler服务时,攻击者可以主动要求域控访问该主机服务器,进而获取DC的TGT
- 拿下一个具有Kerberos非约束委派的主机(主机账户)
- 找到一台运行Print Spooler服务(默认为自启而且为System权限)的DC
- 本地管理员权限使用Rubeus监听
- Rubeus对域控机器账户监听
在win7上以本地管理员权限运行Rubeus,对域控机器账户的登录进行监听。
- 利用spoolsample工具强制让域控机向本机验证身份
下载spoolsample.exe,此程序运行需要.net4。win7以当前域用户身份运行。注意win7需要关闭防火墙,不然接收不了ticket
此时Rubeus已经接收到了TGT
我们先复制Rubeus监听到的TGT,由于这里每行都加了换行,我们用这个python脚本去掉每行的换行符
然后复制2.txt中的TGT
- 以本地管理员权限运行rubeus.exe导入TGT
- 接着以本地管理员权限运行mimikatz进行dcsync
成功获取域内账号ntlm哈希值
此时可以使用smbexec.py哈希传递域控获取域控权限。