fastjson反序列化-1.2.24漏洞利用与分析

本文深入探讨了Fastjson 1.2.24版本的反序列化漏洞,包括出网的JNDI注入和不出网的动态加载字节码利用方式。详细分析了JdbcRowSetImpl类的JNDI注入过程以及ClassLoader的本地类加载机制。同时,提到了利用工具和相关POC,强调了Fastjson反序列化的特殊规则和利用条件。
摘要由CSDN通过智能技术生成

本文由掌控安全学院 - xilitter投稿

0x01 利用条件

通过对fastjson基础知识的学习和反序列化流程的分析,发现它与我们之前学的常规的反序列化又不太一样。fastjson自己定义了一套反序列化规则,它不需要反序列化的类去继承Serializable接口,也不需要找readObject函数作为入口。相反,它是将类中的setter和满足特定条件的getter方法作为出发点,@type所指向的全类名必须能够找到就可以反序列化成功。总的来说,从原生反序列化中的属性可控到寻找setter或者getter方法可控。(ps:这点很重要)

本篇文章主要学习两种利用方法,出网和不出网。

0x02 出网+JNDI注入

利用类:JdbcRowSetImpl

该类有一块JNDI注入的代码逻辑:

图片

代码是反编译出来的,但是不影响。conn属性默认为空,不用管自然会走到else if。getDataSourceName是getter方法,

图片

它的返回值我们可控,就可以实现JNDI注入。那么接下来就是寻找哪个getter或者setter方法调用了connect方法,查找用法全局搜索,在本类中是有两处。

图片

我们用setAutoCommit方法,

图片

接收一个布尔型的参数,conn默认为空,自然会调用到connect方法。那可不可以用前面的getter方法,Fastjson基础篇讲到parse方法里会执行返回值类型为Map等特定的getter方法。

图片

而它的返回值只是一个普通的接口,不满足条件。

图片

但是在下面的toJSON会遍历执行所有的getter(基础篇没有写,文章最后会分析一下),前提是上面的代码不会出错,自己可以调一下,是会出错的。到此整个利用流程结束,将setAutoCommit作为入口,getDataSourceName作为输入实现JNDI注入。

使用工具Yakit起一个恶意的ldap服务,里面放着恶意类,很方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值