java sql解析器_漏洞经验分享丨Java审计之XXE(下)

本文深入探讨了无回显的XXE漏洞,即BlindXXE,以及利用带外数据通道(OOB-XXE)提取数据的技术。通过示例解释了攻击者如何利用这些方法窃取敏感信息,并阐述了BlindXXE的工作原理。同时,分享了XXE漏洞的防御策略,包括审计中发现和利用XXE的实例。
摘要由CSDN通过智能技术生成

上篇内容我们介绍了XXE的基础概念和审计函数的相关内容,今天我们将继续分享Blind XXE与OOB-XXE的知识点以及XXE防御方法,希望对大家的学习有所帮助!

上期回顾

◀漏洞经验分享丨Java审计之XXE(上)

Blind XXE

Blind XXE与OOB-XXE

一般XXE利用分为两大场景:有回显和无回显。有回显的情况可以直接在页面中看到Payload的执行结果或现象(带内XML外部实体(XXE),即攻击者可以发送带有XXE有效负载的请求并从包含某些数据的Web应用程序获取响应),无回显的情况又称为Blind XXE,可以使用外带数据通道提取数据即带外XML外部实体(OOB-XXE)。

以下是攻击者如何利用参数实体使用带外(OOB)技术窃取数据的示例。

request:

29f4016e61c74182ce058fa609ae1084.png

XML解析器将首先处理%file加载文件的参数实体/etc/lsb-release。接下来,XML解析器将在http://attacker.com/evil.dtd向攻击者的DTD发出请求。

一旦处理了攻击者的DTD,all%参数实体将创建一个名为&send通用实体; ,其中包含一个包含文件内容的URL(例如http://attacker.com/?collect=DISTRIB_ID=Ubuntu …)。最后,一旦URL构造的&send; 实体由解析器处理,解析器向攻击者的服务器发出请求。然后,攻击者可以在其结尾处记录请求,并从记录的请求中重建文件的内容。

知道何为Blind XXE后,这里再分析一下原理:

Blind XXE原理

带外数据通道的建立是使用嵌套形式,利用外部实体中的URL发出访问,从而跟攻击者的服务器发生联系。

直接在内部实体定义中引用另一个实体的方法如下,但是这种方法行不通。

00ae5c4de584680088ed43b4b766ff4c.png

但是这样做行不通,原因是不能在实体定义中引用参数实体,即有些解释器不允许在内层实体中使用外部连接,无论内层是一般实体还是参数实体。

8d99d3b38b71aa343952822d4a746a93.png

解决方案是:将嵌套的实体声明放入到一个外部文件中,这里一般是放在攻击者的服务器上,这样做可以规避错误。

如下:payload

cd2bfc7f7596b54fa35e4de79443de9f.png

nc -lvv port 监听即可获得请求回显内容。

XXE利用

示例无回显读取本地敏感文件(Blind OOB XXE):

此部分演示借用php中XXE进行说明

xml.php

9c2a6449af3feccf08e54007f415786d.png

test.dtd

5c33654d97dee412c476b81f9d6ab9cd.png

payload:

0de3a9dc9811c966cc9ab3357d7fa2bc.png
28989175888ee2fcee7e3c65cf5965b2.png

整个调用过程:我们从 payload 中能看到 连续调用了三个参数实体 %remote;%int;%send;,这就是我们的利用顺序,%remote 先调用,调用后请求远程服务器上的 test.dtd ,有点类似于将 test.dtd 包含进来,然后 %int 调用 test.dtd 中的 %file, %file 就会去获取服务器上面的敏感文件。

将 %file 的结果填入到 %send 以后(因为实体的值中不能有 %, 所以将其转成html实体编码 %),我们再调用 %send; 把我们的读取到的数据发送到我们的远程 vps 上,这样就实现了外带数据的效果,完美的解决了 XXE 无回显的问题。

新的利用:如图所示

cd4353df4cdaaa83d9e74b3d8af12830.png

注意:

1、其中从2012年9月开始,Oracle JDK版本中删除了对gopher方案的支持,后来又支持的版本是 Oracle JDK 1.7 update 7 和 Oracle JDK 1.6 update 35 。

2、libxml 是 PHP 的 xml 支持。

netdoc协议

95ece22a3d48e8e36f3eba5bf1c8afd2.png

另外对于带外XXE还可以通过burp 进行测试如(附上两张图):

a1b19c3eda43fc556a95edd01b27fa57.png
a874e2e211c8e827ae589e34b051e3fb.png

关于burp此插件还可在多个场景测试中用到,比如XSS、SQL、SSRF等。

最后,分享一下审计中遇到两个XXE的审计与利用思路过程。

第一处出现在系统使用的org.dom4j.DocumentHelper调用的类函数下。

在源码中搜索关键字DocumentHelper.parseText

得到:

xxx******.java

Line 303: document = DocumentHelper.parseText(xml);

xxx***XmlParser.java

Line 51: Document doc = DocumentHelper.parseText(xmlStr);

xxx******Task.java

Line 350: Document document = DocumentHelper.parseText(result);

xxx******Action.java

Line 237: Document document = DocumentHelper.parseText(mapDataForOut);

xxx***xxxAction.java

Line 259: Document document = DocumentHelper.parseText(mapDataForOut);

xxx***xxx.java

Line 120: Document doc = DocumentHelper.parseText(policyXml.replaceAll("_lnx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值