天天看點

CRLF injection 簡單總結CRLF injection 簡單總結

CRLF injection 簡單總結

簡介

CRLF是”回車 + 換行”(\r\n)的簡稱,即我們都知道在HTTP協定中,HTTP Header與HTTP Body是用兩個CRLF分隔的,浏覽器就是根據這兩個CRLF來提取HTTP 内容

一旦我們能夠控制http頭,通過注入一些CRLF這樣就可以控制header和body的分割線,這樣我們就可以向body或是header中注入些東西了。是以CRLF Injection又叫HTTP Response Splitting,簡稱HRS。

Example

通常來說,網站多數會通過HTTP Header 中的location的方式來實作跳轉。

一般格式就是Location:xxx,簡單例子

HTTP/1.1  Moved Temporarily
Date: Fri, 27 Jun 2014 17:52:17 GMT
Content-Type: text/html
Content-Length: 154
Connection: close
Location: http://www.xxx.com
           

302跳與301跳的差別

http://www.cnblogs.com/fanyong/archive/2013/07/20/3202586.html

如果location直接從URL裡獲得的話, 輸入

http://www.xxx.com%0aSet-cookie:JSPSESSID%3d12345

這樣子,Header就變成了

HTTP/  Moved Temporarily
Date: Fri,  Jun  :: GMT
Content-Type: text/html
Content-Length: 
Connection: close
Location: http://www.xxx.com
Set-cookie:JSPSESSID=
           

瞬間就設定上了一個session,也就是“會話固定漏洞”

此外,比較有價值的是很容易造出一個能夠輕松繞過filter的XSS,還是剛才那個例子,如果我們輸入

http://www.xxx.com%0d%0a%0d%0a
HTTP/  Moved Temporarily
Date: Fri,  Jun  :: GMT
Content-Type: text/html
Content-Length: 
Connection: close
Location: http://www.xxx.com
<svg/onload=prompt()>
           

那麼網頁的内容中就會有一個反射型的XSS了。

修複

隻需要對輸入進行過濾,過濾掉 ‘\r’ 和 ‘\n’,進而避免輸入的資料污染到其他HTTP頭。