当前位置: 首页 > 编程日记 > 正文

Tomcat漏洞说明与安全加固

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

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

利用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”,密码为空的具有管理权限的账号。下图2是tomcat安装版5.5.27的默认tomcat-users.xml配置文件:

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

二、如果采用类似“tomcat”、“654321”等这种很容易让人猜到的字符作为密码的话,我们可以直接猜测出该后台的账号和密码。

三、如果前两种方法都没有效果的话,我们可以采用暴力破解的方法来破解账号和密码,成功率取决于字典是否强大。在Windows和Metasploit下都有这样的工具,下面我们来演示如何利用Metasploit下的工具暴力破解Tomcat后台账号、密码。
首先打开Metasploit控制台,输入“use auxiliary/scanner/http/tomcat_mgr_login”,然后设置相应的配置信息,可设置的信息如下图3所示。

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

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

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

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

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

安全加固

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

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服务生效。

Tomcat安全配置

a. Tomcat降权

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

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

接着打开“本地安全策略”--->“本地策略”--->“用户权限分配”,找到“作为服务登录”项,把刚刚新建的用户添加进去,如图13。

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

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

注:WEB目录权限分配可依据以下原则:有写入权限,一定不要分配执行权限;有执行权限,一定不要分配写入权限。

网站上传目录和数据库目录一般需要分配“写入”权限,但一定不要分配执行权限,其他目录一般只分配“读取”权限即可。配置好后,需要重启Tomcat服务才能生效。

b. Tomcat日志安全配置

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

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

c. 删除默认文档和示例程序

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

d. Tomcat默认管理后台安全配置

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

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

转载于:https://www.cnblogs.com/milantgh/p/3660106.html

相关文章:

《人性的优点》笔记

1.相信自己&#xff0c;做一个成功的人 2.《圣经》中说&#xff1a;“攻克己心&#xff0c;强如攻城” 3.人最大的敌人&#xff0c;不是别人&#xff0c;正是自己 4.不要为木已成舟的事情耗费太多的心血&#xff0c;你无法改变它 5.忧虑是健康的大敌&#xff0c;它只会让你的生…

SIP协议分析

“ 音视频通话控制协议SIP介绍。”SIP&#xff08;Session Initiation Protocol&#xff09;&#xff0c;即会话发起协议&#xff0c;在RFC2543、RFC3261等中被定义&#xff0c;是一个VOIP信令协议&#xff0c;其目的是在IP网络中实现电话功能&#xff0c;即软电话功能。在互联…

Struts2的工作原理

Struts2是在Struts1的基础上发展而来的&#xff0c;Struts是WebWork和Struts1的集合&#xff0c;采用的正是WebWork的核心&#xff0c;更多的是WebWork。 下载的Struts2源代码文件 主要的包和类&#xff1a; 包名 说明 org.apache.struts2. components 该包封装视图组件&…

Tiny4412 Uboot

1. Build uboot a) 安装好toolchain (arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz)并设置好 环境变量PATH&#xff0c;保证可以正常使用。 b) 解压 uboot_tiny4412-20130729.tgz 并进入相应的目录 tar xzf uboot_tiny4412-20130729.tgz c) 配置 uboot 并编译 cd uboot_tiny4412 m…

iOS逆向(1)——利用ipa重签名,3分钟iPhone安装多个微信

本文要达成如图效果&#xff0c;在一台iPhone上安装第二个微信&#xff1a; 准备&#xff1a; Xcode微信ipa&#xff08;可通过iTool进行下载&#xff09;重签名脚本 步骤 打开Xcode&#xff0c;新建Single View App项目&#xff0c;名字可以随意&#xff0c;这里就用Wech…

使用Fiddler进行HTTP流量分析

“ Fiddler抓包工具使用。”Fiddler作为一个PC端的HTTP/HTTPS协议分析工具&#xff0c;能够抓取PC上的流量&#xff0c;并且它对HTTP类数据的分析&#xff0c;要比Wireshark要简单&#xff0c;友好&#xff0c;它对数据的组织格式很好地提高了分析效率。本文介绍如何在PC上使用…

Java学习笔记(二一)——Java 泛型

【前面的话】 最近脸好干&#xff0c;掉皮&#xff0c;需要买点化妆品了。 Java泛型好好学习一下。 【定义】 一、泛型的定义主要有以下两种&#xff1a; 在程序编码中一些包含类型参数的类型&#xff0c;也就是说泛型的参数只可以代表类&#xff0c;不能代表个别对象。&#x…

