漏洞经验分享丨java审计之xxe(下)

i春秋网络安全学院      2022-05-01     187

关键词:

上篇内容我们介绍了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:

 

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发出访问,从而跟攻击者的服务器发生联系。

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

 

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

 

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

如下:payload

 

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

XXE利用

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

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

xml.php

 

test.dtd

 

payload:

 
 

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

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

新的利用:如图所示

 

注意:

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

2、libxml 是 PHP 的 xml 支持。

netdoc协议

 

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

 
 

关于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", ""));

Line 125: doc = DocumentHelper.parseText(node.asXML);

\\xxx\***tion.java

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

\\xxx\***.java

Line 58: doc = DocumentHelper.parseText(xml); // 将字符串转为XML

\xxx\***.java

Line 92: doc = DocumentHelper.parseText(xml);

Line 97: oldDoc = DocumentHelper.parseText(vaildXml);

\\xxx\***ObjConverter.java

Line 173: Document document = DocumentHelper.parseText(xml);

\\xxx\***.java

Line 949: doc = DocumentHelper.parseText(infor.getContent);

\\xxx\***Utility.java

Line 1203: Document doc = DocumentHelper.parseText(result);

\\xxx\***xxxService.java

Line 177: Document doc = DocumentHelper.parseText(requestHeader);

\xxx\***\EventParser.java

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

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

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

Line 306: DocumentHelper.parseText(contentXml)).replaceAll("<", "<").replaceAll(">", ">").replaceAll("==amp;",

\\xxx\***\XMLMessageUtil.java

Line 24: doc = DocumentHelper.parseText(xml);

Line 131: tempDoc = DocumentHelper.parseText(xml);

Line 224: document = DocumentHelper.parseText("");

\xxx\***\XmlParser.java

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

\\xxx\***.java

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

其中,\xxx\***\XMLMessageUtil.java

 

代码中使用org.dom4j.DocumentHelper.parseTest解析XML文件。

第二处,发现位置是在查看web.xml文件中AxisServlet的servlet-mapping配置,发现URL地址包含以下路径或后缀就可被攻击利用。

 

在通过访问以下URL即可访问到AxisServlet服务,可对其进行XXE漏洞攻击。

https://ip/***/servlet/AxisServlet

POC:

在复现时由于目标主机无法访问外网,所以需要在本地主机上搭建测试环境,具体的复现过程如下:

1)新建目录xxe_test,复制下面文件放入

test.dtd

 

2)在xxe_test目录下运行如下命令,监听8080端口(检查防火墙是否开放该端口)

Python -m SimpleHTTPServer 8080

3)运行以下脚本,启动ftp服务器(检查防火墙是否开放21端口)

Python xxe-ftp.py

 
 

4)发送以下报文:

 
 

漏洞截图

成功获取到受害主机的/etc/shadow文件

 

结束。

另外,也可以使用工具XXEinjector 完成带外攻击。

XXE防御

使用语言中推荐的禁用外部实体的方法:

 

以上是今天的全部内容,希望小伙伴们认真学习,后面我们还会分享其他的漏洞内容,大家敬请期待!

 

漏洞复现之xxe漏洞(代码片段)

...行注入攻击2.尝试进行登录,并进行抓包3.根据xxe注入漏洞,构造payloa免责声明XXE-基础实验实验内容XXE(XML注入)实验步骤1.访问目标进行注入攻击访问目标IP:172.16.12.2,看到以下页面2.尝试进行登录,并进行抓... 查看详情

实战经验丨业务逻辑漏洞探索之活动类漏洞

活动类的漏洞大家一定听说过,比如之前拼多多APP出现重大BUG,用户可以在任何没有限制的情况下无限领取100元无门槛优惠券。据不完全统计,一晚上的时间直接导致了拼多多200多亿的优惠券面额损失。 其实很多平台都会通... 查看详情

java代码审计之shiro反序列化漏洞分析(代码片段)

...码审计分析IDEA部署环境序列化过程分析反序列化的分析漏洞利用总结前言在前面的一篇文章:ApacheShiroJava反序列化漏洞复现曾介绍了CVE-2016-4437漏洞的复现过程和利用方式,为了不再当个“脚本小子”工具人…本文将记录... 查看详情

nsatp-a学习笔记之day2-7xxe漏洞(代码片段)

...行注入攻击2.尝试进行登录,并进行抓包3.根据xxe注入漏洞,构造payloa免责声明XXE-基础实验实验目的练习XXE(XML注入)实验环境目标机:windows2008172.16.12.2目标地址:http://172.16.12.2实验工具火狐浏览器 查看详情

