vapour's blog

11Mar/111

非字母数字的JavaScript

由非字母数字组成的JavaScript,这是几年前一个日本安全专家Yosuke Hasegawa在slackers论坛上提出的。这种技术主要是利用JavaScript的数据类型自动转换的特性,例如布尔类型true、false可以转换成字符类型"true"、"false"。

现在我们利用上面这种技术来获取字母o,我们可以利用对象调用toString方法转换成字符串[object  Object]来得到字母o。

1 首页我们需要获得对象字面量[object Object]:

 [{}]+[]//[object Object]

 

2 得到数字0

+[]//0 

 

3 得到数字1,在0的基础上增加1

++[+[]][+[]]//1 

 

4最后合并上面代码,得到字母o

 alert([[{}]+[]][+[]][++[+[]][+[]]])//"o"

 

如果对这方面感兴趣,可以阅读:

YAUC Less chars needed to run arbitrary JS code = 6! (JS GREAT WALL) 
http://sla.ckers.org/forum/read.php?24,32930

Diminuitive NonAlNum JS - Arbitrary:-
http://sla.ckers.org/forum/read.php?24,35081

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