CRLF漏洞
CRLF的含义是carriage return/line feed,意思是行的结束,转义字符是\r\n。CRLF由两部分组成:
回车符可以让光标移到当前行的开始位置,换行符可以让光标垂直移到下一行(Enter键)。不同系统的换行操作符是不一样的:
- Windows:CRLF
- Linux:LF
CRLF是在电传打印机的时候遗留下来的,CR和LF命令配合使用来实现的换行的操作。在许多应用中程序和网络协议中,仍然使用这些命令作为分割符。
危害
- 伪造HTTP响应头
- 系统文件中存在CRLF漏洞则会导致任意命令执行
- 结合其他漏洞会产生更加严重的危害
修复
- 过滤CRLF字符
示例
-
比如服务端通过设置响应头Location的地址进行跳转,如果这个地址是以参数的形式传过去,那么:
构造参数:
url=http://www.baidu.com%0d%0aSet-Cookie:token%3Dasdf
那么便会形成这样的包:
Location: www.baidu.com Set-Cookie:asdf
这样便伪造了HTTP的头部
-
比如服务器上某个文件存在CRLF漏洞,并且有需求让用户输入文件名并执行命令
ls -a 文件
,那么可以输入:File.txtrm -rf
该漏洞将会把File.txt
和rm -rf
分开,从而变成两条命令