天天看点

fastjson反序列化-JdbcRowSetImpl利用链

fastjson反序列化-JdbcRowSetImpl利用链

这里涉及了JNDI与RMI的概念。

其本质为JNDI注入。

附上示例代码

JdbcRowSetImplPoC.java

RMIServer.java

EvilObject.java

我们在JSONObject.parse方法下断点调试

fastjson反序列化-JdbcRowSetImpl利用链

还是调用了parse.Object,步入

fastjson反序列化-JdbcRowSetImpl利用链
fastjson反序列化-JdbcRowSetImpl利用链

调用deserialze方法,进行反序列化

fastjson反序列化-JdbcRowSetImpl利用链

接下来会对JdbcRowSetImpl进行 初始化

fastjson反序列化-JdbcRowSetImpl利用链

在调用完构造函数后,parseObject还会去调用set方法。

根据poc的字段,可以在setDataSourceName与setAutoCommit下断点。

发现确实调用了这两个函数,在setDataSourceName方法中设置了数据源,setAutoCommit方法中,调用了connect方法。

connect方法

fastjson反序列化-JdbcRowSetImpl利用链

lookup方法

fastjson反序列化-JdbcRowSetImpl利用链

decodeObject中就是解析reference,之后调用getOnjectInstance去实例化对象。

调用流程总结:

fastjson反序列化-JdbcRowSetImpl利用链

具体利用方法:​

搭建一个rmi服务器和一个http服务器

将exp类部署到http服务器上。

如果目标网站存在fastjson包,且有json格式数据的输入点。则可以构造json数据,达到远程调用http服务器上的类,造成命令执行。