GitHub与Git入门

一、GitHub GitHub为开发者提供Git仓库的托管服务&#xff0c;可以进行代码共享、团队协同开发&#xff0c;创建了社会化&#xff08;social coding&#xff09;编程的概念。 二、GitHub与Git的区别 开发者将源代码存入“Git”仓库&#xff0c;而GitHub则在网络上提供Git仓库…

《UML大战需求分析》阅读笔记1

通过阅读本书的序和第一章&#xff0c;让我对于UML的理解更加深刻了&#xff0c;并且懂了怎样把你UML学的更好。 作者先让我们明白什么是UML&#xff0c;大概知道了UML各个图的形态和各种用途&#xff0c;然后再详细的介绍各个图怎样使用。 UML是个非必要的建模工具&#xff0c…

裸奔的支付X聊天,你还敢用吗?

“ 一直想在社交领域突破的某付宝&#xff0c;却自始至终对社交功能如此的不用心&#xff0c;让用户的数据在网络中裸奔&#xff0c;使用户不寒而栗。”没错&#xff0c;这篇文章要说的就是BAT中A家的支付X&#xff0c;那个千方百计做社交的支付工具。如果你使用了它的聊天窗口…

MVC3项目依赖文件错误解决

MVC3的项目依赖分为两大类&#xff1a; 1、ASP.NET Web Pages 2、ASP.NET MVC 3 如果没有正确引入&#xff0c;或者项目的版本有错误会出现程序集引用错误。 在服务器上部署时&#xff0c;解决思路如下&#xff1a; 1、下载MVC3的安装包&#xff0c;然后在服务器上安装&#xf…

让自己的开源项目支持CocoaPods集成

平时我们会经常用CocoaPods集成第三方库&#xff0c;那如何使自己的代码也可以通过CocoaPods集成呢&#xff1f;只需要简单几步&#xff1a; 创建git仓库&#xff0c;把代码提交到Github或码云等在git仓库中创建.Podspec文件&#xff0c;修改里面的配置&#xff08;如代码的版…

由于客户端检测到一个协议错误 代码0x1104

重新连接N次都还是这个错误提示&#xff0c;最后再重起电脑&#xff0c;还是没用。研究了一下错误终于解决了。 首先检查远程连接端口对不对&#xff1f;Windows远程默认的连接端口是3389&#xff0c;一般大家连接时直接输入IP或域名就可以连接了。如果还要加:端口号的话&#…

使用Fiddler抓取手机HTTP流量包

“ Fiddler手机流量抓包实战。”Fiddler作为一个PC端的HTTP/HTTPS协议分析工具&#xff0c;不仅能够抓取PC上的流量&#xff0c;还能作为代理&#xff0c;抓取手机流量&#xff0c;在之前的文章《使用Fiddler进行HTTP流量分析》中介绍了Fiddler的基本用法&#xff0c;本文介绍如…

Spark Steaming 点滴

Spark Streaming 模块是对于 Spark Core 的一个扩展&#xff0c;目的是为了以高吞吐量&#xff0c;并且容错的方式处理持续性的数据流。目前 Spark Streaming 支持的外部数据源有 Flume、 Kafka、Twitter、ZeroMQ、TCP Socket 等。Discretized Stream 也叫 DStream) 是 Spark S…

CocoaPods远程私有库

上一篇&#xff08;让自己的开源项目支持CocoaPods集成&#xff09;介绍了将自己开发的框架代码发布到Cocoapods&#xff0c;全球的开发者都可以通过pod search搜索到我们的框架代码以及通过pod install进行安装。但有时候我们希望只有我们项目内部的人才可以集成和修改&#x…

大数据平台的秘密

大数据&#xff0c;这个词越来越热&#xff0c;很多人都在谈大数据&#xff0c;其实很多张口闭口大数据的人&#xff0c;或许都不知道数据是如何产生、传递、存储、运算到应用。有段时间&#xff0c;看到一些大数据文章&#xff0c;就感觉纯属凑热闹&#xff0c;小数据都没搞明…

Fiddler使用技巧:强大的数据文本编解码功能

“ 郑重推荐Fiddler工具自带的TextWizard功能。”Fiddler作为一个HTTP类协议的抓包分析工具&#xff0c;之前已介绍过抓包分析功能&#xff0c;可参考文章&#xff1a;《使用Fiddler进行HTTP流量分析》《使用Fiddler抓取手机HTTP流量》在抓包分析功能之外&#xff0c;我们一定不…