从xxe-lab来深入学习xxe漏洞(代码片段)

这几天,想复习一下xxe的知识,于是把以前的一个靶场拿过来玩玩,顺便审计一下代码2333,靶场地址:https://github.com/c0ny1/xxe-lab首先先练习的是php-xxe:                 ... 查看详情

excel中的xxe攻击(代码片段)

...名进行解压,所以如果如果没有禁用外部实体,会存在XXE漏洞。下面的测试使用Java语言进行blind-xxe测试。1、测试环境解析Excel文件:poi-3.8。因为测试没有会先,所以利用SpringBoot搭建测试网站,查看日志是否有触发漏洞。2、修... 查看详情

代理审计之包含漏洞

...   我们都知道不管什么语言都有包含头文件,包含漏洞就是利用的PHP头文件包含的漏洞,因为网络上代码的文件包含有时候是可以覆盖更改的,倘若你能更改掉原先的路径,去包含你自己的文件不是可以有很大的空间去发... 查看详情

xxe漏洞详解与利用(代码片段)

...任意文件、执行系统命令、内网探测与攻击等危害的一类漏洞。是不是想到了上节课讲的SSRF?没错,利用XXE可以造成SSRF。PHP默认使用libxml来解析XML,但是从libxml2.9.0开始,它默认不再解析外部实体,导致PHP下... 查看详情

如何修复 Java 中的“禁用 XML 外部实体 (XXE) 处理”漏洞

】如何修复Java中的“禁用XML外部实体(XXE)处理”漏洞【英文标题】:howtofix\'DisableXMLexternalentity(XXE)processing\'vulnerabilitiesinjava【发布时间】:2019-11-0815:56:12【问题描述】:我针对sonarqube运行了我的java代码,我得到了“禁用XML外部... 查看详情

那些年,怼过的开发——xxe

...8.12.0413:10*字数1849阅读34评论1喜欢1编辑文章代码审计涉及漏洞:XMLEntityExpansionInjection(XML实体扩展注入)XMLExternalEntityInjection(XML外部实体注入)为什么是第一讲就是XXE漏洞,而不是SQL注入之类的?因为我发现XXE相对来讲入门门槛是偏... 查看详情

代码审计之xss漏洞

          查看详情

社区分享丨东风康明斯基于jumpserver构建统一运维安全审计平台(代码片段)

...汉站”活动中,东风康明斯资深信息安全工程师蔡阳分享了题为《JumpServer在东风康明斯的实践》的主题演讲。以下内容根据本次演讲整理而成。东风康明斯发动机有限公司(以下简称为东风康明斯)位于湖北省襄阳... 查看详情

java代码审计之rce远程命令执行

漏洞原理:RCE漏洞,可让攻击者直接向后台服务器远程注入操做系统命令或者代码,从而控制后台系统。出现此类漏洞通常由于应用系统从设计上须要给用户提供指定的远程命令操做的接口。通常会给用户提供一个ping操做的web... 查看详情

攻防视角下,初创企业安全实战经验分享

...监胡金涌,以「攻防视角下,初创企业安全实战经验分享」为题进行分享。胡金涌拥有十年云安全产品研发经验 查看详情

php代码审计18—php代码审计小结(代码片段)

...下的过滤情况分析2、原生PHP模式下的过滤分析四、常见漏洞审计方法总结1、SQL注入2、XSS漏洞3、代码执行4、文件上传、删除、下载1)文件上传漏洞2)文件删除漏洞3)文件下载漏洞5、XXE漏洞6、SSRF漏洞五、相关审计技巧... 查看详情

python代码审计实战案例总结之反序列化和命令执行!(代码片段)

...以便于朋友们的学习和参考。反序列化审计实战反序列化漏洞在Python代码审计中属于常见高危漏洞之一,它的危害性根据执行环境略有不同,本地和远程分别为7.2和10的评分。通过评分也可得知漏洞危害是显而易见。那么咱们应... 查看详情

代码审计之finecms任意文件下载漏洞

PS:该漏洞已被公布,只是学习。故自己跟着大佬的步伐审计。漏洞所在文件地址:controllersApiController.phpLine57publicfunctiondownAction(){$data=fn_authcode(base64_decode($this->get(‘file‘)),‘DECODE‘);$file=isset($data[‘finecms‘])& 查看详情

禁用xxe处理漫谈(代码片段)

近期准备面试题时,XXE漏洞防范措施(或者说修复方式)在一些文章中比较简略,故本文根据研究进行总结,作为技术漫谈罢了。XXE(XML外部实体注入),程序解析XML数据时候,同时解析了攻击者伪造的外部实体。XML用途是为了... 查看详情