Tomcat 漏洞复现笔记

  1. Tomcat 简介
  2. 1、CVE-2017-12615
    1. 漏洞原理:
    2. 漏洞复现:
  3. 2、弱口令&war远程部署
    1. 漏洞原理:
    2. 漏洞复现:
  4. 3、manager 暴力破解
    1. 漏洞原理:
    2. 漏洞复现:

Tomcat 简介

Tomcat 是一个开源的轻量级 Web 应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 Java 程序的首选。

实际上 Tomcat 是 Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行 tomcat 时,它实际上作为一个与 Apache 独立的进程单独运行的。

Apache 为 HTML 页面服务,Tomcat 主要运行 JSP 页面和 Servlet。另外,Tomcat 和 IIS 等 Web 服务器一样,具有处理 HTML 页面的功能,不过 Tomcat 处理静态 HTML 的能力不如 Apache 服务器。

1、CVE-2017-12615

CVE-2017-12615 对应的漏洞为:任意文件写入,主要影响的是 Tomcat 的 7.0.0-7.0.81 这几个版本。

漏洞原理:

由于配置不当(非默认配置),将配置文件 conf/web.xml 中的 readonly 参数设置为了 false,导致可以使用 PUT 方法上传任意文件,但限制了 jsp 后缀的上传,不过对于不同平台有多种绕过方法。

通过阅读 conf/web.xml 文件,可以发现,默认 readonly 为 true,当 readonly 设置为 false 时,可以通过 PUT / DELETE 进行文件操控

漏洞复现:

这里使用 vuluhub 靶场的 docker 进行漏洞复现,关于环境搭建可以看官网的手册:链接

vuluhub 靶场下载好后,首先进入 CVE-2017-12615 的 docker 环境

docker-compose up -d //靶场的编译和运行

docker ps    //查看docker环境是否启动成功


首先进入 docker 查看一下 web.xml 的配置参数

docker exec -it ce968a90f837 /bin/bash

cat conf/web.xml | grep readonly


可以看到这里 readonly 设置为 false,所以存在漏洞。

访问8080端口,可以看到是 Tomcat 8.5.19 版本。

BP抓包,发现这里是 GET 方法

这里首先测试一下,改为 PUT 方法写入一个 test.txt

返回201,应该已经上传成功了。

进入 docker 查看一下,写入成功了。

cd /usr/local/tomcat/webapps/ROOT


前面说过,使用PUT方法上传任意文件,但限制了 jsp 后缀的上传。测试一下,上传一个冰蝎的jsp上去,发现返回的是404,应该是被拦截了

这里就需要进行绕过,有三种绕过方法,分为 windows 和 linux 环境下。

1、Windows下不允许文件以空格结尾

PUT /shell.jsp%20 HTTP/1.1 

上传到 Windows 会被自动去掉末尾空格

2、Windows NTFS 流

PUT /shell.jsp::$DATA HTTP/1.1

由于 Windows 的特性,会忽略::$data后缀,并将文件新建。

3、"/" 在文件名中是非法的,也会被去除(Linux/Windows)

PUT /shell.jsp / HTTP/1.1

首先使用%20绕过。我们知道%20对应的是空格,在 windows 中,若 jsp 文件后面添加%20即可达到自动抹去空格的效果。

返回201,应该上传成功了,进入docker查看一下,确认传上去了。

但是注意,这是在 window 下才能使用冰蝎等工具连接,Linux虽然可以上传绕过,但是连接不了!文件名其实也发生了改变。

第二种方法就是使用 Windows NTFS 流,在 jsp后面添加::$DATA,Windows下会自动去掉::$DATA

看到返回201,上传成功。

但是和上面一样也是 Windows 下才能连接的。

第三种方法为在 jsp 后缀后面使用"/",因为"/"在文件名中是非法的,在 windows 和 linux 中都会自动去除。根据这个特性,上传shell3.jsp/,返回201。


上传成功,使用冰蝎连接。

成功拿到webshell!

2、弱口令&war远程部署

漏洞原理:

在 Tomcat8 环境下默认进入后台的密码为 tomcat/tomcat,未修改造成未授权即可进入后台。

漏洞复现:

进入 Tomcat8 的 docker 环境,并启动。

访问后台管理地址,使用 tomcat/tomcat 进入后台

http://192.168.50.131:8080/manager/html


进入到后台页面

看到这里有一个上传 war 包的地方,很多 Java 的中间件都可以用 war 远程部署来拿 shell,tomcat也不例外。

首先将我们的 冰蝎马 shell.jsp 打包成 test.war 。

步骤:首先新建一个文件夹,里面只有 shell.jsp 文件,输入命令:

jar -cvf test.war .

test.war 就是打包后生成的文件名称。
后面的. 是把当前目录下所有文件打包。

上传我们制作的 war 包

test.war 应该已经部署成功,访问下面url测试一下

http://192.168.50.131:8080/test/shell.jsp


没有报错404那么应该已经上传成功。使用冰蝎连接
成功得到 shell

这里还可以用 msf 里面的 exploit/multi/http/tomcat_mgr_upload 模块

运行即可得到一个 meterpreter

3、manager 暴力破解

漏洞原理:

后台密码用 base64 编码传输,抓包解密即可得到后台密码,也可以进行爆破。

漏洞复现:

还是用上面的环境,访问

http://192.168.50.131:8080/manager/html 

进行抓包,在没有输入帐号密码的时候是没有什么数据的。

把这个包放过去,会请求输入用户名和密码,再进行抓包

就可以得到 Authorization 这个字段,这个字段有一个 Basic,就是base64加密的意思。

base64解密得到账号密码 tomcat:tomcat

那么根据上面的情况,猜想能不能对 manager 进行暴力破解呢?答案是可以的!

步骤如下:

再次访问 manager 页面

192.168.50.131:8080/manager/html/


发送至 Intruder 模块,添加 Authorization 字段

Authorization:Basic


设置 payload 类型,选择自定义迭代器。

这里需要添加3个参数,对应:用户名:密码

参数1,用户(这里做个演示,字典很小):

参数2,冒号:

参数3,密码:

因为是 base64 编码,需要对 paylodad 进行编码处理。

需要去掉自带的编码,不去会失败!

OK,开始爆破

爆破成功, base64 解码即可得到用户名和密码。

参考文章:

最全的Tomcat漏洞复现笔记
Burp暴力破解tomcat后台


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 2058751973@qq.com

×

喜欢就点赞,疼爱就打赏