jquery validate 详解一

jQuery校验 官网地址&#xff1a;http://bassistance.de/jquery-plugins/jquery-plugin-validation 一导入js库 <script src"../js/jquery.js" type"text/javascript"></script><script src"../js/jquery.validate.js" type"…

安装VMWare tools,以及解决安装后/mnt中有hgfs但没共享文件的方法

一、首先是安装VMWare tools安装过程可参考&#xff1a;http://www.cnblogs.com/jiu0821/p/7559949.html二、解决安装VMWare tools后/mnt中有hgfs但没共享文件 前提&#xff1a;在虚拟机软件中设置了共享目录 此时在linux中进入 /mnt/hgfs 文件夹&#xff0c;但发现共享的文件没…

音乐(文件)断点下载

这篇文章介绍音乐等文件的下载&#xff0c;支持断点续传。 我们需要创建两个类 HYDownLoader&#xff1a;音乐下载的主类&#xff0c;可以进行新建下载、暂停下载、取消下载等。 HYFileTool&#xff1a;文件管理类&#xff0c;主要为HYDownLoader服务&#xff0c;可以判断文件…

php设计模式

原型模式&#xff08;prototype&#xff09; PHP设计模式之&#xff1a;原型模式 刚刚了解了原型模式&#xff0c;通过资料以及自身了解整合以下资料&#xff1a; 原型模式通过复制已经存在的实例来返回新的实例&#xff0c;而不是新建实例&#xff0c;并且原型&#xff08;被复…

TextKit及应用

在iOS开发中我们常常使用UIKit的UITextView、UITextField、UILabel来显示文字。它们底层都是基于一个叫做TextKit的强大引擎。通过TextKit&#xff0c;我们可以方便地修改文字的样式和排版&#xff0c;而不需要直接操作复杂的Core Text。 1.什么是TextKit 在iOS7中&#xff0c…

判断类之间的父子关系

如何判断两个类之间的父子关系&#xff1f; java为我们提供了instanceof运算符&#xff0c;可以用来判断一个对象是否是否个类的实例&#xff0c;所以很容易的想到子类的对象肯定是父类的实例。但是如何所涉及到的类是不可实例化的该怎么办呢&#xff1f;好在java的Class为我们…

顺F速运,你被爱加M坑了

“ 顺F速运APP安全性分析。”之前的文章《Wireshark分析实战&#xff1a;某达速递登录帐号密码提取》对某达速递的APP进行了分析&#xff0c;该APP将数据完全暴露于网络流量中。于是对快递行业老大顺F速运的APP进行了分析&#xff0c;发现该APP质量还算上乘&#xff0c;但是&am…

[大数据之Spark]——Actions算子操作入门实例

Actions reduce(func) Aggregate the elements of the dataset using a function func (which takes two arguments and returns one). The function should be commutative and associative so that it can be computed correctly in parallel. 这个方法会传入两个参数&#x…

Runloop总结

1.什么是Runloop Runloop字面上翻译就是运行循环&#xff0c;也就是一直在转圈圈运行着&#xff0c;类似于do…while()。我们思考一个问题&#xff1a; 一个线程执行完成后就会退出&#xff0c;当我们启动一个iOS APP时&#xff0c;系统会调用main.m文件的main()函数: int m…

Android拷贝工程不覆盖原工程的配置方法

http://www.2cto.com/kf/201203/125131.html 在Eclipse中改包名的时候选择refactor-->rename,勾选Rename subpackages,这样就不需要一个个修改每个类中导入的包名了转载于:https://www.cnblogs.com/leihupqrst/p/3670224.html

顺F速运国际版,你的密码漏点了

“ 对顺F旗下各APP顺藤摸瓜分析——顺F速运国际版。”前文《顺F速运&#xff0c;你被爱加M坑了》提到&#xff0c;顺F速运APP使用爱加密加壳&#xff0c;流量中传输内容被加密并BASE64编码了&#xff0c;只是安全性不够&#xff0c;壳没有将顺丰的加密算法及密钥保护好。秉承避…

利用Injection插件加快Xcode编译速度

我们在调试iOS原生代码时&#xff0c;每次修改都需要CommandR来重新编译运行。当项目代码量很大&#xff0c;编译时间就会很漫长。因此对于开发中来说&#xff0c;如果能加快编译速度&#xff0c;能大大提高生产效率。如果我们能像Swift Playground、小程序或网页那样修改代码后…