代码审计分析 之 FastJson 1.2.24 反序列化漏洞
测试环境
JDK版本

Fastjson版本

构造用于演示的类

本地恶意类 Demo
在setName方法中触发exec恶意命令执行

反序列化实现类 FastJsonDemo
# 四种方法均可以触发反序列化,因为底层调用链是一样的,均调用 JSON.parse(String text,int features)

debug 链路跟踪
执行 main 方法,fastjson反序列化成功,同时发现反序列化时调用了exp恶意类中所有的set 方法
# 所以将命令执行代码放入set方法中

最终跟踪到 JavaBeanDeserializer 的 deserialze 方法,但无法继续debug进入第二个deserialze 方法
# 具体原因未研究,但找到解决方案

# 解决无法继续debug问题
结束当前debug,回到exp恶意中,添加一个返回值为Map类型的方法,且方法名以get开头

成功进入第二个 deserialze 方法,继续跟进

进入第三个 deserialze 方法,并进入for循环

第1次for循环
![]()
第2次for循环
![]()
此时再跟进for循环里的 setValue 方法

跟进到 invoke 方法

执行第96行invoke 反射方法后,成功执行恶意类中的命令执行

# 参考的很多文章详细解释每一个判断的具体作用
# 这里只简单展示fastjson反序列化底层实现
参考文章
https://blog.csdn.net/dreamthe/article/details/125526700
https://su18.org/post/fastjson/

浙公网安备 33010602011771号