Tomcat中间件常见漏洞及修复方案

1、Tomcat管理弱口令页面Getshell、Tomcat PUT方法任意文件上传

删除 webapps 目录中的 docs、examples、host-manager、manager 等正式环境用不着的目录,这一步就可以解决大部分漏洞。

2、tomcat中间件版本信息泄露

修改tomcat/lib/catalina.jar 中
org/apache/catalina/util/ServerInfo.properties

注释掉版本信息

# server.info=Apache Tomcat

# server.number=0.0.0.0

# server.built=Nov 7 2016 20:05:27 UTC

3、Tomcat-Ajp协议漏洞(高危漏洞)

如未使用 Tomcat AJP 协议:

如未使用 Tomcat AJP 协议,可以直接将 Tomcat 升级到 9.0.31、8.5.51 或 7.0.100 版本进行漏洞修复。如无法立即进行版本更新、或者是更老版本的用户,建议直接关闭 AJPConnector,或将其监听地址改为仅监听本机 localhost。

具体操作:

(1)编辑 <CATALINA_BASE>/conf/server.xml,找到如下行(<CATALINA_BASE> 为 Tomcat 的工作目录):

<Connector port=”8009″protocol=”AJP/1.3″ redirectPort=”8443″ />

(2)将此行注释掉(也可删掉该行)

<!–<Connectorport=”8009″ protocol=”AJP/1.3″redirectPort=”8443″ />–>

(3)保存后需重新启动,规则方可生效。

踩坑提醒:tomcat6如使用apache的jk方式集成做负载,注释掉tomcat的<Connector port=”8019″ protocol=”AJP/1.3″ redirectPort=”8443″/>这个后会出现问题

在worker.properties 文件中添加worker.secrect=YOUR_TOMCAT_AJP_SECRET

此方式已验证,tomcat6不可用

那么使用Apache2 使用 Http 实现类似 ip_hash 机制 session 软负载

(1)启用模块

打开 httpd.conf 启动如下模块:

LoadModule headers_module modules/mod_headers.so

(2)在 conf 目录下新增配置文件 balance.conf,内容如下:

#提供基础的代理功能
LoadModule proxy_module modules/mod_proxy.so
#提供负载均衡的功能
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#代理http协议
LoadModule proxy_http_module modules/mod_proxy_http.so
 
#负载均衡的算法模块
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
#兼容低版本访问
LoadModule access_compat_module modules/mod_access_compat.so
 
ProxyRequests Off 
 
#启用类似ip_hash机制配置
ProxyPreserveHost on
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
 
#代理关联配置loadfactor可以分发请求权重,loadfactor越大,权重越大
<Proxy balancer://mycluster> 
  BalancerMember http://localhost:8001 loadfactor=1 route=tomcat7_1
  BalancerMember http://localhost:8002 loadfactor=1 route=tomcat7_2
 
  #热部署,当着备份服务,当tomcat7_1和tomcat7_2死掉的时候,就自动访问tomcat7_3 
  #BalancerMember http://localhost:9080 loadfactor=1 route=tomcat7_3  status=+H 
</Proxy> 
#启用类似ip_hash机制配置
ProxyPass / balancer://mycluster/  stickysession=ROUTEID   nofailover=On
#负载均衡控制台,通过http://localhost/balancer-manager 访问
<Location /balancer-manager> 
    SetHandler balancer-manager 
    Order Deny,Allow 
    Allow from all 
    #Allow from localhost 
</Location> 

(3)httpd.conf 引入步骤 2 中的配置文件

include conf/balance.conf

(4)重启 Apache

4、远程代码执行

影响9.0.0.M1 ~ 9.0.17, 8.5.0 ~ 8.5.39 , 7.0.0 ~ 7.0.93版本的tomcat

修改web.xml中

Tomcat中间件常见漏洞及修复方案

变为

Tomcat中间件常见漏洞及修复方案

放开注释

Tomcat中间件常见漏洞及修复方案

放开注释

接着在conf/context.xml 中的<Context>添加privileged=”true”语句

Tomcat中间件常见漏洞及修复方案

webappsROOTWEB-INF下创建一个cgi-bin文件夹,并在文件夹内创建一个bat文件写入

@echo off
echo Content-Type: text/plain
echo.
set off=%~1
%off%

5、slow http denial of service attack

slow http denial of service attack漏洞是利用http post的时候,指定一个非常大的content-length,然后以很低的速度发包,比如10-100s发一个字节,让这种连接不断开,这样当客户端连接多了后,占用了webserver的所有可用连接,从而导致DOS,属于一种打拒绝服务攻击。

解决方法:

打开server.xml找到 将其中的connectionTimeout=”20000″改为1000,其单位为ms。

<Connector port="8080" protocol="HTTP/1.1"
  connectionTimeout="20000"
  redirectPort="8443" />

感兴趣的朋友请关注转发,下期发布一些web应用漏洞及修复方案

站长微信:yqq8233(长安复制)公众号:vzyun222

发表评论

登录后才能评论