通用Tomcat InvokerServlet RCE攻击链挖掘
字数 1935 2025-08-24 23:51:09

Tomcat InvokerServlet RCE攻击链挖掘与分析

一、背景与概述

Tomcat的InvokerServlet是一种早期的Servlet路由机制,允许通过URL直接调用未在web.xml中显式声明的Servlet类。这种配置在Tomcat 6及更早版本中存在,由于安全问题在Tomcat 7及以后版本中被移除。本文详细分析基于InvokerServlet的两种RCE攻击链:BeanShell和Axis2。

二、InvokerServlet技术细节

2.1 InvokerServlet工作原理

InvokerServlet (org.apache.catalina.servlets.InvokerServlet)允许通过URL路径直接访问Servlet类,无需在web.xml中显式配置。访问格式为:

/servlet/完整类名

例如:/servlet/com.xxx.XxxServlet

2.2 技术限制

  1. 类要求:调用的类必须实现Servlet接口,并包含处理HTTP请求的方法
  2. 版本限制:仅Tomcat 6及更早版本支持此功能
  3. 安全限制:禁止调用org.apache.catalina包下的类

2.3 源码分析关键点

InvokerServlet的核心处理逻辑:

  1. 提取请求路径中第一个"/"后的字符串
  2. 根据该字符串查找对应的Servlet类
  3. 实例化并调用该Servlet处理请求

三、BeanShell攻击链分析

3.1 BeanShell简介

BeanShell是一种基于Java的脚本语言,完全兼容Java语法,同时有自己的扩展功能。关键危险函数:

exec("系统命令")  // 可直接执行系统命令

3.2 攻击Servlet定位

bsh.servlet.BshServlet是BeanShell提供的测试Servlet,可通过URL直接访问:

/servlet/bsh.servlet.BshServlet

3.3 攻击原理

该Servlet接受bsh.script参数直接执行BeanShell代码,结合InvokerServlet可构造RCE:

/servlet/bsh.servlet.BshServlet?bsh.script=exec("系统命令")

3.4 WAF绕过技巧

  1. 使用Java字符串处理对命令进行编码/混淆
  2. 利用BeanShell语言特性构造非常规语法
  3. 通过注释、字符串拼接等方式绕过简单检测

四、Axis2攻击链分析

4.1 Axis2简介

Axis2是流行的WebService引擎,提供管理控制台功能,默认凭证为admin/axis2。

4.2 常规Axis2 RCE流程

  1. 准备恶意aar包:
    • 包含恶意Java类
    • 配置services.xml定义服务
  2. 登录控制台(/axis2/axis2-admin)
  3. 上传并部署aar包
  4. 访问部署的服务触发RCE

4.3 InvokerServlet下的攻击方法

关键Servlet:org.apache.axis2.webapp.AxisAdminServlet

4.3.1 URL处理机制

  1. InvokerServlet:取第一个"/"后的内容作为Servlet类名
  2. AxisAdminServlet:取最后一个"/"后的内容作为方法名

因此可构造特殊URL同时满足两者:

/servlet/org.apache.axis2.webapp.AxisAdminServlet/方法名

4.3.2 具体攻击步骤

  1. 登录获取Session:

    /servlet/org.apache.axis2.webapp.AxisAdminServlet/login
    

    使用默认凭证admin/axis2

  2. 上传恶意aar包:

    /servlet/org.apache.axis2.webapp.AxisAdminServlet/upload
    
  3. 访问部署的服务触发RCE:

    /services/恶意服务名
    

五、黑盒测试经验

5.1 识别特征

  1. URL路径中包含/xxx.xxx.xxxServlet模式
  2. 系统使用Tomcat 6或更早版本
  3. 响应中可能包含Tomcat 6特有头信息

5.2 测试方法

  1. 先尝试无参数访问可疑Servlet路径,确认是否存在
  2. 尝试BeanShell攻击链:
    /servlet/bsh.servlet.BshServlet
    
  3. 检查Axis2是否存在:
    • 尝试访问/servlet/org.apache.axis2.webapp.AxisAdminServlet/login
    • 使用默认凭证测试

5.3 类似场景扩展

其他系统可能实现类似的"InvokerServlet"机制,例如:

  • 用友NC的/servlet/~ic/bsh.servlet.BshServlet
  • 自定义路由机制实现的类似功能

