window属性可控能否执行js代码?

  • A+
所属分类:WooYun-Zone

比如

s = "alert";

window展开(obj)这种。

像window["alert"]这种因为alert是window的一个方法,可以被调用。复杂的js代码如果没有双引号的话直接包一个function就可以了,但现在这种赋值方法s外面一定有双引号,觉得很难绕过了。。。不知大牛们有没有好方法

  1. 1#

    _Evil (科普是一种公益行为) | 2013-04-17 18:08

  2. 2#

    路人甲 | 2013-04-17 18:22

  3. 3#

    xsser | 2013-04-17 18:54

    window["eval"]('alert()')

  4. 4#

    hqdvista (…) | 2013-04-17 21:20

    @xsser obj是一个key-value dict,没发现改变类型的方法

  5. 5#
    感谢(1)

    Sogili (.) 长短短 (.) | 2013-04-17 21:44

    window["setTimeout"]({toString:function(){return 'alert(1)'}})

  6. 6#

    hqdvista (…) | 2013-04-18 01:33

    @Sogili dict的key-value也被引号包裹了。。还是不行,不过这个方法挺新奇的,先感谢一个

  7. 7#

    Lmy (话说名字太长容易被人关注) | 2013-04-18 05:22

    this[/alert/.source](/xss/);// 在某些情况可以用
    在严格模式下 以上是不行的 呵呵
    只有这样是可以的
    window[/alert/.source](/xss/);
    window.parent[/alert/.source](/xss/);//window看情况可有可无

  8. 8#

    Lmy (话说名字太长容易被人关注) | 2013-04-18 05:27

    个人建议玩XSS的都去看一下ECMA-262里面有关于JavaScript语言规范细节
    时间充足的情况下可以考虑看看ECMA-357

  9. 9#

    Lmy (话说名字太长容易被人关注) | 2013-04-18 05:28

    @hqdvista 引号是可以规避的

  10. 10#

    hqdvista (…) | 2013-04-18 09:05

    @Lmy
    上下文大概是这样的
    var s = location.search.split("&");
    var d = {}
    var f = location.search.split(".")[0]
    for i in s:
          ks = i.split("=")
          k = ks[0]
          v = ks[1]
          d[k] = v

    window[f](d);
    这种隐形的双引号包裹也可以逸出?

  11. 11#
    感谢(2)

    gainover | 2013-04-22 15:11

    感觉这场景,哪儿见过,百度某URL里的?

  12. 12#

    hqdvista (…) | 2013-04-23 11:26

    @gainover 大牛果然火眼金睛