从 Ajax 聊一聊 Jsonp 点击劫持

web安全 2019-11-10

偶然看到 freebuf 去年的一篇文章,JSONP 注入解析

http://www.freebuf.com/articles/web/126347.html

看完整篇文章并没有太理解其提到的 JSONP,仔细查阅了相关资料,在这里将所得与大家分享~

从 Ajax 谈起

1.先提两个众所周知的概念:

1、Ajax,Asynchronous JavaScript and XML,意思就是用 JavaScript 执行异步网络请求。

2、Web 的运作原理:一次 HTTP 请求对应一个页面。

2.那么问题来了

当我需要用户感觉自己仍然停留在当前页面,但是部分页面(数据)却可以不断地更新,我该如何去实现呢?

当然是让用户留在当前页面中,同时发出新的 HTTP 请求,这时就必须用 JavaScript 发送这个新请求,接收到数据后,再用 JavaScript 更新页面

3.举个例子:

img

注意上面代码中的请求地址,这是我七牛云储存的一个 test2.txt 的外链,当我在和其同源的 http://7xrous.com1.z0.glb.clouddn.com/test.txt 的控制台中运行这段代码,弹窗 success

img

但是当我在不同源的地方,比如 google 的控制台去运行,则弹窗 fail

img

4.同源的概念:

对于绝对的 URIs,源就是{协议,主机,端口}定义的。只有这些值完全一样才认为两个资源是同源的。

5.又一个问题来了

一个公司拥有很多子域名,比如说官网 xxx.com 的一个 Ajax 需要调用 download.xxx.com 的某个资源,跨域了,不可调用,这该怎么办?

jsonp 就是一种解决跨域的手段,而问题也就出在这里~

再来聊聊 Jsonp

1.什么是 jsonp?

jsonp 就是跨域的一种手段,Jsonp 有个限制,只能用 GET 请求,并且要求返回 JavaScript。

这种方式跨域实际上是利用了浏览器允许跨域引用 JavaScript 资源,类似这种:

img

2.举个例子,演示 jsonp:

本地环境: wamp

sever 端 1.html 代码:

img

效果图:

img

3.JSONP 的两部分:

回调函数和数据。回调函数是当响应到来时应该在页面中调用的函数,而数据就是传入回调函数中的 JSON 数据。

Jsonp hijacking 演示

下面用自己的云服务器模拟环境演示下如何进行 Jsonp hijacking 攻击

云服务器端(演示的是站点的某些存在漏洞 api 接口,也可以说是信息泄露):

img

水坑攻击端

所谓水坑攻击,用打战的观点来说,就是在必经之路设下埋伏

img

效果图:

img

总结

so,如果找到一个站点有利用到 jsonp 跨域,但返回的数据中又有一些重要的信息,我们可以在一个访问量高的站点,或者自己的博客(233)去插入一段 js,如果访问者都登陆过了该站点,则可以获取大批量的重要信息

这里放几个乌云镜像上之前爆出的漏洞:

2016-05-04 新浪微博之点击我的链接就登录你的微博( JSONP 劫持)

http://www.anquan.us/static/bugs/wooyun-2016-0204941.html

2016-01-27 中国联通某站 jsonp 接口跨域导致信息泄漏并可开通某些套餐(运营商额外插入功能带来的风险)

http://www.anquan.us/static/bugs/wooyun-2016-0172305.html

2016-01-20 新浪微博 JSONP 劫持之点我链接开始微博蠕虫+刷粉丝

http://www.anquan.us/static/bugs/wooyun-2016-0171499.html

文章如有解释的不正确的地方,欢迎指出,共同讨论~


本文由 信安之路 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

楼主残忍的关闭了评论