回车符(\r)的作用是将光标移到行首,换行符(\n)的作用是将光标垂直移到下行。键盘上的回车键(Enter)就可以执行该操作。但是不同的操作系统,行的结束符是不一样的。Windows系统使用CRLF表示行的结束,Linux/Unix系统使用LF表示行的结束,MacOS系统早期使用CR表示,但是现在好像也用LF表示行的结束。所以同一文件在不同操作系统中打开,内容格式可能会出现差异,这是行结束符不一致导致的。
在HTTP规范中,行使用CRLF来结束。首部与主体由两个CRLF分隔,浏览器根据这两个CRLF来获取HTTP内容并显示。
CRLF漏洞检测CRLF注入漏洞的本质和XSS有点相似,攻击者将恶意数据发送给易受攻击的Web应用程序,Web应用程序将恶意数据输出在HTTP响应头中(XSS一般输出在主体中)。所以CRLF注入漏洞的检测也和XSS漏洞的检测差不多。通过修改HTTP参数或URL,注入恶意的CRLF,查看构造的恶意数据是否在响应头中输出。
总结下:
如果你找到了一个你传给Web程序的参数最后会在响应的Http头部回显,那么这个地方可能就是一个存在CRLF注入漏洞的地方。
过滤参数中的\r\n之类的行结束符;
输入参数尽量不要在相应头部回显,如果非要回显的话一定要对该字段的输入值进行严格的过滤。