现在的位置: 首页 > 系统安全 > 安全加固 > 正文
Tomcat漏洞利用与安全加固实例分析
2013年03月05日 安全加固 ⁄ 共 3623字 评论数 1 ⁄ 被围观 10,042 次+



摘要

Tomcat是Apache软件基金会的一个免费的、开放源码的WEB应用服务器,可以运行在Linux和Windows等多个平台上。由于其性能稳定、扩展性好、免费等特点深受广大用户的喜爱。互联网上绝大多数JAVA WEB应用都运行在Tomcat服务器上。

Tomcat作为Web应用的载体,一旦出现安全问题,那么运行在其上的Web应用的安全也无法得到保障,所以研究Tomcat的漏洞与安全性就非常有必要。本文通过实例详细的讲述了关于Tomcat攻防两个方面的问题。笔者首先在攻击者的角度,以一个在渗透测试过程中经常利用的Tomcat漏洞作为实例,来详细的描述攻击者是如何利用Tomcat服务器漏洞来入侵网站,并最终完全控制服务器的。然后又以网络安全管理人员的角度,针对Tomcat的特点,详细的介绍了如何对Tomcat进行安全加固。

1. 利用Tomcat管理后台配置弱点渗透网站实例

Tomcat默认存在一个管理后台,默认的管理地址是http://IP或域名:端口号/manager/html。通过此后台可以在不重启Tomcat服务的情况下方便的部署、启动、停止或卸载WEB应用。但是,如果配置不当的话就存在很大的安全隐患。攻击者利用这个弱点可以非常快速、轻松的入侵一台服务器。下面我们来看一个实例。

目标IP:192.168.30.128

目的:完全控制服务器,获取到管理员权限

渗透过程:

现在我们来访问http://192.168.30.128:8080/manager/html,服务器会提示输入帐号和密码。

 

图1

那么我们如何获取到这个用户名和密码呢?目前共有三种方法可以选择。一、如果采用的是运行在Windows平台上的Tomcat安装版,并且版本在Tomcat 5.5.0 to 5.5.28或Tomcat 6.0.0 to 6.0.20之间,我们可以利用CVE-2009-3548这个漏洞来登录后台。受该漏洞影响的Tomcat版本如果在安装时不更改,那么Tomcat默认会建立一个名为“admin”,密码为空的具有管理权限的帐号。下图是tomcat安装版5.5.27的默认tomcat-users.xml配置文件:

图2

注:Linux平台及Windows平台免安装版本不受该漏洞影响。

二、如果采用类似“tomcat”、“654321”等这种很容易让人猜到的字符作为密码的话,我们可以直接猜测出该后台的帐号和密码。三、如果前两种方法都没有效果的话,我们可以采用暴力破解的方法来破解帐号和密码,成功率取决于字典是否强大。在Windows和Metasploit下都有这样的工具。下面我们来演示如何利用Metasploit下的工具暴力破解Tomcat后台帐号、密码。

首先打开Metasploit控制台,输入“use auxiliary/scanner/http/tomcat_mgr_login”,然后设置相应的配置信息,可设置的信息如下图:

图3

设置好后,输入“run”命令开始执行脚本.因为密码比较简单,所以很快就破解成功了。

图4

现在我们获取到了Tomcat管理后台的帐号和密码,可以直接登录后台,上传一个war格式的木马,这样我们就得到了一个webshell。

图5

图6

从图6我们可以看到Tomcat是以system权限运行的,这是系统最高权限。因此,我们不需要提权就可以直接添加后门帐号。

图7

从上图我们看到成功添加了一个名为jspshell的管理员组帐号。并且目标服务器开启了3389端口,我们可以通过远程桌面来登录。

图8

到此为此,这台服务器已经在我们的完全控制之下了。从上面的过程中我们可以看到这类漏洞的导致的后果非常严重,而且攻击难度较低。中国电信某业务系统就曾经出现过这样的漏洞。

图9

2. 安全加固

Tomcat的安全加固我们主要从以下两点考虑:一是Tomcat Web Server本身是否安全,比如是否存在安全漏洞;二是Tomcat Web Server是否提供了可使用的安全功能,这部分主要是检查Tomcat的配置是否得当,在安全性、可用性、稳定性之间取得平衡。

2.1 Tomcat版本的选择与安装注意事项

