XML和XXE基础
XML和XXE基础
1.0 XML和XXE简介
简介:XML(eXtensible Markup Language)是一种可扩展标记语言,它是由万维网联盟
(W3C)制定的标准格式,主要用于数据存储、传输以及文档结构的描述。XML的设计目的
是为了提供一种灵活且结构化的数据交换手段,使得数据能够在不同的系统和应用程序之间
方便地共享。
和HTML区别:XML被设计为传输和存储数据,其焦点是数据的内容
XML External Entity (XXE) 是一种针对XML处理程序的安全漏洞,这种漏洞出现在应用程序
解析XML输入的过程中,当程序未能禁用或者适当地管理XML外部实体引用时,攻击者能够
通过构造恶意的
XML文档,注入外部实体声明并触发服务器解析该实体,从而达到以下目的:
文件读取:攻击者可以定义一个外部实体,指向服务器本地或网络可达的任意文件,借此读
取敏感文件内容,如配置文件、日志文件甚至密码文件等。
服务器端请求伪造 (SSRF):如果外部实体允许发起网络请求,攻击者可能利用此功能对内部
网络发起探测或攻击。
拒绝服务 (DoS):通过构造消耗大量资源的实体,可能导致服务器负载过高或崩溃。
盲XXE:即使服务器不返回实体解析的结果,攻击者也可以利用Blind XXE技巧泄露信
息,例如通过发送精心设计的请求观察服务器响应时间的变化,以此推测内部文件是否存
在。
最常见的利用就是利用其进行文件读取
通过XML传递的数据在数据包的header中可以找到相关信息
一般对xml的利用:
客户端:xml发送数据
服务端:xml解析数据
我们可以利用xml写一个带有文件读取的代码尝试发送,类似文件读取功能的实现
这里分享一个很好的博客,有关xml和xxe 这个 把xxe的一些实现和基础都讲的很清楚
1.1 XXE实现文件读取
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "file:etc/passwd" >]>
<root>
<name>&xxe;</name>
</root>
用file协议读取passwd
如果遇见了无回显的情况,可以进行带外测试,利用dnslog平台,从而判断究竟是不存在回
显,还是我们的代码写的有问题,或者说是请求了不存在的文件,如果经过测试确实是
不回显,这时候就得使用下面的技术
1.2 外部引用实体DTD
由于参数实体无法在内部子集中进行调用,我们想要把数据返回道我们自己的服务器就需要
外部引用实体dtd,具体的见我们上面推荐的博客,那个博客讲的很清楚,我就不多加赘述了
1.3 黑盒中的xxe
我们通过数据包判断出传输的是xml数据,就可以尝试去发送xml恶意代码去试试
xxe不仅在数据传输中出现,在文件上传引用插件解析或者预览也会造成文件中的xxe
payload执行
1.4 白盒中的xxe
xxe的搜索方向
1 通过应用功能追踪代码审计
2 通过特定函数搜索定位审计
由于xxe可能用到的地方很多,所以我们主要从特定函数去测试
直接在代码中搜处理xml的解析函数,然后对函数进行分析