【发布时间】:2019-09-28 20:20:13
【问题描述】:
我们在 AWS ELB 后面运行一个 Web 服务器。我们在 ELB 做了几件事:
- SSL 终止。从 ELB 到 Web 服务器的请求是
http。 - 拦截
http请求并重定向到https
在运行渗透测试时,我观察到从 ELB 返回的 Location 标头提供了我们 Web 服务器的内部 AWS 主机名,而不是面向公众的域名,如果我发送一个空的 Host: 标头。
例子:
$ curl http://my.site.net/ -v -I --http1.0 --Header 'Host:'
* Trying 100.101.102.103...
* TCP_NODELAY set
* Connected to my.site.net (100.101.102.103) port 80 (#0)
> HEAD / HTTP/1.0
> User-Agent: curl/7.63.0
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Server: awselb/2.0
< Date: Fri, 10 May 2019 23:46:54 GMT
< Content-Type: text/html
< Content-Length: 150
< Connection: close
< Location: https://internal-mysite-1234567890.us-west-2.elb.amazonaws.com:443/
ELB 的内部 DNS 名称不应公开。如何正确配置它以使其不暴露?
【问题讨论】:
-
Host 对于 http1.0 无关紧要,因为它不知道 HOST 标头并且 curl 不会为 http1.0 发送主机,但我不确定您的规则配置是什么,我的。 site.net --> 这是公共 ELB 还是私有的,您是否在规则操作中传递自定义主机?顺便说一句,内部 DNS 解析为私有 IP,它不会暴露任何东西。
-
我会看看 http->https 重定向逻辑。似乎 elb 本身正在执行重定向。你知道这是为什么吗?我希望重定向来自网络服务器。
-
ALB 仅在规则配置了操作重定向时才会重定向。
标签: amazon-web-services amazon-elb