CRLF注入原理



CRLF 指的是回車符(CR,ASCII 13,\r,%0d) 和換行符(LF,ASCII 10,\n,%0a),操作系統就是根據這個標識來進行換行的,你在鍵盤輸入回車鍵就是輸出這個字符,只不過win和linux系統采用的標識不一樣而已。

在HTTP當中HTTP的Header和Body之間就是用兩個crlf進行分隔的,如果能控制HTTP消息頭中的字符,注入一些惡意的換行,這樣就能注入一些會話cookie和html代碼,所以CRLF injection 又叫做 HTTP response Splitting,簡稱HRS。CRLF漏洞可以造成Cookie會話固定反射型XSS(可過waf)的危害,注入XSS的利用方式:連續使用兩次%0d%oa就會造成header和body之間的分離,就可以在其中插入xss代碼形成反射型xss漏洞。


測試

CRLF注入漏洞的檢測也和XSS漏洞的檢測差不多。通過修改HTTP參數或URL,注入惡意的CRLF,查看構造的惡意數據是否在響應頭中輸出。主要是在看到有重定向或者跳轉的地方,可以在跳轉的地址添加?url=http://baidu.com/xxx%0a%0dSet-Cookie: test123=123測試一下,通過查看響應包的數據查看結果。

GET /index.php?c=rpzy&a=query&type=all&value=123&datatype=json&r=X1MU6E86%0a%0dSet-Cookie: test123=123 HTTP/1.1
Host: www.xxxxyou.net

這里並沒有利用成功,如果利用成功的話,響應包會出現一行Set-Cookie: test123=123 數據。


原理分析

HRS漏洞存在的前提是 :url當中輸入的字符會影響到文件,比如在重定位當中可以嘗試使用%0d%0a作為crlf.

一般網站會在HTTP頭中加上Location: http://baidu.com的方式來進行302跳轉,所以我們能控制的內容就是Location:后面的XXX網址,對這個地址進行污染。

假設服務端(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


修復方式

服務端收到前端過來的參數,在加入Location之前,需要過濾 \r 、\n 之類的行結束符,避免輸入的數據污染其它HTTP首部字段。


參考文獻

https://www.jianshu.com/p/2f2e311e797b
https://blog.csdn.net/shakeyin1998/article/details/88411756


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM