CRLF注入

漏洞介绍

CRLF是CR和LF两个字符的拼接,它们分别代表”回车+换行”(\r\n)“,全称为Carriage Return/Line Feed”,十六进制编码分别为0x0d和0x0a,URL编码为%0D和%0A。CR和LF组合在一起即CRLF命令,它表示键盘上的”Enter”键,许多应用程序和网络协议使用这些命令作为分隔符。

而在HTTP协议中,HTTP header之间是由一个CRLF字符序列分隔开的,HTTP Header与Body是用两个CRLF分隔的,浏览器根据这两个CRLF来取出HTTP内容并显示出来。

所以如果用户的输入在HTTP返回包的Header处回显,便可以通过CRLF来提前结束响应头,在响应内容处注入攻击脚本。因此CRLF Injection又叫HTTP响应拆分/截断(HTTP Response Splitting)简称HRS。

CRLF注入漏洞的本质和XSS有点相似,攻击者将恶意数据发送给易受攻击的Web应用程序,Web应用程序将恶意数据输出在HTTP响应头中。(XSS一般输出在主体中)

测试思路

找到输入点,构造恶意的CRLF字符

正常请求

1-CRLF.jpg

抓包,在请求行的url参数中加入特殊构造的CRLF字符,如下图标记所示。

2-CRLF.jpg

查看恶意数据是否在响应头中输出

将修改后的请求包提交给服务器端,查看服务器端的响应。发现响应首部中多了个Set-Cookie字段。这就证实了该系统存在CRLF注入漏洞,因为我们输入的恶意数据,作为响应首部字段返回给了客户端。

3-CRLF.jpg

手工测试payload

%0aSet-cookie:JSPSESSID%3Ddrops  
%0d%0a%0d%0a<img src=1 onerror=alert(/xss/)>/

工具-CRLFFuzz

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
没有漏洞payload测试
在这里插入图片描述
在这里插入图片描述
有漏洞payload测试
在这里插入图片描述
在这里插入图片描述