回车与换行的区别,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 首部字段

results matching ""

    No results matching ""