fastjson反序列化-JdbcRowSetImpl利用链
这里涉及了JNDI与RMI的概念。
其本质为JNDI注入。
附上示例代码
JdbcRowSetImplPoC.java
RMIServer.java
EvilObject.java
我们在JSONObject.parse方法下断点调试
还是调用了parse.Object,步入
调用deserialze方法,进行反序列化
接下来会对JdbcRowSetImpl进行 初始化
在调用完构造函数后,parseObject还会去调用set方法。
根据poc的字段,可以在setDataSourceName与setAutoCommit下断点。
发现确实调用了这两个函数,在setDataSourceName方法中设置了数据源,setAutoCommit方法中,调用了connect方法。
connect方法
lookup方法
decodeObject中就是解析reference,之后调用getOnjectInstance去实例化对象。
调用流程总结:
具体利用方法:
搭建一个rmi服务器和一个http服务器
将exp类部署到http服务器上。
如果目标网站存在fastjson包,且有json格式数据的输入点。则可以构造json数据,达到远程调用http服务器上的类,造成命令执行。