天天看點

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伺服器上的類,造成指令執行。