代码审计分析 之 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/

 

posted @ 2023-12-13 16:03  Tanya203  阅读(3)  评论(0)    收藏  举报