fastjson 原生配合 jdk 原生的利用总结
字数 1905 2025-08-22 12:23:30
Fastjson原生配合JDK原生利用链深度分析与总结
1. Fastjson原生利用机制分析
1.1 Fastjson基础触发原理
Fastjson在序列化对象时会自动调用对象的getter方法,这是其核心利用点。关键调用链如下:
toJSONString() -> write() -> ASM序列化引擎 -> 调用getter方法
调试分析要点:
- 通过
toJSONString方法触发序列化过程 - 关键点在于
writer.write方法中的ASM序列化引擎 - ASM引擎会自动扫描并调用目标对象的所有getter方法
1.2 触发点分析
在实际利用中,触发toJSONString的方式:
- 直接调用
JSON.toJSONString() - 调用
toString()方法(因为Fastjson的JSONObject/JSONArray的toString内部会调用toJSONString) - 其他隐式序列化场景
2. JDK原生类利用链分析
2.1 TemplatesImpl利用链
利用原理:
- 利用
com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl类 - 关键触发方法:
getOutputProperties()(getter方法)
利用步骤:
- 构造恶意的TemplatesImpl对象,包含字节码
- Fastjson序列化时会调用
getOutputProperties() - 触发字节码加载和执行
调试关键点:
- 关注
getOutputProperties()调用栈 - 观察ASM如何自动触发getter方法
- 验证恶意字节码是否被成功加载
2.2 LdapAttribute利用链
利用原理:
- 利用
com.sun.jndi.ldap.LdapAttribute类 - 关键触发方法:
getAttributeDefinition() - 本质上是JNDI注入的变种利用
调用链分析:
getAttributeDefinition() -> getSchema() -> p_getSchema() -> p_resolveIntermediate() -> c_resolveIntermediate_nns() -> c_lookup()
关键调试步骤:
- 观察
getSchema()如何处理RDN解析 - 分析
p_resolveIntermediate方法:- 将输入分为头和尾两部分
- 传入
c_resolveIntermediate_nns方法
- 最终在
c_lookup方法中实现JNDI查找
2.3 SignedObject利用链
利用原理:
- 利用
java.security.SignedObject类 - 关键触发方法:
getObject() - 该方法可实现二次反序列化
利用特点:
- 需要控制
content字段的值(包含二次反序列化内容) - 可与其他反序列化链结合形成攻击链
调试要点:
- 验证
getObject()方法是否被成功调用 - 观察二次反序列化的触发过程
- 检查
content字段的构造方式
3. 组合利用实践
3.1 典型POC构造要点
-
TemplatesImpl链:
- 构造包含恶意字节码的TemplatesImpl对象
- 确保Fastjson版本存在自动调用getter的漏洞
-
LdapAttribute链:
- 构造恶意的LDAP引用
- 利用
getAttributeDefinition触发JNDI查找
-
SignedObject链:
- 构造包含二次反序列化数据的SignedObject对象
- 确保
getObject()被调用时触发后续链
3.2 防御绕过技巧
- 使用JDK原生类绕过黑名单检测
- 利用非常规getter方法(如
getAttributeDefinition) - 多层嵌套利用(如SignedObject的二次反序列化)
4. 防御建议
-
Fastjson加固:
- 升级到最新安全版本
- 启用SafeMode
- 自定义反序列化过滤器
-
JDK层面防御:
- 限制JNDI查找
- 监控可疑的类加载行为
- 禁用不必要的Java特性
-
运行时防护:
- 使用RASP解决方案
- 实施严格的输入验证
- 监控异常序列化行为
5. 深入调试技巧
-
使用IDEA调试Fastjson源码:
- 重点关注ASM序列化部分
- 跟踪getter方法调用栈
-
JDK源码调试:
- 下载对应版本的JDK源码
- 重点关注
LdapAttribute、TemplatesImpl等关键类
-
动态分析工具:
- 使用Java Agent技术监控方法调用
- 结合字节码分析工具观察恶意类加载
6. 扩展研究方向
- 其他JDK原生类的潜在利用链
- Fastjson不同版本间的差异利用
- 结合新型攻击技术(如EL表达式注入)
- 跨中间件的联合利用研究
通过深入理解Fastjson与JDK原生类的交互机制,安全研究人员可以更全面地评估Fastjson使用的风险,并开发更有效的防御策略。