java Host Header攻击

问题描述 投票:4回答:1

我正在为我的一个客户进行“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”。无论如何都要找出所要求的原始主机是什么。该请求正在使纠正主机内部重定向问题。

我无法维护预定义的主机条目列表,因为此应用程序是由许多租户定制的。

有没有其他方法可以通过更改服务器上的配置来修复此攻击?

java header apache2 weblogic host
1个回答
1
投票

据我所知,当网络或应用服务器启动时,它开始监听机器的特定端口。解析到该特定计算机的主机名不在Web / app服务器的知识范围内。这取决于您的网络配置。因此,Web / app服务器无法验证HTTP请求中的主机名是否正确。

正如您所提到的,您可以在配置中保留预期的主机名并编写一个servlet过滤器来验证所有传入的请求是否与该主机名匹配。在apache webserver中,如果标题中存在正确的主机名值,您可以自行测试。无论哪种方式,都可能需要配置正确的主机名。

http://httpd.apache.org/docs/trunk/vhosts/name-based.html

© www.soinside.com 2019 - 2024. All rights reserved.