HPP攻击能否成功,在很大程度上取决于目标应用程序服务器如何处理多个同名参数,以及后端请求中的插入点是否准确。如果两种技术需要处理相同的HTTP请求,HPP攻击就会造成严重的后果。Web应用程序防火墙或反向代理可能会处理某个请求,并将其传递给Web应用程序,由Web应用程序抛弃变量,甚至是基于之前不相关的请求部分构建字符串。
欲了解常见应用程序服务器在处理同名参数时的不同行为,请参阅以下论文:
www.owasp.org/images/b/ba/AppsecEU09_CarettoniDiPaola_v0.8.pdf
2.攻击URL转换
许多服务器会在所请求的URL抵达时重写这些URL,再将它们映射到应用程序中的相关后端功能。除传统的URL重写外,服务器在处理REST风格的参数、定制导航包装器以及其他URL转换方法时都会进行URL重写。这种处理方式可能易受HPI和HPP攻击。
为了简化和便于导航,一些应用程序在URL的文件路径,而非查询字符串中插入参数值。通常,应用程序会通过一些简单的规则转换URL,然后将其转发给真正的目标。Apache中的以下mod_rewrite规则用于处理可公共访问的用户资料:
此规则接受非常简洁的请求,例如:
并将这些请求转换为后端请求,以便于用户管理页面user_mgr.php包含的view功能进行处理。它将marcus参数移入查询字符串并添加mode=view参数:
在这种情况下,攻击者就可以利用HPI攻击在经过重写的URL中注入另一个mode参数。例如,如果攻击者请求:
将URL编码的值嵌入经过重写的URL中,将得到:
讲HPP攻击的我们说到,这种攻击能否成功取决于服务器如何处理重复的参数。在PHP平台中,mode参数被视为具有值edit,因而攻击取得成功。