XXE漏洞

理解
XXE (XML External Entity injection)XML 外部实体注入漏洞,如果XML 文件在引用外部实体时候,可以沟通构造恶意内容,可以导致读取任意文件,命令执行和对内网的攻击,这就是XXE漏洞,这个漏洞需要大家还有一定的XML协议基础,下面我们先了解一下xml
XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。
基本利用
通常攻击者会将payload注入XML文件中,一旦文件被执行,将会读取服务器上的本地文件,并对内网发起访问扫描内部网络端口。换而言之,XXE是一种从本地到达各种服务的方法。此外,在一定程度上这也可能帮助攻击者绕过防火墙规则过滤或身份验证检查
实体
–它是DTD文件中的一种属性类型–ENTITY。–用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。– 在DTD定义中,一条 !ENTITY语句 用于定义一个实体。实体类型一般分为:内部实体和外部实体,细分又分为引用实体和参数实体。除外部参数实体引用以字符(%)开始外,其它实体都以字符(&)开始,以字符(;)结束。
1,内部实体声明:内部实体声明:<!ENTITY 实体名称 "实体的值"> ex:<!ENTITY eviltest "eviltest">
注意和DTD中的元素声明区别<!ENTITY 声明元素>
完整实例:

<?xml version="1.0"?> <!ENTITY copyright "Copyright W3School.com.cn">]> &writer;©right;

!2,外部实体声明:<!ENTITY 实体名称 SYSTEM "URI">
完整实例:

<?xml version="1.0"?><!ENTITY copyright SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">]>&writer;©right;

危害
1.读取任意文件
2.执行系统命令
3.探测内网端口
4.攻击内网网站
如何防御xxe攻击
方案一、使用开发语言提供的禁用外部实体的方法PHP:libxml_disable_entity_loader(true);JAVA:DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferences(false);Python:from lxml import etreexmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
方案二、过滤用户提交的XML数据关键词:<!DOCTYPE和<!ENTITY,或者,SYSTEM和PUBLIC。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值