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注入。
测试
插入其它响应头

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

原理分析
Location响应头主要在重定向场景中(201、301、.......)使用,由后端返回给前端,如果没有跳转需求,后端不会返回Location头。
所以漏洞的场景必须是跳转场景里,还需要其它条件,
后端返回的Location的值,是从前端输入里取值,不做任何过滤,直接插入到Location路径中。
修复方式
服务端收到前端过来的参数,在加入Location之前,需要过滤 \r 、\n 之类的行结束符,避免输入的数据污染其它HTTP首部字段。
浙公网安备 33010602011771号