fastjson最新版本_渗透测试中获取 fastjson 精确版本号的方法

本文介绍了如何通过Fastjson的JavaBeanDeserializer类中的特定代码段触发异常,从而在某些情况下暴露fastjson的精确版本。作者指出这虽然不算漏洞,但可以作为渗透测试时的有效手段,利用不当处理的异常信息来探测项目的fastjson版本,并针对已知漏洞进行测试。文章提供了两种触发方式,并给出了复现场景和相关代码。
摘要由CSDN通过智能技术生成

背景

上个月天天打游戏一直没更文,也没啥研究成果,这次就随便发点小技巧。

没有技术含量,但在某些场景下也是可以运用得到。

目前来看是可以影响到最新版本(1.2.73)的。

细节

之前在找 fastjson 漏洞时看了很多可能存在问题的代码。

其中就包括 JavaBeanDeserializer 类。

该类有一处值得关注的代码如下图。

e8201c00581f9dd8f127d50af5235afa.png

5952578e11b2f4c692fd3023b796d6bf.png

这里在某个条件成立后就会抛出一个异常。

异常的 message 会把当前 fastjson 的版本号输出。

9e0d95c1cdd512db270acb8ec230ebce.png

VERSION 常量由三个类调用,只有 JavaBeanDeserializer 比较容易由用户触发。

再回到触发条件。

0f94c6a2150fec41f563b629a356a734.png

最主要的一个条件就是当前读取到的符号不得为 “{” 和 “,”。

然后就是如何来触发它了。

JavaBeanDeserializer 主要有两种方法可以触发。

1) 当代码使用 JSON.parseObject(json , clazz) 指定期望类的方式去解析 JSON,且 clazz 不能为 fastjson 已设定的大部分类型,如“Hashmap”、“ArrayList”

2) 当使用 JSON.parse(json) 不指定期望类的时候可以通过 AutoCloseable 来触发

最后要让精确版本能够输出在页面上还要满足“异常捕获处理不当”的条件。

复现

•第一种场景

5e77b7400c9de82430ce5b43574e6c5a.png

•第二种场景

5aa876fa3d274cd0b45cc6040aa6438d.png

以上两个 payload 都是没有读到 “{”和“,” 才进入缺陷代码块抛出了异常。

更贴近真实环境可以部署一个 demo iSafeBlue/fastjson-autotype-bypass-demo[1]

74ce4ea6be5fea81606f3242699c34e1.png

总结

按我的理解来看这个还算不上漏洞,但也算是一个缺陷。

总之在渗透时遇到代码对异常信息处理不当的项目还是很有效的。

可以直接在异常信息中暴露出 fastjson 的精确版本,然后再根据版本去测试已知漏洞。

References

[1] iSafeBlue/fastjson-autotype-bypass-demo: https://github.com/iSafeBlue/fastjson-autotype-bypass-demo

[2] 博客原文: https://b1ue.cn/archives/402.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值