我正在研究" Host Header Injection"攻击我的一个客户。问题是,使用Burp Suite他们捕获请求并修改Host头,如下所示。该应用程序是Java Servlet并托管在apache(web服务器)+ weblogic(App服务器)上 原始请求
GET /myContext/testServlet?rq=home&tenId=123456 HTTP/1.1
Host: beta.testinglab.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
修改后的请求
GET /myContext/testServlet?rq=home&tenId=123456 HTTP/1.1
Host: www.google.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
在服务器端,即使修改了"主机标题",也会将请求提交给" beta.testinglab.com"当我在服务器上使用request.getRequestUrl()
时,它会给我" www.google.com"。
无论如何都要找出所要求的原始主机是什么。该请求正在纠正主机内部重定向问题。
我无法维护预定义的主机条目列表,因为此应用程序是由许多租户定制的。
是否有其他方法可以通过更改服务器上的配置来修复此攻击?
答案 0 :(得分:1)
据我所知,当网络或应用服务器启动时,它开始侦听机器的特定端口。解析到该特定计算机的主机名不在Web / app服务器的知识范围内。这取决于您的网络配置。因此,Web / app服务器无法验证HTTP请求中的主机名是否正确。
正如您所提到的,您可以在配置中保留预期的主机名并编写一个servlet过滤器来验证所有传入的请求是否与该主机名匹配。在apache webserver中它可以自行测试是否存在正确的主机名值在标题中。无论哪种方式,都可能需要配置正确的主机名。