CRLF注入

0x01 简介

在HTTP协议中,HTTP请求与响应的各个字段之间的分隔符为\r\n,即CRLF。如果我们能在HTTP响应部分注入CRLF,并且加入自己的一部分代码,浏览器就会接受并且解析HTTP响应,完成我们想要的功能。

0x02 危害

能注入HTTP响应部分,我们能干啥呢?HTTP响应分为head部分和body部分,head部分各个字段之间的分隔是\r\n,head与body的分隔是\r\n。我们可以注入到body中,加入javascript代码,形成xss攻击。只要能注入代码到body部分,所有在浏览器层面的攻击都能实行。

另一个常见的攻击是注入头部,给当前的会话设置cookie,如果存在会话固定漏洞,那么就能获得用户对应的权限。

0x03 会话固定漏洞

在CRLF注入head部分,设置cookie后,如果服务器接受了这个cookie,并且在用户登录后不改变这个cookie,那么攻击者就能使用这个cookie,拿到和合法用户一样的权限。

0x04 攻击方法

常见的攻击点在重定向的地方,如果没做过滤或者其它安全设置,直接在跳转的url后加上\r\n和要插入的代码,例如http://www.a.com/go.php?target=http://www.b.com\r\n\r\n将这个url发送给要攻击的用户,ta点击了这个链接就会被攻击。在插入xss时,可能会被浏览器的xss filter阻止,只要在head部分插入X-XSS-Protection:0即可禁止浏览器的xss保护策略。另外,在location后面的javascript代码只会在内核为webkit的浏览器中运行。