预备
<CRLF>是换行符,CRLF注入顾名思义就是把换行符写入,那么要把换行符写入到哪里呢?看看下面的http头
可以看到,每一行都包含特定的头部信息,然后以换行为标志写入其他的头部信息,例如Host:127.0.0.1占一行,User-Agent占一行。
看到这里可以知道,CRLF注入就是当http头部某一行头信息可以被用户操控时,插入<CRLF>从而控制其他的头信息。
例子
127.0.0.1/Test/CRLF注入.php?url=111111这个页面拥有CRLF注入漏洞,看看它的请求头
响应头
在发出http请求后,返回了一个重定向的响应头,而在响应头的Location处可以看到在url中输入的111111,该头信息可控。
响应的内容和头部信息用两个换行符分割Content-Type:text/html;charset=UTF-8<CRLF><CRLF>1111111111haha,那么当url被构造成这样的时候,就会触发xss
http://127.0.0.1/Test/CRLF%E6%B3%A8%E5%85%A5.php?url=http://baidu.com%0A%0D%0A%0D%3Cimg%20src=1%20onerror=alert(%271%27)%3E
响应头
注意
在实际的情况中,浏览器有xss-filter的时候可以插入X-XSS-Protection:0关闭拦截功能。
当后台对url的输入进行检测的时候可以插入Content-Type: text/html;charset=utf-7,并把主体内容变为utf-7编码。
当想修改可控头信息前面已被设置的头信息时,可以直接在下一行修改,后面的会覆盖前面的。
实例参考:v.shopify.com响应拆分 Twitter的HTTP响应拆分 https://www.cnblogs.com/wfzWebSecuity/p/6648767.html