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方法触发。
调用栈分析
测试代码执行后的调用栈如下:
Hessian反序列化入口toString方法触发Fastjson相关处理最终执行点
JSON.toString分析
关键点在于JSON.toString方法的实现:
public String toString() {
// 会触发对象的各种getter方法
return JSON.toJSONString(this);
}
Sink点寻找
H2 Database利用
主要关注h2database依赖提供的危险功能:
-
JdbcDataSource类:传统利用点,但已被黑名单拦截
org.h2.jdbcx包下的类都被禁用
-
替代实现类:
- 需要寻找未被黑名单覆盖的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');
完整利用链
- 通过Hessian反序列化入口传入恶意对象
- 触发对象的
toString方法 toString触发Fastjson的序列化过程- Fastjson调用H2相关类的getter方法
- 通过H2数据库功能执行系统命令
- 绕过SecurityManager限制
防御建议
- 加强黑名单覆盖更多H2相关类
- 禁用不必要的依赖(h2database如果不需要)
- 监控反序列化过程中的toString调用
- 实施更严格的白名单机制替代黑名单
参考资源
- H2 Database JNDI利用
- Fastjson反序列化漏洞原理
- Hessian协议安全分析
通过这种精妙的利用链,攻击者可以绕过框架的多重防护,最终实现命令执行。理解这种利用方式有助于更好地防御类似攻击。