CRLF注入漏洞

2021-10-22 13:54:00 字數 1928 閱讀 3236

crlf是cr和lf兩個字元的拼接,它們分別代表」回車+換行」(\r\n),十六進製制編碼分別為0x0d和0x0a,url編碼為%0d和%0a。在http協議中,http header與http body是用兩個crlf分隔的,瀏覽器就是根據這兩個crlf來取出http 內容並顯示出來。所以,一旦我們能夠控制http 訊息頭中的字元,注入一些惡意的換行,這樣我們就能注入一些會話cookie或者html**,所以crlf injection又叫http response splitting,簡稱hrs。

相比於xss來說,crlf的危害更大。對於hrs最簡單的利用方式就是注入兩個\r\n,之後再寫入xss**,來構造乙個xss。

舉個例子,一般**會在http頭中用location:這種方式來進行302跳轉,所以我們能控制的內容就是location:後面的***某個**。

所以乙個正常的302跳轉包是這樣:

但是如果我們輸入:

%0aset-cookie:jspsessid%3d123456
注入了乙個換行,此時的返回包就會變成這樣:

此時這樣我們就給訪問者設定了乙個session,造成乙個「會話固定漏洞」

當然,hrs並不僅限於會話固定,通過注入兩個crlf就能造成乙個無視瀏覽器filter的反射型xss。

比如乙個**接受url引數,***放在location後面作為乙個跳轉。如果我們輸入的是

>

我們的返回包就會變成這樣:

之前說了瀏覽器會根據第乙個crlf把http包分成頭和體,然後將體顯示出來。於是我們這裡這個標籤就會顯示出來,造成乙個xss。

為什麼說是無視瀏覽器filter的,這裡涉及到另乙個問題。

瀏覽器的filter是瀏覽器應對一些反射型xss做的保護策略,當url中含有xss相關特徵的時候就會過濾掉不顯示在頁面中,所以不能觸發xss。

怎樣才能關掉filter?一般來說使用者這邊是不行的,只有資料報中http頭含有x-xss-protection並且值為0的時候,瀏覽器才不會開啟filter。

說到這裡應該就很清楚了,hrs不正是注入http頭的乙個漏洞嗎,我們可以將x-xss-protection:0注入到資料報中,再用兩個crlf來注入xss**,這樣就成功地繞過了瀏覽器filter,並且執行我們的反射型xss。

所以說hrs的危害大於xss,因為它能繞過一般xss所繞不過的filter,並能產生會話固定漏洞。

注入攻擊之CRLF

crlf實際上是兩個字元 r 十六進製制編碼 0x0d n 0x0a 在日誌檔案中可偽造日誌記錄 def log failed login username log open access.log a log.write user login failed for s n username log....

搬磚筆記 CRLF注入

crlf 指的是回車符 cr,ascii 13,r,0d 和換行符 lf,ascii 10,n,0a windows 使用crlf表示行的結束 linux unix 使用lf表示行的結束 macos 早期使用cr表示,現在好像也用lf表示行的結束 在http報文結構中,狀態行和首部中的每行都是以cr...

SQL注入漏洞

sql注入漏洞曾經是web應用程式的噩夢,cms bbs blog無一不曾受其害。sql注入的原理 以往在web應用程式訪問資料庫時一般是採取拼接字串的形式,比如登入的時候就是根據使用者名稱和密碼去查詢 string sql select top 1 from user where username...