HTTP splitting攻擊原理說明

HTTP splitting攻擊原理與情境

這篇文章主要介紹一種很罕見的攻擊 “HTTP Splitting”

為什麼很罕見呢? 因為這種攻擊方法需要一些條件的配合,

而且攻擊成功之後所帶來的影響有限,所以這類的攻擊慢慢沒有出現

 

什麼是 HTTP Splitting

Splitting 白話文為切割的意義

也就是將 HTTP request 做適當的切割,

讓 Browser 誤以為 Http request 變成 HTTP Response

 

攻擊情境

駭客想要透過參數的輸入,讓瀏覽網站時,

永遠回傳駭客所自訂的訊息 Sorry, System Down給受害瀏覽網站使用者。

駭客的輸入方式

網站在使用者輸入相關資訊q=advanced之後,網站回傳如下:

 

HTTP/1.1 302 Moved Temporarily
Date: Sun, 03 Jan 2014 16:22:19 GMT
Location: http://victim.com/main.jsp?q=advanced

但是,如果使用者輸入的是下列這一串文字,而不是 advanced呢?

advanced
Content-Length: 0

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 31
<html>Sorry, System Down</html>

接著,將上列文字,透過 URL encode 編碼,

http://meyerweb.com/eric/tools/dencoder/

 

就會得到下列文字輸入

advanced%0AContent-Length%3A%200%0A%0AHTTP%2F1.1%20200%20OK%0AContent-Type%3A%20text%2Fhtml%0AContent-Length%3A%2031%0A%3Chtml%3ESorry%2C%20System%20Down%3C%2Fhtml%3E

 

一旦強迫網頁回傳這樣的訊息,當有 Web Cache 或是 proxy cache的情況下,

同樣的 http request ,當瀏覽器讀到這段時,該網頁就會變相回傳 Sorry, System Down

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 31
<html>Sorry, System Down</html>

因為 proxy, WebCache的關係,

所以之後相關的 http request 都會變成顯示 Sorry, System Down

像這樣的攻擊就稱為 HTTP Splitting

透過 http request 的參數,加上換行符號%0A

巧妙的將 HTTP request的參數變成是 HTTP response讓瀏覽器讀取,

 

為什麼這樣的攻擊很少見呢?  因為需要一些條件的配合

1. Web cache 的設定,例如: Pragma: no-cache,先將之前網頁的快取清除之後,再做出 http splitting的攻擊。

2. 為了要成功的cached “Sorry System Down”,Last-Modified header並須要設定在一個未來的時間。

3. 輸入的長度與驗證。許多的輸入值檢查是不允許一些字元的輸入。

Leave a Reply

Your email address will not be published. Required fields are marked *