利用在请求中构建特殊的回车符,进而导致服务器中断正确的response的响应,并在服务器端形成一个伪造的http response,如果此时其他用户发起了http请求,将导致用户看到的是伪造的页面内容,进而攻击用户。如果这个用户是一个代理服务器则危害更大。如果构建在某个其他普通的站点页面上,则大量不同用户的点击可能导致被攻击网站的出现严重的危害。
这个攻击可利用在XSS跨站,web cache投毒,浏览器投毒上。
攻击原理:
利用网站在读取用户提交的数据后,将用户提交的数据插入http的location的 header中,并返回302跳转响应,进而导致自动访问带有特殊构造字符的URI,最终导致服务器产生了2个response,其中第2个response的内容完全可以由用户构造,用户可以插入木马等iframe连接或其他任意内容。
攻击前提:
存在cr lf字符漏洞的web服务器
攻击关键点:
必须准确的让服务器能够明确的终结第一个response。
利用content-length=0让服务器明确知道第一个response已经结束,接着构建的 http/1.1 200 ok则让服务器认为第二个response已经产生。
攻击演示:
1.正常的查询访问后,如果没有查询到,程序利用location给用户返回原始的查询页面,并在返回的时候将用户之前查询的数据放到URI中,以便后面的页面提取URI参数。
2.在查询中刻意填入如下内容并提交
myf5%0d%0acontent-length:%200%0d%0a%0d%0ahttp/1.1%20200%20ok%0d%0a%0d%0a%0d%0a<html>hacked!</html>
3.服务器做正确响应,并将用户提交的数据放入location中的uri里
4.接着浏览器重新发送location中的uri get请求
5.服务器响应情况
防范方法:
在将用户数据放入uri之前应充分过滤,避免特殊字符。
使用WEB应用防火墙过滤cr lf
文章评论