CRLF 指的是回车符(CR,ASCII 13,\r,%0d) 和换行符(LF,ASCII 10,\n,%0a),操作系统就是根据这个标识来进行换行的,你在键盘输入回车键就是输出这个字符,只不过Win和Linux系统用的标识不一样而已。

在HTTP当中HTTP的Header和Body之间就是用两个CR/LF进行分隔的,如果能控制HTTP消息头中的字符,注入一些恶意的换行,这样就能注入一些会话cookie和html代码,所以CRLF injection 又叫做 HTTP response Splitting,简称HRS。

CRLF漏洞可以造成Cookie会话固定反射型XSS(可过waf)之类的危害。

特征:
看到请求路径上有 /%0D%0A%XXX说明有人在测试CR LF注入。


测试

插入其它响应头

image

插入XSS

url=%0d%0a%0d%0a<img src=1 onerror=alert(/xss/)>/

image


原理分析

Location响应头主要在重定向场景中(201、301、.......)使用,由后端返回给前端,如果没有跳转需求,后端不会返回Location头。

所以漏洞的场景必须是跳转场景里,还需要其它条件,
后端返回的Location的值,是从前端输入里取值,不做任何过滤,直接插入到Location路径中。


修复方式

服务端收到前端过来的参数,在加入Location之前,需要过滤 \r 、\n 之类的行结束符,避免输入的数据污染其它HTTP首部字段。

posted on 2020-03-24 17:02  Mysticbinary  阅读(10113)  评论(1)    收藏  举报