无须字母构建XSS向量

2015-10-15 +15 361567人围观 ,发现 23 个不明物体 WEB安全其他

要求

之前我在玩一个XSS游戏的时候突然有了些想法,本着分享的原则,于是便有了这篇文章。在此,我将分享一个此前没有接触过的一个XSS攻击向量

相同水平的前提下,在攻击向量中不使用任何字母,且必须调用alert(1)。

闲话少说,看这里:

""[(!1+"")[3]+(!0+"")[2]+(''+{})[2]][(''+{})[5]+(''+{})[1]+((""[(!1+"")[3]+(!0+"")[2]+(''+{})[2]])+"")[2]+(!1+'')[3]+(!0+'')[0]+(!0+'')[1]+(!0+'')[2]+(''+{})[5]+(!0+'')[0]+(''+{})[1]+(!0+'')[1]](((!1+"")[1]+(!1+"")[2]+(!0+"")[3]+(!0+"")[1]+(!0+"")[0])+"(1)")()

真是一团糟,我们到底做了些什么呢?接下来容我慢慢给大家道来。

分析

首先从空字符串开始,接下来我们访问括号而不是我们熟悉的点符号的属性。

请注意,在接下来的一分钟我们将构建字符串,不会用到点符号构造字符串名的对象属性,现在切换到括号。

现在我们访问的是什么属性?下面这个就是“字符串”

(!1+"")[3]+(!0+"")[2]+(''+{})[2]

接下来从!1(false)开始,将“”添加到一个non-String值中是一个快速且直接的方法,所以(!1+””)我们得到false

将字符带入索引3中的“false”(结果切好是s),在(!0+””)[2]或者“true”[2]再次尝试,你会得到字母u。最后将字符带入索引2的字符串“[object Object]”中,你会得到字母b。

不使用任何字母,构造一个字符串来访问空字符串对象的“sub”属性,然而sub不仅仅是一个属性,它还是一个函数!

此时此刻,你可能会认为我接下来会通过调用String.sub函数破坏过滤。或许这么做也行,但是我选择更加有深度的做法,函数有什么内置属性?如何构造函数?

如果你打开一个JavaScript控制台,键入“”[“sub”][“constructor”],你看到了什么?为什么得到了Function()函数!似乎我们有事情干了…

给你点提示:这其中有n

((""[(!1+"")[3]+(!0+"")[2]+(''+{})[2]])+"")[2]

我们有熟悉的“”[“sub”]:

((""["sub"])+"")[2]

向其中增加“”,得到function sub() { [native code] }。将字符带入索引2得到字母n

总结

我们现在得到了相当于Function()“”[“sub”][“constructor”],调用它我们就可以定义一个函数了。当我们尝试调用alert(1)时,就需要连接更多的“true”和“false”来构建alert字符串,其后在加上+”(1)”

现在我们调用Function(“alert(1)”),大功告成,现在只需一个调用,返回一个匿名函数就可以实现弹出。

// empty string
""
// ["sub"]
[(!1+"")[3]+(!0+"")[2]+(''+{})[2]]
// ["constructor"]
[(''+{})[5]+(''+{})[1]+((""[(!1+"")[3]+(!0+"")[2]+(''+{})[2]])+"")[2]+(!1+'')[3]+(!0+'')[0]+(!0+'')[1]+(!0+'')[2]+(''+{})[5]+(!0+'')[0]+(''+{})[1]+(!0+'')[1]]
// ("alert(1)")
(((!1+"")[1]+(!1+"")[2]+(!0+"")[3]+(!0+"")[1]+(!0+"")[0])+"(1)")
// call anonymous function returned by Function()
()

本文最开始的Function(“alert(1)”)()确实十分混乱,不使用任何可识别的字符串确实很难辨识。你可以在地址栏键入“javascript:”复制粘贴上面的代码点击回车键进行测试。

我喜欢你能够喜欢JavaScript语言中这种十分隐晦的表达方式,Happy hacking!

