来源:自学PHP网 时间:2015-04-17 11:59 作者: 阅读:次
[导读] 前面的教程,说到了显式输出和隐式输出。但是不论怎么样,因为最终javascript都会通过document.write或innerHTML将内容输出到网页中,所以我们总是有办法看到输出到哪里。 但是有时候,我...
前面的教程,说到了显式输出和隐式输出。但是不论怎么样,因为最终javascript都会通过document.write或innerHTML将内容输出到网页中,所以我们总是有办法看到输出到哪里。 但是有时候,我们的输出,最终并没有流向innerHTML或document.write,而是与eval发生了邂逅,我们该怎么挖掘并利用呢? http://kf.qq.com/search_app.shtml?key=aaaaa
一般来说,默认情况下,是不会有问题的。我们可以给参数加一些特殊符号。 这里我比较习惯用\,因为这玩意比较好使。当然你也可以用其它比较特殊的符号,比如双引号,单引号,只是被过滤掉的几率比较大。 这个时候,我们看看Console里面,多出了一条错误。
var getarg = function()
比如,地址栏是key=aaaa; 那么 arg[0] 就是字符串'key', arg[1] 就是字符串 'aaaa'; 那么eval这句就是执行的 eval('this.key="aaaa";')
4. 如果这里我们把 key 换个写法呢? this.key="aaaa"; this.key;alert(1);//="aaaa"; 如下图:
5. 根据上面内容,我们可以构造代码。 http://kf.qq.com/search_app.shtml?key;alert(1);//=aaaa
this.key="aaaa"; 换为 this.key="aaa";alert(1);//"; 确实是如此 :) http://kf.qq.com/search_app.shtml?key=aaa";alert(1);//
但是这样在chrome下却不行。 原因其实上面一节教程也提到过。 chrome会自动对", >, < 进行转换。 因而 this.key="aaa";alert(1);//"; 会变成 this.key="aaa%22;alert(1);//"; 从而失效。 7.上面就是本篇教程了,我们再来看看题外话。 其实以上问题,不是单独存在的。在另外一个页面也是存在的。 更多内容,参见本篇漏洞修复。 http://kf.qq.com/wsearch.shtml
var getarg = function(){
接着,这个问题又被再次报告了,因而前些时候,腾讯又进一步做了修复。 var getarg = function(){
哈,补了东墙,补西墙。 不过呢?补了这个wsearch.js文件,还有我们现在分析的这个(http://kf.qq.com/js/search_app.js)文件。 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com