最近测试发现了一个CRLF注入攻击。
CRLF注入又称HTTP头部返回拆分攻击,原理是服务器未过滤攻击者输入的数据,而直接放到头部,导致攻击者通过注入\n\r(%0d%0a)能够控制HTTP返回头部,从而造成XSS注入攻击、Web缓存中毒、会话固定漏洞、302跳转攻击等攻击。(基于公司保密原则,不能泄露信息,这里转网上的文章)
比如一个网站接受url参数http://test.sina.com.cn/?url=xxx,xxx放在Location后面作为一个跳转。如果我们输入的是:
http://test.sina.com.cn/?url=%0d%0a%0d%0a<img src=1 onerror=alert(/xss/)>
我们的返回包就会变成这样:
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:
<img src=1 onerror=alert(/xss/)>
之前说了浏览器会根据第一个CRLF把HTTP包分成头和体,然后将体显示出来。于是我们这里<img>这个标签就会显示出来,造成一个XSS。
解决方案:
1、不要把用户的输入直接输出。
2、过滤用户输入的\r\n。
网友评论