CRLF 注入攻击

翻译: ericfish.com


什么是CRLF注入?


CRLF的意思就是回车(CR, ASCII 13, r) 换行(LF, ASCII 10, n)。
这两个ACSII字符不会在屏幕有任何输出,但在Windows中广泛使用来标识一行的结束。而在Linux/UNIX系统中只有换行符。
CR和LF组合在一起即CRLF命令,它表示键盘上的”Enter”键。


CRLF注入就是说黑客能够将CRLF命令注入到系统中。它不是系统或服务器软件的漏洞,而是网站应用开发时,有些开发者没有意识到此类攻击存在的可能而造成的。


针对这个漏洞黑客能够做什么?


就算黑客发现网站存在CRLF注入,他们仍然受到应用结构和这个缺陷的严重程度的限制。


对有些站点它将非常严重,而有些站点它只是很小的bug。


HTTP Header CRLF Injection


许多网络协议,包括HTTP也使用CRLF来表示每一行的结束。这就意味着用户可以通过CRLF注入自定义HTTP header,导致用户可以不经过应用层直接与Server对话。


HTTP header的定义就是基于这样的”Key: Value”的结构,用CRLF命令表示一行的结尾。
“Location:”头用来表示重定向的URL地址,”Set-Cookie:”头用来设置cookies。
如果用户的输入经过验证,其中存在CRLF的字符就可以被用来达到欺骗的目的。


如何预防?


过滤用户输入,可能存在CRLF注入的地方过滤掉CRLF字符。


原文:http://www.acunetix.com/websitesecurity/crlf-injection.htm