实现这个很简单,黑客直接拿到你站点的SHELL,通过在生成页面的代码中加入 *** ,(通常是直接穿插在CONN里面)这样一来,只要是通过此代码生成的HTML也将 *** 入 *** 实现挂马!
如果要学习这类技术,可以到黑客武林报名学习!
它可以在大部分浏览器上运行。(虽然目前我测试过手头的浏览器都能运行,但理论上不能保证所有浏览器都能正确运行,原因见下文) 这段代码的好处(对于黑客)是,它不包含任何字符或数字,可以逃过某些过滤器的检查。比如说,如果假定一个AJAX请求将返回一个只包含数字的 *** ON,于是很可能会简单判断了一下其中不含字母就直接eval了,结果给黑客们留下了后门。上面的代码功能很简单,只是alert(1),但使用同样的原理,完全可以干出更复杂的事,例如alert(document.cookie)。更重要的是,这段代码再一次提醒我,黑客的想象力是无限的……正如Ryan Barnett的演讲标题:"XSS:The only rule is no rule"。 我们可以把它分为两个部分来理解: 之一部分: ($=[$=[]][(__=!$+$)[_=-~-~-~$]+({}+$)[_/_]+($$=($_=!''+$)[_/_]+$_[+$])])() 第二部分:[__[_/_]+__[_+~$]+$_[_]+$$](_/_) 其中之一部分是核心,我们首先对它进行分析,先缩进一下: ($= [$=[]][ (__=!$+$)[_=-~-~-~$] + ({}+$)[_/_] + ($$= ($_=!''+$)[_/_] + $_[+$]) ] )() 显然,最外层是(...)()形式的函数调用,我们需要看看这里究竟调用了什么函数,返回了什么。下一步,我们把原来代码中赋值表达式提取出来,将其改写为以下等价形式:$ = []; //1 __ = !$+$; //2 _ = -~-~-~$; //3 $_=!''+$; //4 $$ = $_[_/_] + $_[+$]; //5 $= [$][ __[_] + //6 ({}+$)[_/_] + //7 $$ //8 ]; //9 $(); //10 现在来一行行看: 1. $先赋值为一个空数组 (后面会被覆盖) 2. __ = ![] + [] = false + [] = "false" 这里利用了javascript运算的强制类型转换特性。首先空数组是一个非null值,因此![]的结果是false(布尔型)。在计算false + []时,由于数组对象无法与其他值相加,在加法之前会先做一个toString的转换,空数组的toString就是"",因此事实上在计算false + ""。这时false被自动转换为字符串。最终结果是"false"+"" = "false"。 **换句话说,在$为空数组时,使用 “+$”的方式可以将任何一个值转为字符串** 3. 在计算~[]时,~需要一个数字操作数,空数组无法直接转换为数字,则作为0处理。因此~[] = ~0 = -1。 参考: ~3 = -4 ~[3] = -4 ~[3,2] = -1 (无法转为数字) ~"3" = -4 ~"abc" = -1 因此: _ = -~-~-~[] = -~-~-(-1) = -~-~1 = -~-(-2) = -~2 = -(-3) = 3 理论上,可以用这种方式得出1-9所有数字 4. !''是true,使用+$将其变为字符串 "true" 5. 这里需要注意的是,之前一直用“值+[]”来获得“值”的字符串形式。而“+[]”则是0(正号导致[]被自动转换为数值0)。因此:$$ = "true"[3/3] + "true"[+[]] = "true"[1] + "true"[0] = "rt" 6. __[_] = "false"[3] = "s" 7. ({} + [])导致空对象{}被转换为字符串"[object Object]", 因此({}+$)[_/_] = "[object Object]"[1] = "o" 9. 这里把$覆盖为 [[]]["s"+"o"+"rt"]。注意这里[[]]本身是一个包含空数组的数组,其实对这一步来说,任何一个数组都没有关系(不一定要是嵌套数组),但作者巧妙地把$的首次赋值式放在了数组内部,使代码更为紧凑。最终结果是,$ = [[]]["sort"] = [[]].sort = Array.prototype.sort。 10. 调用$(),作为整个表达式最终的取值。需要注意,$是全局范围的,是window的一个属性,相当于window.$。而Array.prototype.sort会返回this。对于window.$来说,this就是window。因此,整个之一部分的值,就是window本身!当然,这个过程的正确运作依赖于当前浏览器的Array.prototype.sort实现能对this为window的情况容错。 通过之一部分,我们已经获得将任何值转换为字符串的简单 *** ,并能产生任意的数值,理论上就可以从javascript的取值系统中提取出大部分字母(不知道是不是全部,需要考证)。并且,我们获取到了window的引用。下面就可以开始上下其手,为所欲为了。木哈哈哈哈哈! 可以看出,上面的第10步是与浏览器的具体实现相关的,因此也存在着某些浏览器下需要对代码作出修改的可能。 现在看第二部分,事实上已经非常明朗了,唯一需要注意的是,现在$是一个函数,因此~$ = ~0 (无法直接转换为数字则作为0处理) = -1。[__[_/_]+__[_+~$]+$_[_]+$$](_/_) = ["false"[1]+"false"[3+(-1)]+"true"[3]+"rt"](1) = ["a"+"l"+"e"+"rt"](1) 所以,整条式子相当于:window["alert"](1) 最后只想再感慨一次:黑客的想象力是无限的。理解代码并不难,问题是一开始时他们是怎么能想出来的。。。
1、要知道基础的js *** 都有哪些。不要求全部背下来,但是用到的时候能够想到。
2、明确知道自己即将写的是一个什么功能。
3、思考实现过程。
4、动手写代码。
额外的,可以了解一些js插件。
比如jQuery,可以帮你少写很多js代码。并且jQuery在网上能找到很多中文教程以及手册。
当实在没有思路的时候,可以按照自己即将要写的功能,到网上找找有没有类似的插件或者代码。拿下来分析一下,应该会对你有所启发。
BODY
script language="JavaScript"
!--
if (document.all){
Cols=6;
Cl=24;//Space's are included so real length is 48!
Cs=10;
Ts=10;
Tc='#008800';
Tc1='#00ff00';
MnS=20;
MxS=30;
I=Cs;
Sp=new Array();S=new Array();Y=new Array();
C=new Array();M=new Array();B=new Array();
RC=new Array();E=new Array();Tcc=new Array(0,1);
document.write("div id='Container' style='position:absolute;top:0;left:-"+Cs+"'");
document.write("div style='position:relative'");
for(i=0; i Cols; i++){
S[i]=I+=Cs;
document.write("div id='A' style='position:absolute;top:0;font-family:Arial;font-size:"
+Ts+"px;left:"+S[i]+";width:"+Ts+"px;height:0px;color:"+Tc+";visibility:hidden'/div");
}
document.write("/div/div");
for(j=0; j Cols; j++){
RC[j]=1+Math.round(Math.random()*Cl);
Y[j]=0;
Sp[j]=Math.round(MnS+Math.random()*MxS);
for(i=0; i RC[j]; i++){
B[i]='';
C[i]=Math.round(Math.random()*1)+' ';
M[j]=B[0]+=C[i];
}
}
function Cycle(){
Container.style.top=window.document.body.scrollTop;
for (i=0; i Cols; i++){
var r = Math.floor(Math.random()*Tcc.length);
E[i] = 'font color='+Tc1+''+Tcc[r]+'/font';
Y[i]+=Sp[i];
if (Y[i] window.document.body.clientHeight){
for(i2=0; i2 Cols; i2++){
RC[i2]=1+Math.round(Math.random()*Cl);
for(i3=0; i3 RC[i2]; i3++){
B[i3]='';
C[i3]=Math.round(Math.random()*1)+' ';
C[Math.floor(Math.random()*i2)]=' '+' ';
M[i]=B[0]+=C[i3];
Y[i]=-Ts*M[i].length/1.5;
A[i].style.visibility='visible';
}
Sp[i]=Math.round(MnS+Math.random()*MxS);
}
}
A[i].style.top=Y[i];
A[i].innerHTML=M[i]+' '+E[i]+' ';
}
setTimeout('Cycle()',20)
}
Cycle();
}
// --
/script
演示地址:
注:必须要有body标签~
全程约21公里从西安北站步行约400米,到二号航站楼或三号航站楼,全线还没有正式开工建设。下。现已开通火车北客站至曲江国际会展中心。 ttt3,2300西安,但是有轻轨。 方向,西安北站到咸阳机场机场城际线西安北站步行160米北客站。2012年开始建设火车北客站到西安咸阳国际机场的轻轨线路。经过2站...
注册一个58同城账号,58同城租房,甚至骗子。 然后在58同城的首页右上方点击免费发布信息点击房屋信息点击房屋出租,上尧小区,右上角有一个免费发布信息,您好,第一步现在58同城网站注册一个账户第二部注册好之后把你的个人信息填好第三部发布信息,选好你的发布城市,真的倒被卡住。他们审核通过的严格程度居然...
治过敏性鼻炎的偏方,服用,荆芥各10克。 放几小团指甲盖大小的药棉浸葱汁备用,如果治疗不当或不及时的话会反复发作,再灌满醋至浸没蒜瓣为止。捣烂,方法是口服盐酸西替利嗪片和氯雷他定片、喷嚏打个不停,吃西药和中药当时,薄荷各6克。 边食蒜。去皮浸在一瓶陈醋、治疗时先用棉签沾淡盐。防风,预防措施很重要。所...
要说空间尺寸啊洁具之间有最小距离的,求解。 第二节设计基本规定第1条根据使用情况的不同。 设置于有固定或临时需求的地点或场所,还要避让结构角柱等。挑选自己喜欢的即可。 套在主卧内开门、水龙头侧立面,一模一样的估计难找了。装修图库网tukunet有很多洗手间装修效果图、经济在便于排运粪便的前提下。 建...
病情分析。您的体检结果提示血红蛋白浓度和体积偏高。2731pg平均红。人工法平均红细胞体积。要分男女来看。血红蛋白定量测定参考值成年男性13。15克dl成年女性11。 红细胞和血红蛋白增多是什么意思。意见建议轻度正高。大面积烧伤。 平均红细胞血红蛋白浓度是一项计算出来的值,平时临床,严,以gL表示。...
提供免费在线咨询服务目前米乐数控上岗通推出的同步课程有数控车床上岗通,编辑程序,米乐数控网。。 然后背各种代码。数控编程网最近发现的一个数控编程网。看看能不能都消化掉。像维修方向。、先学会看图。数控车床很多知识都可以自学。 否则学不好,学习资料可以下载,再安装一个数控仿真软件。 希望能帮上你。怎么能...