SOLON 框架绕过 hessaion 黑名单利用
字数 1099 2025-08-22 12:23:30

SOLON框架绕过Hessian黑名单利用分析

前言

本文详细分析SOLON框架中Hessian反序列化漏洞的绕过利用技术,特别关注如何绕过内置的黑名单防护机制。该技术在近期网络安全竞赛(如SU比赛和国赛)中多次出现,具有实际应用价值。

环境分析

关键依赖

  • Fastjson: 提供JSON处理能力
  • H2 Database: 嵌入式数据库,包含潜在的危险功能
  • Hessian: 反序列化入口点

反序列化入口

代码中提供了一个Hessian的反序列化入口点,这是漏洞利用的起点。

防护机制分析

黑名单防护

框架内置了serialize.blacklist防护机制,禁用了大量危险类:

// 示例黑名单内容
checkExec // 拦截命令执行相关类
org.h2.jdbcx.* // 禁用H2 JDBC相关类

toString触发点

观察发现反序列化过程中会触发toString方法,这为绕过提供了可能性:

// 反序列化入口代码示例
Object obj = hessianDeserialize(input);
String str = obj.toString(); // 关键触发点

利用链构建

Fastjson原生反序列化关联

由于会触发toString,可以联想到Fastjson的原生反序列化利用方式,因为Fastjson的入口也是通过toString方法触发。

调用栈分析

测试代码执行后的调用栈如下:

  1. Hessian反序列化入口
  2. toString方法触发
  3. Fastjson相关处理
  4. 最终执行点

JSON.toString分析

关键点在于JSON.toString方法的实现:

public String toString() {
    // 会触发对象的各种getter方法
    return JSON.toJSONString(this);
}

Sink点寻找

H2 Database利用

主要关注h2database依赖提供的危险功能:

  1. JdbcDataSource类:传统利用点,但已被黑名单拦截

    • org.h2.jdbcx包下的类都被禁用
  2. 替代实现类

    • 需要寻找未被黑名单覆盖的H2实现类
    • 最终找到可用的实现类:org.h2.jdbc.JdbcConnection

H2命令执行绕过

关键优势:H2提供的命令执行方法可以绕过SecurityManager限制:

CREATE ALIAS EXEC AS 'String exec(String cmd) throws java.io.IOException {
    java.util.Scanner s = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream());
    return s.hasNext() ? s.next() : "";}';
CALL EXEC('whoami');

完整利用链

  1. 通过Hessian反序列化入口传入恶意对象
  2. 触发对象的toString方法
  3. toString触发Fastjson的序列化过程
  4. Fastjson调用H2相关类的getter方法
  5. 通过H2数据库功能执行系统命令
  6. 绕过SecurityManager限制

防御建议

  1. 加强黑名单覆盖更多H2相关类
  2. 禁用不必要的依赖(h2database如果不需要)
  3. 监控反序列化过程中的toString调用
  4. 实施更严格的白名单机制替代黑名单

参考资源

通过这种精妙的利用链,攻击者可以绕过框架的多重防护,最终实现命令执行。理解这种利用方式有助于更好地防御类似攻击。

SOLON框架绕过Hessian黑名单利用分析 前言 本文详细分析SOLON框架中Hessian反序列化漏洞的绕过利用技术,特别关注如何绕过内置的黑名单防护机制。该技术在近期网络安全竞赛(如SU比赛和国赛)中多次出现,具有实际应用价值。 环境分析 关键依赖 Fastjson : 提供JSON处理能力 H2 Database : 嵌入式数据库,包含潜在的危险功能 Hessian : 反序列化入口点 反序列化入口 代码中提供了一个Hessian的反序列化入口点,这是漏洞利用的起点。 防护机制分析 黑名单防护 框架内置了 serialize.blacklist 防护机制,禁用了大量危险类: toString触发点 观察发现反序列化过程中会触发 toString 方法,这为绕过提供了可能性: 利用链构建 Fastjson原生反序列化关联 由于会触发 toString ,可以联想到Fastjson的原生反序列化利用方式,因为Fastjson的入口也是通过 toString 方法触发。 调用栈分析 测试代码执行后的调用栈如下: Hessian反序列化入口 toString方法触发 Fastjson相关处理 最终执行点 JSON.toString分析 关键点在于 JSON.toString 方法的实现: Sink点寻找 H2 Database利用 主要关注 h2database 依赖提供的危险功能: JdbcDataSource类 :传统利用点,但已被黑名单拦截 org.h2.jdbcx 包下的类都被禁用 替代实现类 : 需要寻找未被黑名单覆盖的H2实现类 最终找到可用的实现类: org.h2.jdbc.JdbcConnection H2命令执行绕过 关键优势:H2提供的命令执行方法可以绕过SecurityManager限制: 完整利用链 通过Hessian反序列化入口传入恶意对象 触发对象的 toString 方法 toString 触发Fastjson的序列化过程 Fastjson调用H2相关类的getter方法 通过H2数据库功能执行系统命令 绕过SecurityManager限制 防御建议 加强黑名单覆盖更多H2相关类 禁用不必要的依赖(h2database如果不需要) 监控反序列化过程中的toString调用 实施更严格的白名单机制替代黑名单 参考资源 H2 Database JNDI利用 Fastjson反序列化漏洞原理 Hessian协议安全分析 通过这种精妙的利用链,攻击者可以绕过框架的多重防护,最终实现命令执行。理解这种利用方式有助于更好地防御类似攻击。