CRLF攻击

CRLF

CRLF是Carriage-Return Line-Feed的缩写,意思是回车换行,就是回车符(CR,ASCII 13,\r,%0d) 和换行符(LF,ASCII 10,\n,%0a)。。换行在有的ASCII码表也用newline(简nl)来进行表示,这里的lf是line feed的概念,意思是一样的。

CRLF攻击

CRLF注入漏洞,是因为Web应用没有对用户输入做严格验证,导致攻击者可以输入一些恶意字符。攻击者一旦向请求行或首部中的字段注入恶意的CRLF,就能注入一些首部字段或报文主体,并在响应中输出,所以又称为HTTP响应拆分漏洞(HTTP Response Splitting)。

CRLF攻击检测

CRLF攻击主要从黑盒角度进行检测,通过修改http参数或url,添加%0d%0a构造恶意CRLF,观察恶意数据在响应头中是否输出,如果恶意数据在响应头中出现,则说明存在CRLF注入漏洞。

如请求

http://www.test.com/index.php?id=1

则构造恶意请求

1
http://www.test.com/index.php?id=1%0d%0aSet-Cookie:SessionID=hacker

检查Cookie是否在响应中被改为SessionID=hacker,即可判断是否存在漏洞。

CRLF攻击利用

CRLF能用来控制http请求头中的内容,所以利用的思路基本也是往这个方向考虑,下面列举几种常见的利用手段。

1.会话固定

会话固定攻击(session fixation attack)是利用应用系统在服务器的会话ID固定不变机制,借助他人用相同的会话ID获取认证和授权,然后利用该会话ID劫持他人的会话以成功冒充他人,造成会话固定攻击。

CRLF利用会话固定就是诱骗受害者使用攻击者指定的会话标识(SessionID),构造一个如下url即可发起攻击,诱拐受害者使用指定Cookie访问网站

1
http://www.test.com/index.php?id=1%0d%0aSet-Cookie:SessionID=hacker

2.控制location进行不安全跳转

网站多数会通过HTTP Header 中的location的方式来实现跳转,我们可以通过CRLF注入Location字段控制网站进行不安全跳转。

1
http://www.test.com/index.php?id=1%0d%0aLocation:www.hack.com

3.注入xss

可将xss直接注入html中触发

1
http://www.test.com/index.php?id=1%0d%0a%0d%0a<script>alert(1)</script>

4.修改浏览器xss保护策略

浏览器存在一个xss的保护策略,X-XSS-Protection,默认会阻止xss触发,但是可以通过http-header关闭这个策略,再配合第三条注入xss,即可造成xss攻击

1
http://www.test.com/index.php?id=1%0d%0aX-XSS-Protection=0%0d%0a%0d%0a<script>alert(1)</script>

应对

过滤 \r 、\n 之类的行结束符,避免输入的数据影响正常http header。

fork me on github