凡心所向,素履所往

XXE实例及应用3

字数统计: 572阅读时长: 2 min
2019/07/08 Share

Java - XXE

Java - XXE

XXE在Java 代码中的漏洞示例

JAVA常见XXE漏洞写法案例

spring-data-XMLBean XXE复现分析

搭建环境

【1】下载环境

git clone https://github.com/spring-projects/spring-data-examples.git

【2】下载安装maven并配置好环境变量
因为这里的新版本已经对次做了修复,所以这里的版本改为 2.0.5

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-commons</artifactId>
            <version>2.0.5.RELEASE</version>
        </dependency>

【3】配置好环境变量后,进入对应的web/projection 打包运行

mvn package

-w1133

部署运行

进入对应目录搭建运行

java -jar spring-data-web-projection-2.0.0.BUILD-SNAPSHOT.jar

-w754

poc复现

构造post请求
-w1318
比较奇怪的一点是,正常的xxe请求 任意文件读取 都应该是 file:///
这里直接执行也行
-w1094


注意  这里的content-type 类型,得支持,改为 application/xml

xxe支持的content-type fuzz一下
在位置中application/xhtml+xml 与 application/xml 的效果是一样的
-w1016

注
Accept代表发送端(客户端)希望接受的数据类型。 
比如:Accept:text/xml; 
代表客户端希望接受的数据类型是xml类型

Content-Type代表发送端(客户端|服务器)发送的实体数据的数据类型。 
比如:Content-Type:text/html; 
代表发送端发送的数据格式是html。

漏洞分析

从该位置可以知道漏洞位置是在 firstname和lastname的接收处理,所以跟踪下idea下的该函数。
-w1283
该maven项目demo中就application和userController 两个函数,从主函数跟踪。
-w911
可以看到post请求中的user.getFirstname(),user.getLastname() 方法
-w404
-w805
-w881

跟踪下 会发现,在调用responseEntity的时候就已经读取文件了
-w932
-w943

参考网上的分析,漏洞的处理函数位是在org.xmlbeam.ProjectionInvocationHandler:invokeReadProjection()处理
-w913

顺带在这里看下相对路径处理成功的原因

待补充细分

在提交http/post请求后,跟踪下

protected <T> Object readWithMessageConverters

在对该post参数进行处理时,这里还没进行文件读取转换
-w900
-w1184
-w1144
-w1425
-w704

漏洞原因是在于XMLBeam漏洞版本中没有限制外部实体
-w701

-w771

-w810

-w805

-w915

参考

JAVA常见的XXE漏洞写法和防御
spring-data-XMLBean XXE复现分析
XXE with Spring Data’s XMLBeam 分析
框架基础——全面解析Java注解

CATALOG
  1. 1. Java - XXE
    1. 1.1. JAVA常见XXE漏洞写法案例
      1. 1.1.1. spring-data-XMLBean XXE复现分析
        1. 1.1.1.1. 搭建环境
        2. 1.1.1.2. 部署运行
        3. 1.1.1.3. poc复现
        4. 1.1.1.4. 漏洞分析
    2. 1.2. 待补充细分
  2. 2. 参考