Web漏洞搜索
上QQ阅读APP看书,第一时间看更新

6.1 HTTP请求夹带攻击

当攻击者利用CRLF注入漏洞在一个原始合法的HTTP请求后附带上另一个HTTP请求时,就会发生HTTP请求夹带攻击。由于应用程序不能预见有注入的CRLF,所以它会把两个HTTP请求合在一起,将其看作一个单个的HTTP请求。该请求被传递给接收服务器(典型地,一个代理服务器或者防火墙)进行处理,然后被发送到另一个服务器,例如代表网站执行相应业务操作的应用服务器。这种漏洞可以导致缓存投毒、防火墙绕过、请求劫持、HTTP响应分割等攻击。

在缓存投毒情形下,攻击者可以修改应用程序缓存中的条目,可以用恶意的网页代替正常的网页提供服务。当HTTP请求用CRLF进行精心设计并免于防火墙的安全检查时,就可以实现防火墙绕过。请求劫持的情形是指攻击者可以在无须攻击者与客户端交互的情况下就可以窃取httponly cookie以及HTTP身份认证信息。这些攻击之所以能够发生作用,是因为服务器会将CRLF解释为HTTP头开始的位置,因此如果服务器在CRLF之后看到了另一个头部,它们会将它解释为另一个新的HTTP请求的开始。

本章后面将聚焦HTTP响应分割攻击,这种攻击方式允许攻击者通过注入浏览器能够解析的新响应头对原本单一的HTTP响应消息进行分割。依赖于漏洞的特性,攻击者可以采用两种方法中的一种来利用HTTP响应分割。第一种方法是,攻击者使用CRLF字符结束服务器的初始响应并插入额外的头消息以生成一个新的HTTP响应。然而,有些时候攻击者仅修改响应消息而并不注入一个全新的HTTP响应。例如,他们可能只是注入几个有限字符。这导致了第二种利用响应分割的方法,即插入新的HTTP响应头信息,例如Location头。注入Location头将会使攻击者能够将CRLF漏洞与重定向目标对象到恶意网站或者跨站脚本攻击(XSS)联合使用。