漏洞说明

CRLF是“回车+换行”(\r\n)的简称,其十六进制编码分别为0x0d0x0a。在HTTP协议中,HTTP headerHTTP Body是用两个CRLF分隔的,浏览器就是根据这两个CRLF来取出HTTP内容并显示出来。所以,一旦我们能够控制HTTP消息头中的字符,注入一些恶意的换行,这样我们就能注入一些会话Cookie或者HTML代码。CRLF漏洞常出现在LocationSet-cookie消息头中。

漏洞复现

  1. 通过CRLF注入构造会话固定漏洞

固定会话漏洞:
如果注册前有一个session id为某个值,注册后发现自己的session id还是为这个值就极有可能存在固定会话漏洞
下面举一个固定会话漏洞利用的例子:
假如有一个网站,你注册了一个账号,注册之前抓包PHPSESSID = ghtwf01,注册成功后发现PHPSESSID依然为ghtwf01,此时是普通用户权限
这个时候就可以社工管理员点击某个链接,比如http://xxx/?PHPSESSID=ghtwf01,这个时候你的账户权限就会变为管理员权限(类似于CSRF)
payload:[http://10.23.88.137%0aSet-Cookie:sessionid=ghtwf01](http://10.23.88.137%250aSet-Cookie:sessionid=ghtwf01)
image.png

  1. 通过CRLF注入消息头引发反射型XSS漏洞

构造链接:[http://10.23.88.137%0d%0a%0d%0a<script>alert(/xss/);</script>](http://10.23.88.137%250d%250a%250d%250a%3Cscript%3Ealert(/xss/);%3C/script%3E)

修复方法**

只需过滤掉\r\n之类的换行符就可

参考

https://wooyun.js.org/drops/CRLF%20Injection%E6%BC%8F%E6%B4%9E%E7%9A%84%E5%88%A9%E7%94%A8%E4%B8%8E%E5%AE%9E%E4%BE%8B%E5%88%86%E6%9E%90.html