2022.2.18:
宝塔终于修复这个问题了,从宝塔面板V7.9.0 开始,可以前往“网站-安全设置”里开启“https 防窜站”功能。
从宝塔面板 V8.0 开始,可以前往“网站-高级设置”里开启“HTTPS 防窜站”功能。
1 前言
相信使用宝塔面板的盆友,应该都遇到过宝塔这个 https 串站问题。很多盆友遇到了,但忽略了它,觉得没啥影响的,就置之不理了…
置之不理肯定是不行的,不能有掩耳盗铃侥幸心理,通过这个漏洞,“大有可为”了!先不说串站可能会影响收录 SEO 这一点了,更重要的是它会导致一个不小的安全问题:你的源站 IP 正在泄露,即便你使用了CDN也不行!
至于怎么泄露源站 IP,这里只简单的说一下:可以直接通过 https://你服务器 IP
地址来访问,nginx 会向浏览器发送默认的 SSL 证书,通过查看证书详情可以找到对应的域名。详细了解请见下面的参考文章 1。
下面龙笑天就来说下本文重点了,怎么堵上这个串站、泄露源站 IP 的漏洞。使用宝塔面板的,跟着下面步骤一步步做就 OJBK 了;使用 LNMP 一键包或其它程序的,也可以参考着处理下。
2 新建虚假站点
2.1 新建站点
新建一个不存在的站点,域名填写为:default.default
,提交,如下图:
2.2 删除默认文件
点击下图红框,进入此站点根目录,删除里面的默认文件 index.html
和 404.html
:
3 配置 SSL 证书
回到宝塔“网站管理”,找到 default.default
,点“设置”进入网站配置,然后点击“SSL”,如下图:
然后密钥和证书填写如下,填写完毕,点保存:
左边的“密钥(KEY)”填:
-----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEArNNdCOFAe7b8iUxZ1FKr8p3qeWjn8uzbP6NkvBGU3dtlacVz 3ivW0lf8bFDhBPlxUEsrxge2QAruz83ABdaZNxiDHKA5IRLiYJo2gzlFQ/sDJ967 ScipxFrZ0fza6tWX/TOVNU7VacOy1Fc4ZwDW9yZFpXiFWInbLF7ZNLj986Gc/Esj msQM5M5nKhtQNu0g2iYzz0d+hB0saMyFh5wfXH4i/gmKtpa4IbV6YqGMHpvjroIt McNqHPMyWoDwBa3e8CW5hop8sb2b9FOwEJMRLSijTi5l/K+3oQDjNJbCWfjUG8yg jYUiJ4ae1Zl+5rcYkvsg26+B0PTax8zX+L834QIDAQABAoIBADpcaddc0Xy1j1QB /3eurzgP0aVMIr+q8mLsF1FXEpFUzEtKjVUiMrn3Ult1eHdIkNZPfCm0Yvv/dSOh VE3kaPrtASGCjag4i0+Z4/yuM1DAjBFDqrVA2OtgzpuVqouQs3GioKlOxMyhdFs2 VOqbovv05aH6L/V1IBk8slaWfdNuWm/2X2Qr8q8VQa6VImBhx0K8WHG5Qjk+q0uN 8wRuYo/zeRK4a9U6lcCJxh+JHOGQ1MjqPY1gPrmEJR2cv2KzfbHNynelusWNAswu HrhyGD99spVir16cfMzSWtXknPuBfj/evdXmW4bLAJHYIpZ8X53pxSbxmfR4Ok0z /PbbMP0CgYEA4uM2alMJRSbXqsINodxziwu7xHX3u0Y9FcxGR2t3soRRkBqAEGmY lk8qTZW648q6Hjv+6n1WaDN8Mpgv6T6jkEaJggQfkhivN5p4sSdFiZxoGDMDNJcN ePf08WeTtJ2S2ylATc6WjuDmm3FUXc9eLq5mmIY9uclvcWY1nvi4tLMCgYEAwwBU J97gxQAMrqScgVmVG72CNzMSqfAS3QOrN529Xtr/BU/oNYNSAhdmF/PD2J0zMNTK L92komP0VkZrNCbMHau7p3RZa+hUqRI7BMIIi2wVdZzfL5PWAScGvj3e5Sfjs8gA xsiNyQREkW47qXzgJd3yk1CK7iS3IZ+FCWDpsxsCgYEA3NYFB/ZspndJIbahqDM3 71XrXCzqhMi3+jiLC0cKCaMK9HUmw1LUpzDE3yFm+ANBpt4En96BNQkv0Nsafy9t 6qcNfpRe2kfWfAuJf/zWjTvEghFdBFomTeEi87k6JmndIB6FrXXwS3+SVig30ttd M5ii2cCH4gazxy+R73rt5UsCgYAvcwYHSaFx7kgnuuBmTTEONffYjLHu7f75Dqp7 9wMccLd7SG1dkB3FaoIqM+Ok8uOA71ZffVRRO3c6AxqU7xfd5GreHV6g9kCbf1cj Gj/QBTXXj5tzTUrWrvNiGVYCdsledr1RoX12u3Yf2S3lWQCF1lLva7rSpdZ19QX/ OTjEnwKBgCKXhyhldtdNphSG7x4PRSa8P4sFkMaP6+qTs0JLWYqpFiGVXnELxitG IBotP+YEAcjqUDUsoxbLsOJtZCCCKFK9SvhbG7u++jFDnkZGELNWYNj/6edm9jxX 5VIUDUAABhkbIXWayA9/2ZxhkGDwX8qBqeaRKp2Z6hLhTbAEW8bn -----END RSA PRIVATE KEY-----
右边的“证书(PEM 格式)”填:
-----BEGIN CERTIFICATE----- MIIDVjCCAj4CCQCneja9to+JrTANBgkqhkiG9w0BAQsFADBsMQswCQYDVQQGEwJD TjETMBEGA1UECAwKR3Vhbmd6aG9uZzERMA8GA1UEBwwIU2hlbnpoZW4xDTALBgNV BAoMBExYVFgxDDAKBgNVBAsMA0xYVDEYMBYGA1UEAwwPZGVmYXVsdC5kZWZhbHV0 MCAXDTIxMTIyNjAxNTM1M1oYDzIwOTkxMjMxMDE1MzUzWjBsMQswCQYDVQQGEwJD TjETMBEGA1UECAwKR3Vhbmd6aG9uZzERMA8GA1UEBwwIU2hlbnpoZW4xDTALBgNV BAoMBExYVFgxDDAKBgNVBAsMA0xYVDEYMBYGA1UEAwwPZGVmYXVsdC5kZWZhbHV0 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArNNdCOFAe7b8iUxZ1FKr 8p3qeWjn8uzbP6NkvBGU3dtlacVz3ivW0lf8bFDhBPlxUEsrxge2QAruz83ABdaZ NxiDHKA5IRLiYJo2gzlFQ/sDJ967ScipxFrZ0fza6tWX/TOVNU7VacOy1Fc4ZwDW 9yZFpXiFWInbLF7ZNLj986Gc/EsjmsQM5M5nKhtQNu0g2iYzz0d+hB0saMyFh5wf XH4i/gmKtpa4IbV6YqGMHpvjroItMcNqHPMyWoDwBa3e8CW5hop8sb2b9FOwEJMR LSijTi5l/K+3oQDjNJbCWfjUG8ygjYUiJ4ae1Zl+5rcYkvsg26+B0PTax8zX+L83 4QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQCG5lroJwys+NNrBAh99TuCNPphZmV+ QDyJh9XOTI49GPzZvuarETeN8gwKFCvAqIfrL3rSYo+IrFBdKZkE79MRlZxNTNy8 rfOVdp20sALKTXtGEPLzyyRNwaON/sp4HOpu43DL4mPd5esS0vhKpdsMBoStIlPE 6Lvzne3Bl1YgaRj4k4jlwBWkkUMmVpYozUCRTKlFiayUw8l/2In5+ShydqSsJhP2 FUmrzQLjNtdHkof6t2W1RWD5YeTcAmzcSS8sBW5/DaHFD1htwS97Sfe1zuzEtbeg kJqrGCBj312PV3InMR0B82uKlvn3nMNGZ0Yci35twCR0It8DOz6TGSOq -----END CERTIFICATE-----
4 设置为默认站点
回到宝塔“网站管理”,如下图,将上面建立的这个站点设置为默认站点,提交:
5 校验配置结果
至此,设置全部结束,访问 https://你服务器 IP
,如果浏览器提示下图这样(“高级”里看不到自己服务器上的网站域名)或者显示“403 Forbidden”,那么恭喜你,漏洞已被堵上了!如果能访问到你网站,那么也“恭喜你”,你中这漏洞了~
6 总结
整个过程,懂了原理就容易了,建立一个虚假域名默认站点,对应的自签一个虚假域名证书,OVER。PS:LNMP 一键包等其他环境也可以参考着弄一下~
另一个简单默认站点配置
server { listen 80 default_server; listen [::]:80 default_server; listen 443 ssl default_server; listen [::]:443 ssl default_server; server_name _; set $empty ""; ssl_ciphers aNULL; ssl_certificate data:$empty; ssl_certificate_key data:$empty; return 444; }