再谈 nginx 泄漏 web 服务器真实 IP

https://hqidi.com/145.html
承接上文
我们先来重现一下 nginx 的这个“漏洞”
首先,nginx 的配置文件如下,很干净整洁:

▲ 这是一个很常见的配置,估计很多人这么用了很久,觉得没啥问题。
PS:ssl_session_timeout 30秒ssl会话保持时间是我为了调试方便特意这么设的,诸位不要这么设,用默认的就行。

这个时候,黑客来了,此时,他啥都不知道,他只是通过 IP 扫描工具扫到了你的服务器的IP是在线状态。
然后他直接把你的ip前面加上 https:// 用浏览器来访问。


▲ 上面的配置文件中,我并没有设置 default_server 默认网站,nginx 依然给黑客大哥返回了我网站的证书。
原来 nginx 的逻辑是这样的:
客户端请求了一个压根没有配置的主机名(这里就是ip地址),nginx 服务端看到请求来都来了。总不能让客人空手而归,会把配置文件里面找到的第一个虚拟主机配置返回给客户端,因为请求的是443端口,所以会返回配置文件里面第一个https站点。
此时,黑客大哥就拿到了你的网站的域名跟与其对应的真实IP,你通过 CDN 隐藏网站真实 IP 的想法梦碎了。

nginx 泄漏 CDN 后的 IP

https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_reject_handshake

上面是 nginx 官方的建议,若你的 default_server 另有用途,可以用如下的设置:

server {
    listen 443 ssl;
    server_name 43.138.139.189;
    ssl_reject_handshake on;
}

ssl_reject_handshake

或者你可以用空证书设置▼

server {
    listen 443 ssl;
    server_name 43.138.139.189;
    set $empty "";
    ssl_ciphers aNULL;
    ssl_certificate data:$empty;
    ssl_certificate_key data:$empty;
}

文中 IP 为临时 IP ,所以没打码。

原创文章,转载请注明: 转载自笛声

本文链接地址: 再谈 nginx 泄漏 web 服务器真实 IP

7 条评论

  • 老张博客 2022年5月17日 回复

    我的站都没有戴套,这样还真的危险呢!

  • 老刘 2022年5月17日 回复

    放到外面了,也没啥流量,也就没有戴套,话说阿帕奇有没有这样的漏洞?

    • dige 2022年5月17日 回复 作者

      2019年的时候测了阿帕奇的 httpd ,没有这样的漏洞。

  • 哥斯拉 2022年5月17日 回复

    我每个服务器都设置了个返回444的default_server,应该无此问题。

    • dige 2022年5月17日 回复 作者

      有问题的,HTTPS 是先 S 再 HTTP,返回 444 这个动作是 HTTP 层干的活,说明此时,TLS 握手已经完成,服务器已经给客户端发送证书了。你可以自己用 https://IP 试试。

  • 萧瑟 2022年5月17日 回复

    这个漏洞很有价值,我也去修复一下。

  • 黄楼梦 2022年7月26日 回复

    我服务器的真实IP直接跳转到博客域名了 也没打算隐藏。。因为没用CDN,查IP下的域名就能查到

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

Copyright © 2015-2024 笛声博客 All Rights Reserved     浙ICP备15036123号-1