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方法作为注入点,原因如下:
- 位于HTTP请求调用栈的上层
- 不与具体URL耦合
- 能接受客户端request中的数据
方法分析
internalDoFilter方法原型:
private void internalDoFilter(ServletRequest request, ServletResponse response)
throws IOException, ServletException {}
该方法特点:
- 包含ServletRequest和ServletResponse参数,封装了用户请求的request和response
- 是自定义filter的入口点
- 包含安全相关的处理逻辑
复现环境搭建
1. Java环境搭建
步骤:
- 从Oracle官网下载Linux版JDK
- 解压到/usr/local目录
- 配置环境变量:
添加以下内容:vi /etc/profileexport 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 - 使配置生效:
source /etc/profile - 验证安装:
java -version
2. Tomcat安装配置
步骤:
- 从官网下载Tomcat 9
- 解压到/usr/local目录并重命名:
tar zxvf apache-tomcat-9.0.38 sudo mv apache-tomcat-9.0.38 tomcat9 - 配置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 ../.. - 创建专用用户:
sudo adduser tomcat - 设置权限:
sudo chown -R tomcat:tomcat /usr/local/tomcat9 - 启动Tomcat:
su tomcat ./daemon.sh start - 验证安装:访问
http://127.0.0.1:8080
内存注入实施
使用memShell工程
步骤:
- 将memShell工程文件上传到Tomcat服务器
- 执行注入命令:
(其中pppd为自定义密码)java -jar inject.jar pppd
验证注入
访问任意URL并附加参数:
http://[target]/anyurl?pass_the_word=pppd
可用命令示例:
whoami- 获取当前用户名- 其他功能参考返回的帮助信息
技术扩展
-
该技术不仅限于Tomcat,理论上适用于:
- JBOSS
- WebLogic
- 其他Java Web容器
-
差异点主要在于"定位关键类"的步骤
-
可通过修改源代码实现更多功能
安全建议
- 定期更新Java和Tomcat版本
- 监控JVM中加载的代理程序
- 限制对JMX端口的访问
- 使用安全管理器限制敏感操作
参考资源
- 利用"进程注入"实现无文件复活WebShell
- Ubuntu下配置Tomcat以指定(非root)身份运行
- GitHub上的memShell工程
后记
本教程详细介绍了Tomcat进程注入技术的原理和实现方法,重点在于理解Java Instrumentation机制和Tomcat处理请求的流程。该技术展示了Java Web应用潜在的安全风险,安全人员应充分了解此类技术以便更好地防御。