CRLF&&HRS知识点

CRLF&&HRS知识点

CRLF注入是一类注入漏洞。是“回车+换行”的简称,又叫做回车换行符。
表示为\r\n,编码之后是%0d%0a。这个在HTTP协议中表示消息头与消息体之间的分隔(SSRF中的gopher协议里面也有这个点)。浏览器就是根据这两个CRLF来分离HTTPHeader与HTTPBody的。从而把HTTP内容显示出来。所以,如果我们能够控制HTTP消息头的字符,那么我们就能够注入一些恶意的换行。
从而能够注入一些会话的Cookie或者HTML代码,所以CRLFInjection又叫做HTTPRespenseSplitting,简称HRS。
在和 HTTP 请求或响应头组合时,这可以用于表示一行的结束,并且可能导致不同的漏洞,包括 HTTP 请求走私和 HTTP 响应分割。

插几句话:
我们控制 User-Agent因为 http header 里有重要的 Content-TypeContent-Length 。我们想要进行 CRLF注入 ,就势必要控制这两项才能实现。而 User-Agent 的http header 位置恰好位于这些之上,所以可以进行对这两项的覆盖,
欧克

对 HTTP 请求走私而言,它通常在 HTTP 请求传给服务器,服务器处理它并传给另一个服务器时发生,例如代理或者防火墙
举了例子
在这里插入图片描述
一个正常的302跳转包是这样
在这里插入图片描述

注入了一个换行符,那此时的返回包就变成了这样:
在这里插入图片描述
这个时候我们呢就给访问者设置了一个固定的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/)>

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

在这里插入图片描述

之前说了浏览器会根据第一个CRLF把HTTP包分成头和体,然后将体显示出来。于是我们这里这个标签就会显示出来,造成一个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,并能产生会话固定漏洞。

如何修复HRS漏洞,当然是过滤 \r 、\n之类的换行符,避免输入的数据污染到其他HTTP头。
ps: 所以这个过滤也应该添加到 XSS FILTER 中。

转载于:https://www.jianshu.com/p/d4c304dbd0af
转载于:https://houbb.github.io/2020/08/09/web-safe-03-crlf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值