“ 菜鸡是可以不用学习的,快去打游戏吧!——鲁迅”
今天在测试系统的时候发现了一个有趣的地方,本身这个XSS(反射型的)没啥有趣的,只是想记录下这个知识点。
在页面中一段话代码成为关键:
if(top.location == location){window.location.href="xxxx";}
因为在测试的时候,我直接访问地址,地址里被我注入了js,按道理会执行。但是看代码的时候发现这句话在我执行js代码之前,由于js是单线程的,所以会执行到这句代码之后就跳过后面的代码。
01
—
top.location&&location
top.location.href="url" 在顶层页面打开url(跳出框架)
self.location.href="url" 仅在本页面打开url地址
parent.location.href="url" 在父窗口打开Url地址
this.location.href="url" 用法和self的用法一致
location="url" 和window.location是一致的,因为当前最顶层的对象就是
window
02
—
那么根据上面的规则
当直接打开一个页面的location和top.location是一致的,例如我在编写这篇文章的时候调试下当前的location
但是如果是通过iframe元素嵌套的话,那么元素可能就不一样,我做了一个图来表达
不笨的同学很容易发现,通过iframe后的,在frame元素里的top.location和location是不一致的。所以那句top.location==location就不相等就不会进入这个if语句,自然也就不会触发winodw.location.href重定向。
那么问题来了。
这个东西有什么鸟用呢?
其实这个东西是常常被用来x-frame
就是用来防止clickjacking
一般的写法是:
if(top!=self){top.location.href=xxxx}
当然这句话是可以被绕过的…
一般现代的网站里,通常用设置一个x-frame-options来防御Clickjacking,对于社交类属性的网站,clickJacking还是有点厉害的。
03
—
X-frame-options
X-Frame-Options共有三个值:
DENY 任何页面都不能被嵌入到iframe或者frame中。
SAMEORIGIN 页面只能被本站页面嵌入到iframe或者frame中。
ALLOW-FROM uri 页面只能被指定的Uri嵌入到iframe或frame中。
所以我回顾今天遇到的问题,我只要通过一个iframe来src引入那个反射型xss即可触发payload。谜题解开了,嗯 好睡觉了 ~~~~888~~~~
模板没有抄袭于雷神测测
本文始发于微信公众号(xsser的博客):top.location和x-frame-options和xss
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论