SpringMVC中的XXE漏洞测试
2015-02-25 21:26
169 查看
SpringMVC框架支持XML到Object的映射,内部是使用两个全局接口Marshaller和Unmarshaller,一种实现是使用Jaxb2Marshaller类进行实现,该类自然实现了两个全局接口,用来对XML和Object进行双向解析。并且XML文件可以是DOM文档、输入输出流或者SAX handler。
SpringMVC流行使用注解来快速开发,其中JAXB注解可以对JavaBean中需要与XML进行转化的地方进行标注。比如,实现XML文件到User对象的映射,User对象中使用JAXB注解:
当在SpringMVC中使用JAXB实现XML与Java Bean映射的时候,可能会导致XXE漏洞,因为SpringMVC中也可以解析request body中的XML,其原理是在注解模式下,使用注解@RequestBody后,可以将HTTP请求的请求体引入到我们的Controller的方法中,一般是作为方法的参数来使用。在开启annotation-driven的时候,HttpMessageConverter会给AnnotationMethodHandlerAdapter初始化7个转换器。至于Spring是如何选择合适的转换器的,这里没有读源码,猜测应该是通过Accept或者Content-type头来进行判断的。
如果应用程序没有做有效的处理,那么通过构造request body,我们可以实现外部实体的注入。比如,Web应用中使用XML传递数据时,没有对外部实体的引用做限制,就可能导入外部实体,导致任意文件读取。
在测试漏洞中,只需要在配置文件中对注解驱动与ViewResolver进行配置即可,
正常请求时:
在请求中标明提交一个application/xml类型的内容,并在request body中提交一个XML,内容为name=exploit。提交请求,转向页面index.jsp,当然,在controller中我们做了一些处理,将转换的user传给了jsp来呈现,代码为:
可以看到,控制台上打印了toString方法的内容:
index.jsp结果如下:
下面引入外部实体,提交:
这里与上面不同,引入了一个恶意的外部实体shit,并且在回显的位置<name>中使用这个实体,效果是读取c盘下面的1.txt,内容为一串”2”,结果如下:
可以看到,外部实体成功引入并且解析,造成了XXE漏洞。
所以,SpringMVC中处理XML类型的请求体时,所用的转换器(Converter)是默认支持外部实体引用的,通过官网的解决方案可以解决该漏洞:
https://jira.spring.io/browse/SPR-10806
SpringMVC流行使用注解来快速开发,其中JAXB注解可以对JavaBean中需要与XML进行转化的地方进行标注。比如,实现XML文件到User对象的映射,User对象中使用JAXB注解:
当在SpringMVC中使用JAXB实现XML与Java Bean映射的时候,可能会导致XXE漏洞,因为SpringMVC中也可以解析request body中的XML,其原理是在注解模式下,使用注解@RequestBody后,可以将HTTP请求的请求体引入到我们的Controller的方法中,一般是作为方法的参数来使用。在开启annotation-driven的时候,HttpMessageConverter会给AnnotationMethodHandlerAdapter初始化7个转换器。至于Spring是如何选择合适的转换器的,这里没有读源码,猜测应该是通过Accept或者Content-type头来进行判断的。
如果应用程序没有做有效的处理,那么通过构造request body,我们可以实现外部实体的注入。比如,Web应用中使用XML传递数据时,没有对外部实体的引用做限制,就可能导入外部实体,导致任意文件读取。
在测试漏洞中,只需要在配置文件中对注解驱动与ViewResolver进行配置即可,
正常请求时:
在请求中标明提交一个application/xml类型的内容,并在request body中提交一个XML,内容为name=exploit。提交请求,转向页面index.jsp,当然,在controller中我们做了一些处理,将转换的user传给了jsp来呈现,代码为:
可以看到,控制台上打印了toString方法的内容:
index.jsp结果如下:
下面引入外部实体,提交:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ANY[ <!ENTITY shit SYSTEM "file:///c:/1.txt">]> <user><name>&shit;</name></user>
这里与上面不同,引入了一个恶意的外部实体shit,并且在回显的位置<name>中使用这个实体,效果是读取c盘下面的1.txt,内容为一串”2”,结果如下:
可以看到,外部实体成功引入并且解析,造成了XXE漏洞。
所以,SpringMVC中处理XML类型的请求体时,所用的转换器(Converter)是默认支持外部实体引用的,通过官网的解决方案可以解决该漏洞:
https://jira.spring.io/browse/SPR-10806
相关文章推荐
- WEB漏洞测试(四)——SSRF与XXE的超浅显的讨论
- SpringMVC环境测试
- SpringMVC多文件上传实例(未测试)
- Bash漏洞深入分析及修补测试
- 文件上传漏洞原理与实例测试
- XSS安全测试需要注意的几个漏洞
- 测试springmvc方法和配置文件是否有错
- 每周一书-《模糊测试-强制发掘安全漏洞的利器》
- Kali之Metasploit渗透测试-漏洞扫描与复现
- Flash Player 漏洞 cve 2014 0497 测试过程
- Apache Struts2 多个前缀参数远程命令执行漏洞及测试方法
- MS10-070 ASP.NET Padding Oracle信息泄露漏洞项目测试
- 灰帽黑客:正义黑客的道德规范、渗透测试、攻击方法和漏洞分析技术(第3版)
- iPhone短信漏洞分析与测试
- 12月第四周安全回顾:双节期间微软忙补新漏洞,新Hash将测试 推荐
- 渗透测试之漏洞利用开启篇
- phparticle 2.0注入漏洞测试分析
- XXEinjector – XXE自动化测试工具
- 软件测试(c漏洞检查splint)
- 常规web渗透测试漏洞描述及修复建议