找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

6143

积分

0

好友

762

主题
发表于 1 小时前 | 查看: 2| 回复: 0

导语:JSON 在 REST API 和 AJAX 应用里几乎是默认数据格式。但用得广不代表它安全——服务端解析不严、客户端 eval 不加过滤、Content-Type 随手切换,这十二类 JSON 实战攻击,红队每天都在用。

一、JSON 的攻击面在哪

JSON 本身只是数据载体,攻击面主要集中在两端:服务端反序列化 和 客户端解析。常见踩点场景:

  • 服务端把用户传入的 JSON 数据未经任何过滤直接写入响应流或文件
  • 客户端用 eval() 把 JSON 字符串当代码执行
  • Content-Type 没做白名单,攻击者可以把 application/json 改成 application/xml,触发完全不同的解析器

只要 JSON 链路里有一环“裸奔”,下面这 12 类攻击至少能跑通一半。

JSON攻击分类全景

二、十二类 JSON 实战攻击

2.1 JSON 反序列化

最经典也最致命的一类。Jackson、fastjson、Python pickle 这些库如果开了 enableDefaultTyping 或者允许 @type 字段,攻击者就能传入任意类名,触发 Gadget Chain 拿 RCE。详细利用链可以参考 Black Hat 这份论文:

https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf

2.2 JSONP

通过 callback 参数让服务器返回可执行的 JS,跨域读取用户数据。Day-8 已经详细拆过,包括 Referer 绕过、CSP 配置等手法,这里不重复。

2.3 暴力破解类

针对登录、密码重置、验证码接口跑字典。JSON 接口和传统 Web 没有区别,重点盯接口限流、账户锁定策略、失败响应差异这三点。

2.4 XXE

最容易被忽略的一招。JSON 接口后端如果同时支持 XML 解析,攻击者只需要把 Content-Type: application/json 改成 application/xml,再塞一段 XML 就能触发 XXE,读文件、SSRF 甚至 RCE。

利用步骤:

  1. 抓一个 JSON 请求
  2. 改 Content-Type: application/xml
  3. 插入 XML 实体 payload
  4. 看响应有没有回显文件内容
  5. Burp 的 Content Type Convertor 插件可以一键切换

2.5 XSS

JSON 接口本身不会触发 XSS,但如果前端把响应数据直接拼到 DOM 里渲染,存储型或反射型 XSS 就来了。Fuzz 字典里可以塞 "><img src=x onerror=alert(1)> 这类 payload 测一轮。

2.6 注入类

和传统 Web 一样,SQL 注入、命令注入这些老朋友照样有效。比如登录接口:

{"username":"admin' OR '1'='1","password":"x"}

只要后端是字符串拼接而不是参数化查询,基本必中。判别诀窍:看响应里的报错信息、时间差异、布尔盲注差异。

2.7 文件包含 / 本地文件读取

后端如果有“读文件”功能,并且 path 参数没做白名单,可以直接打穿:

// 原始请求
{"user":"admin","path":"/admin.html"}

// 攻击 payload
{"user":"admin","path":"../../../../../../../../../../../etc/passwd"}

2.8 访问控制 / 逻辑漏洞

BAC——用普通用户身份改 ID 看别人的订单、改 email 把别人的账户绑到自己邮箱下。这类问题更多是开发逻辑的锅,跟 JSON 本身关系不大,但每个 JSON 接口都得过一遍。

2.9 CSRF

JSON 接口默认不带 CSRF Token,所以默认就是 CSRF 易感。HTML 表单可以通过 enctype="application/json" 触发,部分浏览器支持;更现实的打法是用 XSS 配合 fetch 直接发请求。

典型 Payload:

<form action="https://target/site/getuserinfo" method="POST"
enctype="application/json">
<input name='{"id":"1","email":"attacker@evil.com"}' type='hidden'>
<input type="submit">
</form>

2.10 JSON Hijacking

JSONP 的“孪生兄弟”,利用 <script> 标签加载跨域 JSON 响应,通过覆盖原生 JS 对象,比如 Object.prototype 的 __defineSetter__,在数据被解析时窃取。现代浏览器已修复,但在 IE 老版本、内网环境、Hybrid App 里还能用。

2.11 其他常见漏洞

Mass Assignment、Open Redirect、Parameter Tampering、Response Manipulation、Session 缺陷——JSON 接口一个都跑不掉。

2.12 进阶攻击

论文 Exploiting JSON 里提过几个冷门但有意思的攻击:

  • String Defracturing:利用字符串拆分绕过 WAF 的关键字匹配
  • Malicious Hashing:构造哈希冲突拖慢服务
  • Fused Proxy Attack:JSON↔XML 类型切换做协议跳跃
  • JSON-XML Banner Grabbing:通过响应差异识别后端栈

三、红队测试 Checklist

打 JSON 接口时,按这个顺序过一遍,效率最高:

  1. 抓包改 Content-Type——application/json ↔ application/xml,看后端解析器
  2. 注入 <> 和引号——触发 XSS 和注入类问题
  3. 路径参数遍历——看有没有本地文件读取
  4. 测 IDOR——改 user_id、order_id 越权
  5. Fuzz callback 参数——JSONP / Hijacking 链路
  6. 看报错——反序列化类的报错信息最值钱,能直接定位类名

四、防御要点

  • 服务端反序列化关掉 DefaultTyping,或加 @JsonIgnoreType 黑名单
  • Content-Type 严格白名单,只接受 application/json
  • 全链路参数化查询,禁止字符串拼接
  • 接口加 Rate Limiting + 锁定策略
  • 关键操作加 CSRF Token / SameSite Cookie
  • 前端渲染 JSON 数据必须做 HTML 转义

JSON 不是银弹。攻击面换了一种姿势,攻击者照打不误。

原文出处:learn365 Day-9 JSON Attacks
参考论文:The 13th JSON Attacks

END




上一篇:Plugin4Shell零点击RCE漏洞:波及26万台AI编程助手设备的供应链攻击
下一篇:StartLux开源决策模型:38项基准31项超Jev,毫秒级响应
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-10-2 23:46 , Processed in 0.498547 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表