非字母数字的JS(二)
在2011年的BlackHat DC 2011大会上Ryan Barnett给出了一段关于XSS的示例javascript代码:
上面这段代码在浏览器中输出alert(1),这段代码中巧妙利用sort函数执行返回window对象来获取window对象,然后执行window['alert'](1)。关于这段代码的详细解释可查看这里。
关于上面代码的实现技术原理,可以查看《非字母数字组成的JavaScript》。
由上面的代码,引发思考能不能输出数字(0-9)和全部26个字母,于是进行了下面尝试:
console.log(+[]); //0
console.log(-~[]); //1
console.log(-~-~[]); //2
console.log(-~-~-~[]); //3
console.log(-~-~-~-~[]); //4
console.log(-~-~-~-~-~[]); //5
console.log(-~-~-~-~-~-~[]); //6
console.log(-~-~-~-~-~-~-~[]); //7
console.log(-~-~-~-~-~-~-~-~[]); //8
console.log(-~-~-~-~-~-~-~-~-~[]); //9
通过上面这种方法,可以得到0-9,再组合0-9就可以得到任意数值了。
//[{}]+[] [object Object]
console.log(([{}]+[])[-~[]]); //o
console.log(([{}]+[])[-~-~[]]); //b
console.log(([{}]+[])[-~-~-~[]]); //j
console.log(([{}]+[])[-~-~-~-~[]]); //e
console.log(([{}]+[])[-~-~-~-~-~[]]); //c
console.log(([{}]+[])[-~-~-~-~-~-~[]]); //t
//![]+[] false
console.log((![] + [])[+[]]); //f
console.log((![] + [])[-~[]]); //a
console.log((![] + [])[-~-~[]]); //l
console.log((![] + [])[-~-~-~[]]); //s
console.log((![] + [])[-~-~-~-~[]]); //e
//!![]+[] true
console.log((!![]+[])[+[]]); //t
console.log((!![]+[])[-~[]]); //r
console.log((!![]+[])[-~-~[]]); //u
console.log((!![]+[])[-~-~-~[]]); //e
//({}[(!![]+[])[+[]]])+[] undefined
console.log((({}[(!![]+[])[+[]]])+[])[-~[]]); //n
console.log((({}[(!![]+[])[+[]]])+[])[-~-~[]]); //d
console.log((({}[(!![]+[])[+[]]])+[])[-~-~-~-~-~[]]); //i
经过尝试,暂时只能得到a b c d e f i j l n o r s t u共15个字母。欢迎补充
非字母数字的JavaScript
由非字母数字组成的JavaScript,这是几年前一个日本安全专家Yosuke Hasegawa在slackers论坛上提出的。这种技术主要是利用JavaScript的数据类型自动转换的特性,例如布尔类型true、false可以转换成字符类型"true"、"false"。
现在我们利用上面这种技术来获取字母o,我们可以利用对象调用toString方法转换成字符串[object Object]来得到字母o。
1 首页我们需要获得对象字面量[object Object]:
2 得到数字0
3 得到数字1,在0的基础上增加1
4最后合并上面代码,得到字母o
如果对这方面感兴趣,可以阅读:
YAUC Less chars needed to run arbitrary JS code = 6! (JS GREAT WALL)
http://sla.ckers.org/forum/
Diminuitive NonAlNum JS - Arbitrary:-
http://sla.ckers.org/forum/
Java/script: no alnum cheat sheets:-
http://sla.ckers.org/forum/read.php?24,33349
Diminutive JS Code Challenge, from OWASP :-
http://sla.ckers.org/forum/read.php?24,30015