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的解析函数,然后对函数进行分析

posted @ 2024-03-29 20:23  折翼的小鸟先生  阅读(8)  评论(0编辑  收藏  举报