CRLF注入又叫HTTP響應拆分/截斷(HTTP Response Splitting)簡稱HRS。HRS漏洞存在的前提是 :url當中輸入的字符會影響到文件,比如在重定位當中可以嘗試使用%0d%0a作為CRLF。一般網站會在HTTP頭中加上Location: http://baidu.com的方式來進行302跳轉,所以我們能控制的內容就是Location:后面的XXX網址,對這個地址進行污染。
Location: http://baidu.com
假設服務端(PHP)的處理方式:
if($_COOKIE("security_level") == 1) { header("Location: ". $_GET['url']); exit; }
代碼意思是說當條件滿足時,將請求包中的url參數值拼接到Location字符串中,并設置成響應頭發送給客戶端。
此時服務器端接收到的url參數值是我們修改后的:
http://baidu.com/xxx%0a%0dSet-Cookie: test123=123
在url參數值拼接到Location字符串中,設置成響應頭后,響應頭就會看到:
Set-Cookie: test123=123
要避免http響應截斷,需要注意以下幾點:
對用戶的數據進行合法性校驗,對特殊的字符進行編碼,如<、>、’、”、CR、LF等,限制用戶輸入的CR和LF,或者對CR和LF字符正確編碼后再輸出,以防止注入自定義HTTP頭。
創建安全字符白名單,只接受白名單中的字符出現在HTTP響應頭文件中。
在將數據傳送到http響應頭之前,刪除所有的換行符。
回答所涉及的環境:聯想天逸510S、Windows 10。
CRLF注入又叫HTTP響應拆分/截斷(HTTP Response Splitting)簡稱HRS。HRS漏洞存在的前提是 :url當中輸入的字符會影響到文件,比如在重定位當中可以嘗試使用%0d%0a作為CRLF。一般網站會在HTTP頭中加上
Location: http://baidu.com的方式來進行302跳轉,所以我們能控制的內容就是Location:后面的XXX網址,對這個地址進行污染。假設服務端(PHP)的處理方式:
代碼意思是說當條件滿足時,將請求包中的url參數值拼接到Location字符串中,并設置成響應頭發送給客戶端。
此時服務器端接收到的url參數值是我們修改后的:
http://baidu.com/xxx%0a%0dSet-Cookie: test123=123在url參數值拼接到Location字符串中,設置成響應頭后,響應頭就會看到:
Set-Cookie: test123=123要避免http響應截斷,需要注意以下幾點:
對用戶的數據進行合法性校驗,對特殊的字符進行編碼,如<、>、’、”、CR、LF等,限制用戶輸入的CR和LF,或者對CR和LF字符正確編碼后再輸出,以防止注入自定義HTTP頭。
創建安全字符白名單,只接受白名單中的字符出現在HTTP響應頭文件中。
在將數據傳送到http響應頭之前,刪除所有的換行符。
回答所涉及的環境:聯想天逸510S、Windows 10。