检查目前使用的Tomcat版本是否存在安全漏洞,如果存在,需要升级到新的安全版本。在选择Tomcat的版本时,我们一般选择最新的稳定版本。这样可以在安全性和稳定性之间取得一个很好的平衡。如果从低版本升级到高版本时,建议先在测试环境中测试通过后再进行升级,以避免由于兼容性带来的问题。关于Tomcat的安全漏洞可以关注官方发布的安全公告(http://tomcat.apache.org/security.html),也可以关注一些漏洞发布平台的最新Tomcat漏洞信息。

在安装时使用自定义的安装路径,并自定义WEB根目录。可以在Tomcat安装目录的conf目录下的server.xml中修改默认WEB根目录。打开server.xml,找到如下内容:

图10

在</Host>之前加入类似以下内容:

<Context path="" docBase="D:/javaweb" debug="0" reloadable="true" crossContext="true"/>

上面语句的作用是设置Tomcat虚拟路径,path代表虚拟目录,可自定义也可以为空,docBase代表物理路径。如果按上面的设置,当访问http://192.168.30.128:8080时实际访问的是D:\javaweb目录下的文件。如果path的值不为空,如设置为path=”/java”时,那么访问时应该这样:http://192.168.30.128:8080/java

在修改完成后,需要重启tomcat服务生效。

2.2 Tomcat安全配置

2.2.1 Tomcat降权

在Windows环境下,Tomcat默认以System权限运行,这样的后果是一旦成功入侵WEB应用,将直接得到一个高权限的Webshell,并且不需要提权操作就可以完全控制服务器。

图11

现在我们来对Tomcat进行降权操作。首先新建一个用户,设置复杂的密码,并且让它不属于任何用户组。

图12

接着打开“本地安全策略”--->“本地策略”--->“用户权限分配”,找到“作

为服务登录”项,把刚刚新建的用户添加进去。

图13

然后打开“服务”组件,找到Tomcat 的服务,右键“属性”--->“登录”,用刚新建的tomcat 帐号运行Tomcat 服务。

图14

再找到Tomcat安装目录,只为“Administrators 组”和“tomcat”帐户分配完全控制权限,并将其他帐户权限全部删除。如果不为tomcat帐户分配权限,Tomcat 服务将无法启动。然后需要以最小权限原则为Tomcat日志目录和WEB目录单独分配权限。日志目录只需要分配“读取”和“写入”权限即可。WEB目录权限分配可依据以下原则:有写入权限,一定不要分配执行权限;有执行权限,一定不要分配写入权限。

网站上传目录和数据库目录一般需要分配“写入”权限,但一定不要分配执行权限。其他目录一般只分配“读取”权限即可。

配置好后,需要重启Tomcat 服务才能生效。

图15

2.2.2 Tomcat日志安全配置

不论在那种服务器上,日志都是一个非常重要的部分,我们需要对它严加保护。在Tomcat上也是如此。它的日志默认保存在Tomcat安装目录的logs目录下。要注意的是Tomcat默认并没有开启访问日志,所以我们需要手工开启它。打开server.xml,找到如下代码,去掉它们的注释,具体如下图所示:

图16

然后修改日志的默认保存路径,并设置只允许系统管理员有日志保存目录的完全控制权限,tomcat帐户有“读取”和“写入”权限即可。

图17

2.2.3 删除默认文档和示例程序

如果没有自定义WEB目录,还需要将默认WEB根目录下的servlets-examples和tomcat-docs目录及其及下的所有文件都删除。以避免造成不必要的信息泄露和其他漏洞。servlets-examples和tomcat-docs目录下的一些样例都曾出现过安全漏洞。如CVE-2007-2449和CVE-2007-1355。

2.2.4 Tomcat默认管理后台安全配置

Tomcat默认存在一个管理后台,如果配置不当的话会引起非常严重的安全漏洞。在最开始的实例中我们就是利用该漏洞成功入侵目标服务器的。因此,我们非常有必要对它进行安全加固。一般情况下我们不需要该功能,所以建议删除该管理页面。方法是将%tocmat_home%/conf/Catalina/localhost目录下的manager.xml删除掉。

如果一定要使用的话,建议将该manager.xml的文件名修改为一个难猜测出来的文件名。并且找到Tomcat安装目录的conf目录下的tomcat-users.xml,设置一个复杂的管理员帐号和密码。

目前有 1 条留言 其中:访客:1 条, 博主:0 条

  1. slip2008 : 2013年05月08日16:44:53  1楼 @回复 回复

    越来越少了,这样的漏洞。

给我留言

留言无头像?