* 参考来源:inventropy,编译/FB小编鸢尾,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

更多精彩
相关推荐

这些评论亮了

  • phithon (5级) 一个想当文人的黑客~ 回复
    $_$=~[];$_$={___:++$_$,$$$$:(![]+"")[$_$],__$:++$_$,$_$_:(![]+"")[$_$],_$_:++$_$,$_$$:({}+"")[$_$],$$_$:($_$[$_$]+"")[$_$],_$$:++$_$,$$$_:(!""+"")[$_$],$__:++$_$,$_$:++$_$,$$__:({}+"")[$_$],$$_:++$_$,$$$:++$_$,$___:++$_$,$__$:++$_$};$_$.$_=($_$.$_=$_$+"")[$_$.$_$]+($_$._$=$_$.$_[$_$.__$])+($_$.$$=($_$.$+"")[$_$.__$])+((!$_$)+"")[$_$._$$]+($_$.__=$_$.$_[$_$.$$_])+($_$.$=(!""+"")[$_$.__$])+($_$._=(!""+"")[$_$._$_])+$_$.$_[$_$.$_$]+$_$.__+$_$._$+$_$.$;$_$.$$=$_$.$+(!""+"")[$_$._$$]+$_$.__+$_$._+$_$.$+$_$.$$;$_$.$=($_$.___)[$_$.$_][$_$.$_];$_$.$($_$.$($_$.$$+"\""+$_$.$_$_+(![]+"")[$_$._$_]+$_$.$$$_+"\\"+$_$.__$+$_$.$$_+$_$._$_+$_$.__+"('\\"+$_$.__$+$_$.__$+$_$.$_$+"\\"+$_$.$__+$_$.___+$_$.$_$$+"\\"+$_$.__$+$_$.$$_+$_$._$_+$_$._$+$_$.__+"\\"+$_$.__$+$_$.$_$+$_$.___+$_$.$$$_+"\\"+$_$.__$+$_$.$$_+$_$._$_+"\\"+$_$.$__+$_$.___+$_$.__+$_$.$$$_+$_$.$_$_+$_$.$$__+"\\"+$_$.__$+$_$.$_$+$_$.___+"\\"+$_$.$__+$_$.___+"\\"+$_$.__$+$_$.$$$+$_$.__$+$_$._$+$_$._+"\\"+$_$.$__+$_$.___+"\\"+$_$.__$+$_$.$_$+$_$.$_$+$_$.$_$_+"\\"+$_$.__$+$_$.$_$+$_$._$$+$_$.$$$_+"\\"+$_$.$__+$_$.___+"\\"+$_$.__$+$_$.$$_+$_$.___+$_$.$$$_+"\\"+$_$.__$+$_$.$$_+$_$._$_+"\\"+$_$.__$+$_$.$$_+$_$._$$+$_$._$+"\\"+$_$.__$+$_$.$_$+$_$.$$_+"');"+"\"")())();
    )8( 亮了
  • 冷爱 (1级) 回复
    很给力的文章。不过有一一些地方没看懂。
    ""["sub"]["constructor"]为什么结果会解析成function函数。还有((""["sub"])+"")[2]为什么会变成function sub() { [native code] }。这个地方也没看懂。
    )7( 亮了
  • @ 冷爱  constructor属性返回的是该实例的构造函数,""["sub"])+""返回的是String的sub方法的字符串所以((""["sub"])+"")[2]返回的是n
    以上是个人理解
    )7( 亮了
  • IlgenjoLo黑亲 (1级) 乌喇·伊尔根觉罗·黑亲 回复
    请问这有什么用么= =
    )6( 亮了
  • wdlth 回复
    ゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :( ゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='\"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (o^_^o)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_');
    还有这种的
    )6( 亮了
发表评论

已有 23 条评论

取消
Loading...

文章目录

    特别推荐

    推荐关注

    官方公众号

    聚焦企业安全

    填写个人信息

    姓名
    电话
    邮箱
    公司
    行业
    职位
    css.php