top.location和x-frame-options和xss

admin 2021年12月7日10:08:05评论154 views字数 1224阅读4分4秒阅读模式

菜鸡是可以不用学习的,快去打游戏吧!——鲁迅


今天在测试系统的时候发现了一个有趣的地方,本身这个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
top.location和x-frame-options和xss
但是如果是通过iframe元素嵌套的话,那么元素可能就不一样,我做了一个图来表达

top.location和x-frame-options和xss

不笨的同学很容易发现,通过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~~~~





END


模板没有抄袭于雷神测测




本文始发于微信公众号(xsser的博客):top.location和x-frame-options和xss

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年12月7日10:08:05
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   top.location和x-frame-options和xsshttps://cn-sec.com/archives/482029.html

发表评论

匿名网友 填写信息