【转载】--仅用 []()+! 就足以实现几乎任意Javascript代码

最近在做CTF的题目,遇见了一个都是[]()+!这样的文件,于是百度了一下,发现这个博客对这个有解释。

G Reader里Dexter同学的分享,来自sla.ckers.org的又一神作

点我测试

GReader里看不到效果的同学请自行测试下列HTML:

<script language="javascript" type="text/javascript">([][(![]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]]()[(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]])([][(![]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]]()[(![]+[])[+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][(![]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]]()+[])[!+[]+!+[]]]((![]+[])[+!+[]]+(+[![]]+[])[+[]])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(!![]+[])[+[]]+[][(![]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]]()[(![]+[])[+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][(![]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]]()+[])[!+[]+!+[]]]((![]+[])[+!+[]]+(+[![]]+[])[+[]])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]])</script>

在线转换工具

跟Brainfuck有的一拼。。。是挂马的好办法。。。

更新:研究了一下它实现的原理,有一个码表:

    (NaN+[]["filter"])[11]‘,!   window["atob"]("If")[0]‘,"   ("").fontcolor()[12]‘,#   window["atob"]("0iN")[1]‘,$   window["atob"]("0iT")[1]‘,%   window["atob"]("0iW")[1]‘,&   window["atob"]("0ia")[1]‘,‘   window["atob"]("0if")[1]‘,(   (false+[]["filter"])[20]‘,)   (false+[]["filter"])[21]‘,*   window["atob"]("0ir")[1]‘,+   window["atob"]("0it")[1]‘,,   window["atob"]("0iy")[1]‘,-   (NaN+window["Date"]())[31]‘,.   window["atob"]("1i4")[1]‘,/   (true+("")["sub"]())[10]‘,0-9 ignored*/ ,,,,,,,,,,:   window["Date"]()[21]‘,;   window["atob"]("O0")[0]‘,<   ("")["sub"]()[0]‘,=   ("").fontcolor()[11]‘,>   ("")["sub"]()[10]‘,?   window["atob"]("0j9")[1]‘,@   window["atob"]("00A")[1]‘,A   (+[]+[]["constructor"])[10]‘,B   (+[]+(false)["constructor"])[10]‘,C   window["atob"]("00N")[1]‘,D   window["btoa"](00)[1]‘,E   window["btoa"](01)[2]‘,F   (0+[]["filter"]["constructor"])[10]‘,G   window["btoa"]("0f")[1]‘,H   window["btoa"]("0t")[1]‘,I   ("Infinity")[0]‘,J   window["atob"]("00r")[1]‘,K   window["btoa"]("(")[0]‘,L   window["btoa"]("/")[0]‘,M   window["btoa"](0)[0]‘,N   ("NaN")[0]‘,O   window["btoa"](8)[0]‘,P   window["btoa"]("<")[0]‘,Q   window["btoa"]("a")[1]‘,R   window["atob"]("01I")[1]‘,S   window["btoa"]("I")[0]‘,T   window["btoa"]("N")[0]‘,U   window["atob"]("01W")[1]‘,V   window["atob"]("01a")[1]‘,W   (true+window)[12]‘,X   window["atob"]("01i")[1]‘,Y   window["btoa"]("a")[0]‘,Z   window["btoa"]("f")[0]‘,[   (undefined+[]["filter"])[33]‘,\   window["atob"]("01y")[1]‘,]   (true+[]["filter"])[40]‘,^   window["atob"](014)[1]‘,_   window["atob"](018)[1]‘,`   window["atob"]("02A")[1]‘,a   ("false")[1]‘,b   (window+[])[2]‘,c   ([]["filter"]+[])[3]‘,d   ("undefined")[2]‘,e   ("true")[3]‘,f   ("false")[0]‘, g   ([]+("")["constructor"])[14]‘,h   window["atob"]("aN")[0]‘,i   ([false]+undefined)[10]‘,j   (window+[])[3]‘,k   window["atob"]("a0")[0]‘,l   ("false")[2]‘,m   (Number+[])[11]‘,n   ("undefined")[1]‘,o   (true+[]["filter"])[10]‘,p   window["atob"]("cN")[0]‘,q   window["atob"]("cf")[0]‘,r   ("true")[1]‘,s   ("false")[3]‘,t   ("true")[0]‘,u   ("undefined")[0]‘,v   (0+[]["filter"])[30]‘,w   ([]["sort"]["call"]()+[])[13]‘,x   window["atob"]("eN")[0]‘,y   (NaN+[Infinity])[10]‘,z   window["atob"]("et")[0]‘,{   (NaN+[]["filter"])[21]‘,|   window["atob"]("03y")[1]‘,}   (NaN+[]["filter"])[41]‘,~   window["atob"](234)[1]‘

拼接出来字符串 "eval",如何把 "eval" 变成 eval() 呢?方法是

[]["sort"]["call"]()["eval"]

其中 []["sort"]["call"]() 等于 [].sort.call() ,等价于 window,所以上面 []["sort"]["call"]()["eval"] 就等价于 window.eval

然后就是体力活了,把码表对应转换成 eval("blah blah") 这种形式就可以执行任意代码了

不同浏览器的码表不一样。 Chrome和Firefox的index就不一样。

其实这个码表还可以通过 ·toLocal*()` 函数族扩展到Unicode,比fromCharCode要简短 :D

时间: 2024-10-15 18:12:58

【转载】--仅用 []()+! 就足以实现几乎任意Javascript代码的相关文章

只用这 6 个字符,就可以写出任意 JavaScript 代码!

你可能在网上见过有人用 几个不同的字符写的各种稀奇古怪的 JavaScript 代码,虽然看起来奇怪,但是能正常运行!比如这个: (!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]] 复制代码 你猜运行结果是什么?你可以自己去控制台试一下. 看起来很神奇,但这到底是怎么回事呢? 事实上,你几乎可以用下面这 6 个字符写出任意的 JavaScript 程序: []()!+ 复制代码 很多人都知道这个技巧,但是没

用6个字符写出任意的Javascript代码

博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用6个字符写出任意的Javascript代码.

phpMyAdmin setup.php脚本的任意PHP代码注入漏洞

phpMyAdmin (/scripts/setup.php) PHP 注入代码 此漏洞代码在以下环境测试通过:      phpMyAdmin 2.11.4, 2.11.9.3, 2.11.9.4, 3.0.0 及 3.0.1.1版本:      Linux内核版本 2.6.24-24-generic i686 GNU/Linux (Ubuntu 8.04.2):      攻击环境要求:      phpMyAdmin版本:早于2.11.9.5的2.11.x和早于3.1.3.1的3.x:  

Android WebView中的JavaScript代码使用(转载)

转载来源:http://www.cnblogs.com/mengdd/archive/2013/03/02/2940185.html 本篇文章主要介绍WebView中的JavaScript代码的执行相关,已经JS代码与Android代码的互相调用. (因为本人对Web开发并不是很熟悉,所以如果有哪些地方说得不对,还请指正.) 在WebView中使用JavaScript 如果你想要载入的页面中用了JavaScript,你必须为你的WebView使能JavaScript. 一旦使能之后,你也可以自己

精心收集的 48 个 JavaScript 代码片段,仅需 30 秒就可理解

原文:Chalarangelo  译文:IT168 https://github.com/Chalarangelo/30-seconds-of-code#anagrams-of-string-with-duplicates 该项目来自于 Github 用户 Chalarangelo,目前已在 Github 上获得了 5000 多Star,精心收集了多达 48 个有用的 JavaScript 代码片段,该用户的代码可以让程序员在 30 秒甚至更少的时间内理解这些经常用到的基础算法,来看看这些 Ja

精心收集的 48 个 JavaScript 代码片段,仅需 30 秒就可理解!(转载)

Anagrams of string(带有重复项) 使用递归.对于给定字符串中的每个字母,为字母创建字谜.使用map()将字母与每部分字谜组合,然后使用reduce()将所有字谜组合到一个数组中,最基本情况是字符串长度等于2或1. const anagrams = str => { if (str.length <= 2) return str.length === 2 ? [str, str[1] + str[0]] : [str]; return str.split('').reduce(

[转载][资料].计算机视觉、机器学习相关领域论文和源代码大集合

注:下面有project网站的大部分都有paper和相应的code.Code一般是C/C++或者Matlab代码. 最近一次更新:2013-3-17 目录(注:未添加索引,仅用于方便浏览) 一.特征提取Feature Extraction 二.图像分割Image Segmentation 三.目标检测Object Detection 四.显著性检测Saliency Detection 五.图像分类.聚类Image Classification, Clustering 六.抠图Image Matt

[转载] js内存泄露的几种情况——javascript系列

想解决内存泄露问题,必须知道什么是内存泄露,什么情况下出现内存泄露,才能在遇到问题时,逐个排除.这里只讨论那些不经意间的内存泄露. 一.什么是内存泄露 内存泄露是指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束.在C++中,因为是手动管理内存,内存泄露是经常出现的事情.而现在流行的C#和Java等语言采用了自动垃圾回收方法管理内存,正常使用的情况下几乎不会发生内存泄露.浏览器中也是采用自动垃圾回收方法管理内存,但由于浏览器垃圾回收方法有bug,会产生内存泄露. 二.内存泄露的几种情况

仅在服务器被攻击时用到的代码

要完成此效果把如下代码加入到<head>区域中<SCRIPT LANGUAGE="JavaScript"><!-- Beginnetscape = (navigator.appName.indexOf("Netscape") != -1);version4 = (navigator.appVersion.indexOf("4.") != -1);if (netscape && version4) {i