常见中间件漏洞之一 ----【Tomcat】

中间件Tomcat介绍:

tomcat是⼀个开源⽽且免费的jsp服务器,默认端⼝ : 8080,属于轻量级应⽤服务器。它可以实现 JavaWeb程序的装载,是配置JSP(Java Server Page)和JAVA系统必备的⼀款环境。

在历史上也披露出来了很多的漏洞。以下讲的就是三种经典的漏洞。

一、CVE-2017-12615【Tomcat put⽅法任意⽂件写⼊漏洞】

漏洞原理:

当在Tomcat的conf(配置⽬录下)/web.xml配置⽂件中添加readonly设置为false时,将导致该漏洞产⽣,(需要允许put请求) , 攻击者可以利⽤PUT⽅法通过精⼼构造的数据包向存在漏洞的服务器⾥⾯上传 jsp⼀句话⽂件,从⽽造成远程命令执⾏,getshell等。

1. 开启靶场环境

【Centos7.6 虚拟机中开启环境,也可以在云服务器中搭建环境】

切换目录:cd /vulhub-master/tomcat/CVE-2017-12615

修改版本为3:vim docker-compose.yml

开启环境:docker-compose up -d

查看开启环境的端口:docker ps,发现端口是8080

注意:如果端口被占用,在修改版本步骤中,也可以修改端口,同时保证"安全"处该端口保证开放【如果看过之前分享的内容,会知道我们将1-65535端口都开放了】。再重新启动环境即可。

2. 访问靶场网址 ip+端口

192.168.182.143:8080

3. 首页抓包,修改为PUT方式提交

Tomcat允许适⽤put⽅法上传任意⽂件类型,但不允许jsp后缀⽂件上传,因此我们需要配合 windows的 解析漏洞。 PUT /shell.jsp%20

get方式修改为put方式上传txt文件进行测试【必须先测试,养成习惯】

访问上传的1.txt文件,发现显示了内容,上传成功。

4. 使用哥斯拉生成jsp木马文件,并上传到靶场

打开哥斯拉【Godzilla】,点击管理--生成,有效载荷为Java,点击生成,保存为1.jsp文件。

再次尝试上传文件,以2.jsp为例,上传内容为123,发现上传失败。结合上一步txt文件上传成功,分析出上传方式没问题,而上传文件的后缀jsp不可以。【这是体现了先测试txt文件上传的重要性】

遇到文件后缀被过滤,思考:加空格、加斜杠(/)或者数据流绕过(::$DATA)

加空格,访问地址为ip:8080/2.jsp空格,发现仍然失败。

加 /,访问地址为:ip:8080/1.jsp/,被当做目录执行。

接着上传我们通过哥斯拉生成的木马1.jsp文件,上传成功

5. 访问上传的jsp木马文件,哥斯拉进行连接

哥斯拉连接

右键--进入--文件管理,就可以控制目标了

6. 关闭docker开启的容器,并删除

docker ps先查看当前开启的docker容器服务,

docker stop 查到需要关闭的容器id,回车进行关闭

docker rm 容器id,删除容器。【一定要先关闭服务,再删除容器

注意:容器记得及时关闭删除,避免资源占用和浪费。同时预防端口被占用问题。

二、后台弱⼝令部署war包

漏洞原理:

在tomcat8环境下默认进⼊后台的密码为 tomcat/tomcat ,未修改造成未授权即可进⼊后台,或者管 理员把密码设置成弱⼝令。

1.环境搭建

切换目录:cd vulhub-master/tomcat/tomcat8

开启靶场环境:docker-compose up -d

修改版本为3:vim docker-compose.yml

再次开启环境。

开启成功

2.访问ip:端口

docker ps查看开启docker容器的端口,端口为8080

3.弱口令登录管理界面

直接点击Manager App或者访问管理员界面ip:8080/manager/html

弱口令:tomcat、tomcat

登录成功

4. 制作WAR包

发现可上传war文件


制作WAR包,将JSP⽊⻢压缩为ZIP格式,然后修改后缀为war就可以了。
--------zip->.war--------》

5.⽂件上传成功后,默认会在⽹站根⽬录下⽣成和war包名称⼀致得⽬录,然后⽬录中得⽊⻢就是压缩 前的⽂件名。

发现/1,这就是我们上传的。

6. 该文件里有我们的1.jsp木马文件,进行访问

ip:8080/1/1.jsp

7. 哥斯拉进行连接,可控制目标

8. 关闭环境容器,并删除

docker ps----------》 docker stop 容器id,停止服务 ---》docker rm 容器id,删除容器

三、CVE-2020-1938【Tomcat⽂件包含漏洞 】

靶场原理:

由于Tomcat AJP协议设计上的缺陷,攻击者通过Tomcat AJP Connector 可以读取或包含Tomcat上所 有 Webapp⽬录下的任意⽂件,例如:

可以读取webapp配置⽂件或源码⽂件。

此外如果⽬标应⽤有⽂件上传的功能情况下,配合为⽂件包含漏洞利⽤GetShell。

1.环境搭建

cd vulhub-master/tomcat/CVE-2020-1938

docker-compose up -d

修改版本号为3:vim docker-compose.yml

再次开启环境:docker-compose up -d

查看端口:docker ps ,端口为8009

2.访问ip:8009失败,访问8080成功

tomcat默认的conf/server.xml中配置了2个Connector,⼀个为 8080 的对外提供的HTTP协议端⼝, 另 外⼀个就是默认的 8009 AJP协议端⼝,两个端⼝默认均监听在外⽹ip。

3.POC:

下载tomcat文件包含.py,拖进kali,使用python2进行运行【必须是python2】。
python2 Tomcat-ROOT路径下文件包含(CVE-2020-1938).py -p 8009 -f /WEB-INF/web.xml 192.168.182.143

读取到目标文件内容,练习成功。

4.关闭环境,删除容器

查看当前开启的容器信息:docker ps

关闭目标容器:docker stop id

删除目标容器:docker rm id

【及时关闭并且删除目标容器,可以节省空间资源和预防端口占用问题】

Tomcat的漏洞简单练习到这。

对于中间件之一的漏洞了解,望对每位读者有所成效。

拜拜。。。

---------2025/3/24 0:24

相关推荐
Full Stack Developme8 小时前
java.nio 包详解
java·python·nio
零千叶8 小时前
【面试】Java JVM 调优面试手册
java·开发语言·jvm
代码充电宝8 小时前
LeetCode 算法题【简单】290. 单词规律
java·算法·leetcode·职场和发展·哈希表
li3714908908 小时前
nginx报400bad request 请求头过大异常处理
java·运维·nginx
摇滚侠8 小时前
Spring Boot 项目, idea 控制台日志设置彩色
java·spring boot·intellij-idea
Aevget9 小时前
「Java EE开发指南」用MyEclipse开发的EJB开发工具(二)
java·ide·java-ee·eclipse·myeclipse
黄昏晓x9 小时前
C++----多态
java·jvm·c++
Brookty9 小时前
【算法】前缀和
java·学习·算法·前缀和·动态规划
少许极端10 小时前
算法奇妙屋(七)-字符串操作
java·开发语言·数据结构·算法·字符串操作
懒羊羊不懒@10 小时前
Java基础语法—字面量、变量详解、存储数据原理
java·开发语言