注:本文为“小米安全中心”原创,转载请联系“小米安全中心”
上期回顾: search-guard 在 Elasticsearch 2.3 上的运用
本文主要介绍几种跨域获取数据的方法,比较基础,但是在跨站漏洞的挖掘和利用上会起到很大的帮助。下面根据个例子简单的把遇到的跨域总结下:
场景: 网站A获取网站B上的资源,需要跨域传输数据
两种情况:
测试环境:
我们这里设置简单点,为了下面的说明,统一设置到test.com域下,只是二级域名不相同。只要不设置document.domain,这样也不算是同域
hosts设置:
ip a.test.com
ip b.test.com
测试需求:
利用a站获取到b站的资源,首先看下同源策略是怎样保证请求数据的安全的。
首先采用直接使用i
B站点要获取的data文件内容:
A站点获取数据html代码:
在chrome下访问A站的getB.html,出现
Uncaught SecurityError: Failed to read the 'contentDocument' property from 'HTMLI
同源策略直接进行了阻止,防止进行跨域操作。
很多时候会采用ajax去获取访问数据, 下面是获取数据代码:
访问,看chrome下面的提示:
XMLHttpRequest cannot load http://b.test.com/data.html . No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin ' ' is therefore not allowed access.
下面分两种情况实现跨域获取数据:
一、B站的资源是可控的
1.通过document.domain来控制
同主域名下i
document.domain=”test.com”
再次访问,成功获取到数据信息,这个是最简单的,大域是相同的,都是可以去利用的。其实所有的com网站,cn网站都是一个大域,不过现在浏览器拒绝了这样的请求
2.i
B站下data文件:
主要是B站的data文件i
getB_byhash.html
主要是利用A站获取数据文件i
3.通过i
B站的data文件为:
A站getB_byname.html的内容:
代码可以变得更简单点:
原理:
主要就是先i
4.json劫持
B站的data数据:
A站的get代码:
5.html5中的postMessage
B站的data数据:
获取数据代码:
这个可以参考下 呆子不开口的《对方不想说话并扔了个message》
6.CORS
主要就是通过设置相应头中的 Access-Control-Allow-Origin 字段。前面直接用ajax获取数据时候已经提示了。
Access-Control-Allow-Origin 响应字段说明了该资源或网站所允许被非同源站点访问的站点列表,当 Access-Control-Allow-Origin 中包含网站 A 或者设置为 * 时,网站 A 即可对网站 B 上的资源进行任意访问。
也就是利用ajax请求可以获取到数据信息的。
php文件:
设置 Access-Control-Allow-Origin 允许所有站点访问读取
get代码:
二、B站资源不可控
利用中间代理访问,方法利用php页面去访问数据页面获取到数据,在利用cors传递回来。
代理代码:
A站直接ajax请求proxy即可
注:本文为“小米安全中心”原创,转载请联系“小米安全中心”
有奖问答
问题:
-
你还有那些跨域获取数据的方法?
-
这里面代码里面存在哪几个漏洞设置?
-
讨论下same攻击
首先php代码是有缺陷的,不去设置过多,最简单的,页面内容不可控:
地址为:www.same.com/1.php
这里有个html页面,里面就是个点击的按钮,页面内容不可控:
地址为www.same.com/1.html
怎么实现自己写个站点页面(不能和same同域),让其他人访问这个页面后出现点击事件?
分别考虑下:php限制了referer和不限制referer的情况。
(本次有奖问答,截止至12月4日18:00,点击“写留言”,留下你宝贵的思路。如果留言,被作者选中,我们会送上礼物,作为奖励哦)
↓↓↓往期回顾,请点击"阅读原文", 登录技术分享版块