xxe的原理及利用

本文深入探讨了XXE(XML External Entity Injection)漏洞,解释了XML和外部实体注入的概念,阐述了XXE的类型,包括带内、错误基和OOB,并展示了各种利用方式,如文件读取、端口探测。同时,文章还提供了PHP、JAVA和Python等语言的防御方案,总结了如何避免和解决XXE问题。
摘要由CSDN通过智能技术生成
零基础学黑客,搜索公众号:白帽子左一

什么是xxe

XML External Entity Injection 外部实体注入,该漏洞发生在应用程序解析XML输入时,

没有禁止外部实体的加载,导致可加载任意外部文件,造成文件读取、命令执行(有点极端)、内网端口扫描、攻击内网网站、发起dos攻击等危害。

什么是xml

一种标记语言,被设计用来传输和存储数据(html是用来显示数据):

<?xml version="1.0" encoding="UTF-8"?>
<person>
 <name>john</name>
</person>

第一行是xml文档的说明,在很多时候可以不写,其中是根元素标签,

这里注意,xml不像html一样标签都是固定的,这里可以根据需求自己定义(区分大小写),

name是子元素标签,注意标签是成对存在

所以也就造成了在xml文档中不能存在< > " '等容易影响xml解析器解析的内容。

为了解决这种状况,引入实体的概念。

实体是用于定义引用普通文本或特殊字符的快捷方式的变量,其不仅能用来存储指定数值,还可以从本地文件或者远程文件中调用相关数据作为后续实体引用

实体就类似与变量,不仅可以对其赋值,也能在文档的各个地方进行引用,实体在xml文档中的DTD部分被定义,如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE perion [
 <!ENTITY name "gouzi"> // 定义个实体 name 值为gozi
] >
<person>
 <name>&name;</name> //<name>gouzi</name>
</person>

DTD的作用是定义该xml文档包含哪些模块,这些模块包含了哪些内容:

<?xml version="1.0"?>
<!DOCTYPE note [
 <!ELEMENT note (to,from,heading,body)>
 <!ELEMENT to (#PCDATA)>
 <!ELEMENT from (#PCDATA)>
 <!ELEMENT heading (#PCDATA)>
 <!ELEMENT body (#PCDATA)>
]>
<note>
 <to>George</to>
 <from>John</from>
 <heading>Reminder</heading>
 <body>Don't forget the meeting!</body>
</note>

由于其中的实体部分可以加载外部实体等操作,所以在可以控制xml的地方就容易造成xxe漏洞。
实体分为三种:

1.一般实体

<!ENTITY name "gouzi">
……
<name>&name;</name>

在 DTD 中被定义,在xml 引用,调用方式为 &实体名;

2.参数实体

<!ENTITY % data "<!ENTITY % name 'gouzi'>">
%data
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值