标注的博客| 安全研究| 渗透测试| APT

首页

从 ajax 聊一聊 jsonp 点击劫持

作者 prehn 时间 2020-03-31
all

偶然看到 freebuf 去年的一篇文章,JSONP 注入解析 http://www.freebuf.com/articles/web/126347.html 看完整篇文章并没有太理解其提到的 JSONP,仔细查阅了相关资料,在这里将所得与大家分享~ 从 Ajax 谈起 1.先提两个众所周知的概念: 1、Ajax,Asynchronous JavaScript and XML,意思就是用 JavaScript 执行异步网络请求。

Asynchronous JavaScript and XML

2、Web 的运作原理:一次 HTTP 请求对应一个页面。 2.那么问题来了 当我需要用户感觉自己仍然停留在当前页面,但是部分页面(数据)却可以不断地更新,我该如何去实现呢? 当然是让用户留在当前页面中,同时发出新的 HTTP 请求,这时就必须用 JavaScript 发送这个新请求,接收到数据后,再用 JavaScript 更新页面 3.举个例子: 注意上面代码中的请求地址,这是我七牛云储存的一个 test2.txt 的外链,当我在和其同源的 http://7xrous.com1.z0.glb.clouddn.com/test.txt 的控制台中运行这段代码,弹窗 success

test2.txt http://7xrous.com1.z0.glb.clouddn.com/test.txt

但是当我在不同源的地方,比如 google 的控制台去运行,则弹窗 fail 4.同源的概念: 对于绝对的 URIs,源就是{协议,主机,端口}定义的。只有这些值完全一样才认为两个资源是同源的。 5.又一个问题来了 一个公司拥有很多子域名,比如说官网 xxx.com 的一个 Ajax 需要调用 download.xxx.com 的某个资源,跨域了,不可调用,这该怎么办?

xxx.com download.xxx.com

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

jsonp

再来聊聊 Jsonp 1.什么是 jsonp? jsonp 就是跨域的一种手段,Jsonp 有个限制,只能用 GET 请求,并且要求返回 JavaScript。 这种方式跨域实际上是利用了浏览器允许跨域引用 JavaScript 资源,类似这种: 2.举个例子,演示 jsonp: 本地环境: wamp

wamp

sever 端 1.html 代码:

1.html

效果图: 3.JSONP 的两部分: 回调函数和数据。回调函数是当响应到来时应该在页面中调用的函数,而数据就是传入回调函数中的 JSON 数据。 Jsonp hijacking 演示 下面用自己的云服务器模拟环境演示下如何进行 Jsonp hijacking 攻击

Jsonp hijacking

云服务器端(演示的是站点的某些存在漏洞 api 接口,也可以说是信息泄露): 水坑攻击端 所谓水坑攻击,用打战的观点来说,就是在必经之路设下埋伏 效果图: 总结 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 文章如有解释的不正确的地方,欢迎指出,共同讨论~