标签: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))
标签:font 协议 ade html 过滤 ffffff 特定 dbf 修复
原文地址:https://www.cnblogs.com/jiemapingtai/p/12534914.html