java Host Header攻击

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java Host Header攻击相关的知识,希望对你有一定的参考价值。

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

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

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

答案

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

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

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

以上是关于java Host Header攻击的主要内容,如果未能解决你的问题,请参考以下文章

目标URL存在http host头攻击漏洞

目标URL存在http host头攻击漏洞

检测到目标URL存在http host头攻击漏洞怎么修复

检测到目标URL存在http host头攻击漏洞怎么修复

HTTP Host Header Attack:Basic password reset poisoning

HTTP Host 头攻击,这是什么鬼?