环境
JDK 8u181
Fastjson 1.2.24
POC
跟进 parse 方法
跟进到底层deserialze 方法
Poc 中传入的 dataSourceName : ldap://192.168.3.229:8084/vnSYPYwMs 值
这里实际对应 setDataSourceName 方法,调用此方法并传入 ldap
跟进 setDataSourceName 方法,这里只是简单赋值
步出回此方法
继续步出,进入parseRest方法
跟进 deserialze 方法
文章来源地址https://www.toymoban.com/news/detail-413222.html
继续跟进 setValue 方法
此处通过 invoke 反射实现方法
POC 传入的 autoCommit : true 对应
setAutoCommit 方法
跟进 connect 方法
此处通过 lookup 实现 ldap 请求
检测到 LDAP 请求
如果是LDAP请求,需要JDK版本<= 8u181
如果是RMI请求,需要JDK版本<= 8u112
那为什么会调用对应值set方法呢?尝试实验
先构造加载类
再构造Test类
通过输出分析发现 fastjson 的反序列化方法,parse 和 parseObject 类中
1、在调用 parseObject 方法时,会默认调用所有get方法,并调用传入参数的set方法
2、在调用 parse 方法时,只调用传入参数的set方法
所以可以通过 com.sun.rowset.JdbcRowSetImpl 类的 setDataSourceName 先进行赋值
再通过 com.sun.rowset.JdbcRowSetImpl 类的 autoCommit 方法去间接调用 connect 方法,去执行 lookup 方法执行 ladp 请求文章来源:https://www.toymoban.com/news/detail-413222.html
到了这里,关于fastjson 1.2.24 反序列化漏洞(审计分析)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!