知其然要知其所以然。CRLF是”回车 + 换行”(\r\n)的意思。
在HTTP协议中,HTTP Header与HTTP Body是用两个CRLF分隔的,浏览器就是根据这两个CRLF来取出HTTP 内容并显示出来。所以,一旦我们能够控制HTTP 消息头中的字符,注入一些恶意的换行,这样我们就能注入一些会话Cookie或者HTML代码(CRLF Injection=HTTP Response Splitting=HRS)
如果HTTP头中存在Location: http://baidu.com这种方式来进行跳转,举例:
HTTP/1.1 302 Moved Temporarily
Date: Fri, 27 Jun 2021 17:52:17 GMT
Content-Type: text/html
Content-Length: 154
Connection: close
Location: http://www.baidu.com %0A%0Dtest:%20key=value
通过转义字符,转义为:
HTTP/1.1 302 Moved Temporarily
Date: Fri, 27 Jun 2021 17:52:17 GMT
Content-Type: text/html
Content-Length: 154
Connection: close
Location: http://www.baidu.com
Dtest: key=value
我们对请求的接口进行拦截,并修改拦截到的HTTP响应header中的字符(Location,Set-Cookie),在响应的header参数中加入%0A%0Dtest:%20key=value等内容,查看响应中是否会增加新的响应头。如果存在,会存在xss注入的风险