回车与换行的区别,CRLF、CR、LF
缩写 | ASCⅡ转义 | 系统 | ASCⅡ值 |
---|---|---|---|
CR | \r | MacIntosh(早期的Mac) | 13 |
LF | \n | Unix/Linux/Mac OS X | 10 |
CR LF | \r\n | Windows |
- CR:Carriage Return,对应ASCII中转义字符\r,表示回车
- LF:Linefeed,对应ASCII中转义字符\n,表示换行
- CRLF:Carriage Return & Linefeed,\r\n,表示回车并换行
CRLF注入漏洞的本质和XSS有点相似,攻击者将恶意数据发送给易受攻击的Web应用程序,Web应用程序将恶意数据输出在HTTP响应头中。(XSS一般输出在主体中)
所以CRLF注入漏洞的检测也和XSS漏洞的检测差不多。通过修改HTTP参数或URL,注入恶意的CRLF,查看构造的恶意数据是否在响应头中输出。
%0d和%0a分别是CR和LF的URL编码
HTTP规范中,行以CRLF结束。所以当检测到%0d%0a后,就认为Location首部字段这行结束了,Set-Cookie就会被认为是下一行
危害
注入一些恶意的换行,这样我们就能注入一些会话Cookie或者HTML代码关闭X-XSS-Protection
HTTP/1.1 302 Moved Temporarily
Date: Fri, 27 Jun 2014 17:52:17 GMT
Content-Type: text/html
Content-Length: 154
Connection: close
Location: http://www.baidu.com.cn
http://www.baidu.com.cn%0aSet-cookie:JSPSESSID%3D123456
HTTP/1.1 302 Moved Temporarily
Date: Fri, 27 Jun 2014 17:52:17 GMT
Content-Type: text/html
Content-Length: 154
Connection: close
Location: http://www.sina.com.cn
Set-cookie: JSPSESSID=123456
此时这样我们就给访问者设置了一个SESSION,造成一个“会话固定漏洞” 当然,CRLF漏洞并不仅限于会话固定,通过注入两个CRLF就能造成一个无视浏览器Filter的反射型XSS。 比如一个网站接受url参数http://test.baidu.com.cn/?url=xxx,xxx放在Location后面作为一个跳转。如果我们输入的是url=xxx%5Cr%5Cnxxx
修复
过滤 \r 、\n 之类的行结束符,避免输入的数据污染其他 HTTP 首部字段