六、防御建议

  1. 升级到Tomcat 7或更高版本
  2. 如必须使用Tomcat 6,移除或禁用InvokerServlet
  3. 检查并移除不必要的Servlet依赖(如BeanShell)
  4. 对Axis2等组件:
    • 修改默认凭证
    • 限制控制台访问
    • 移除不必要的功能模块
  5. 部署WAF规则检测此类攻击模式

七、总结

InvokerServlet配置在Tomcat 6环境中存在严重安全隐患,特别是当系统引入了BeanShell或Axis2等组件时,可导致直接RCE漏洞。本文详细分析了两种典型攻击链的实现原理和利用方法,为安全测试和防御提供了完整参考。

Tomcat InvokerServlet RCE攻击链挖掘与分析 一、背景与概述 Tomcat的InvokerServlet是一种早期的Servlet路由机制,允许通过URL直接调用未在web.xml中显式声明的Servlet类。这种配置在Tomcat 6及更早版本中存在,由于安全问题在Tomcat 7及以后版本中被移除。本文详细分析基于InvokerServlet的两种RCE攻击链:BeanShell和Axis2。 二、InvokerServlet技术细节 2.1 InvokerServlet工作原理 InvokerServlet ( org.apache.catalina.servlets.InvokerServlet )允许通过URL路径直接访问Servlet类,无需在web.xml中显式配置。访问格式为: 例如: /servlet/com.xxx.XxxServlet 2.2 技术限制 类要求 :调用的类必须实现Servlet接口,并包含处理HTTP请求的方法 版本限制 :仅Tomcat 6及更早版本支持此功能 安全限制 :禁止调用 org.apache.catalina 包下的类 2.3 源码分析关键点 InvokerServlet的核心处理逻辑: 提取请求路径中第一个"/"后的字符串 根据该字符串查找对应的Servlet类 实例化并调用该Servlet处理请求 三、BeanShell攻击链分析 3.1 BeanShell简介 BeanShell是一种基于Java的脚本语言,完全兼容Java语法,同时有自己的扩展功能。关键危险函数: 3.2 攻击Servlet定位 bsh.servlet.BshServlet 是BeanShell提供的测试Servlet,可通过URL直接访问: 3.3 攻击原理 该Servlet接受 bsh.script 参数直接执行BeanShell代码,结合InvokerServlet可构造RCE: 3.4 WAF绕过技巧 使用Java字符串处理对命令进行编码/混淆 利用BeanShell语言特性构造非常规语法 通过注释、字符串拼接等方式绕过简单检测 四、Axis2攻击链分析 4.1 Axis2简介 Axis2是流行的WebService引擎,提供管理控制台功能,默认凭证为admin/axis2。 4.2 常规Axis2 RCE流程 准备恶意aar包: 包含恶意Java类 配置services.xml定义服务 登录控制台( /axis2/axis2-admin ) 上传并部署aar包 访问部署的服务触发RCE 4.3 InvokerServlet下的攻击方法 关键Servlet: org.apache.axis2.webapp.AxisAdminServlet 4.3.1 URL处理机制 InvokerServlet :取第一个"/"后的内容作为Servlet类名 AxisAdminServlet :取最后一个"/"后的内容作为方法名 因此可构造特殊URL同时满足两者: 4.3.2 具体攻击步骤 登录获取Session: 使用默认凭证admin/axis2 上传恶意aar包: 访问部署的服务触发RCE: 五、黑盒测试经验 5.1 识别特征 URL路径中包含 /xxx.xxx.xxxServlet 模式 系统使用Tomcat 6或更早版本 响应中可能包含Tomcat 6特有头信息 5.2 测试方法 先尝试无参数访问可疑Servlet路径,确认是否存在 尝试BeanShell攻击链: 检查Axis2是否存在: 尝试访问 /servlet/org.apache.axis2.webapp.AxisAdminServlet/login 使用默认凭证测试 5.3 类似场景扩展 其他系统可能实现类似的"InvokerServlet"机制,例如: 用友NC的 /servlet/~ic/bsh.servlet.BshServlet 自定义路由机制实现的类似功能 六、防御建议 升级到Tomcat 7或更高版本 如必须使用Tomcat 6,移除或禁用InvokerServlet 检查并移除不必要的Servlet依赖(如BeanShell) 对Axis2等组件: 修改默认凭证 限制控制台访问 移除不必要的功能模块 部署WAF规则检测此类攻击模式 七、总结 InvokerServlet配置在Tomcat 6环境中存在严重安全隐患,特别是当系统引入了BeanShell或Axis2等组件时,可导致直接RCE漏洞。本文详细分析了两种典型攻击链的实现原理和利用方法,为安全测试和防御提供了完整参考。