java主机头攻击

Rah*_*l B 5 java host weblogic header apache2

我正在为我的一位客户进行“主机标头注入”攻击。问题是,使用 Burp Suite,他们捕获请求并修改 Host 标头,如下所示。该应用程序是 Java Servlet,托管在 apache(Web 服务器)+ weblogic(应用程序服务器)上 原始请求

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
Run Code Online (Sandbox Code Playgroud)

修改请求

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
Run Code Online (Sandbox Code Playgroud)

在服务器端,即使在修改“主机标头”之后,请求也会提交到“beta.testinglab.com”,当我在服务器上使用时,request.getRequestUrl()它会给我“www.google.com”。无论如何,有没有办法找出所请求的原始主机是什么。该请求旨在纠正主机内部重定向问题。

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

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

Dev*_*ked 3

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

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

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