查看文章 |
——余弦函数(http://hi.baidu.com/ycosxhack)三更半夜原创 原理:在登陆百度空间的过程中,截断其正常JavaScript代码,并嵌入我们的恶意脚本来产生跨站。 危害:可以截获用户cookies,测试发现百度空间服务端没进行IP验证,由于我没进步一渗透,所以不敢说截获cookies就一定就拥有被攻击对象的帐户权限,如果是这样,则这就是严重危害之一。其余危害:已知的XSS结果都可能发生。但是爆发蠕虫就不可能了。 分析流程: 一、页面跳转 刚开始是想看看类似于这样的结构的页面跳转http://passport.baidu.com/?login&u=http://hi.baidu.com/ycosxhack。因为很多网站的页面跳转没进行同域验证,所以很可能会发生跳转跨站,我发现典型的跳转跨站有: http://imgcache.qq.com/qzone/redirect.htm?http://hi.baidu.com/ycosxhack http://login.xiaonei.com/Login.do?origURL=http://hi.baidu.com/ycosxhack 二、发现BUG 不过,百度空间的这个跳转跨站不会发生,大家自己试试就知道。在偶然的一次分析中发现了在百度空间登陆过程中出现的脚本错误,于是截获如下HTML文档(看其中的js代码注释): <!--STATUS OK--> <script> </body> //提醒一下:大家将这段代码保存为html页面,打开就会发现一些问题,我就是沿着这些问题分析出这个新的XSS。 三、开始渗透 需要注意的事,这些js脚本是通过服务端动态生成的,所以我们无法在客户端屏蔽而绕过它的验证。不过我们可以恶意构造上面js代码中url变量的值,而达到嵌入我们恶意脚本的目的!注释中就说明了url的值为https://passport.baidu.com/?login&u=./?<script>alert()</script>这个URL中u的值。看我的构造: https://passport.baidu.com/?login&u=./?"</script><script>alert();var x=" 这样当我们在浏览器中运行这个url,然后登录我们的空间时,上面的js代码将变为: <script> 呵呵,发现了没?<script>被分割为两个了,而且该封闭的都封闭了,不会出现脚本错误,并且我们期望的alert()也将正确执行!有这么简单?如果是这样,百度空间过滤系统就太脆弱了!其实一切的黑客过程都没你想象的那么简单!因为上面的js是理想化的结果,而真正的js将是: <script> 这真令人沮丧!为什么?因为在我们的URL提交的过程中,所有的特殊字符都被百度空间服务端过滤了,过滤的状态为:转义符\加上特殊字符,这严重影响了我们嵌入恶意js的行为!无法突破以上js代码的双引号,则我们所有的构造字符串都将是死字符串! 四、突破限制 正在沮丧时,突然想到js的注释符是两个斜杠//。而斜杠/正是构成web URL的必须元素!那么百度空间服务端就不可能过滤斜杠/!于是完美的构造开始了: https://passport.baidu.com/?login&u=./?"</script><script>alert(document.cookie)// 在浏览器中打开此链接,登陆我们的空间,跨站出现了!
弹出了我的cookies信息。这时从服务端返回的js代码为: <script> 看这js,多完美^^。最后的注释符//将尾部的双引号屏蔽了,呵呵,于是就出现了两个<script>标签体!我们的alert也就正确运行了。由于其他特殊字符都会被过滤,所以我们可以在js中用这个函数形式:eval(String.fromCharCode(十进制)),或者再嵌入一个<style>标签体,在css中使用expreesion表达式,或者嵌入swf元素,由于flash as可以与js进行通信,所以利用flash来进行跨站的例子也不少见。等等!方法很多,你就随意选择吧! 五、如何利用 略之! 最后: 后续的渗透就不进行了,没太多的时间,一大堆外文技术文档等着我去啃!这次渗透过程就是这样了,有什么疑问可以访问我的博客http://hi.baidu.com/ycosxhack。留言什么的。 |
