写点什么

Nginx 安装后要做的第一件事

发布于: 2021 年 03 月 04 日


最近有朋友给我发来一个漏洞扫描报告,其中有一项是“Nginx 头部攻击漏洞”



在绿盟的报告中,可以看到,头部攻击是指,http host header 头重的 HTTP_HOST 不可靠,所以,如果后端开发代码中,通过类似 PHP 中的_SERVER["HTTP_HOST"]来获取 host 信息,那可能获取到的不是自己站点的 host 信息,这里简单做个复现


环境:

  • Nginx

  • PHP

  • Brupsuite


复现方法很简单,在 Nginx 中配置一个虚拟主机站点,用 php-fpm 处理 php,在 php 中写一小段代码,通过_SERVER['HTTP_HOST']获取 host 并打印,用 Brupsuite 篡改 host 信息,环境搭建信息这里就不多说了,直接看 Brupsuite 过程,PHP 代码如下:



接着启动 Brupsuite,配置代理



浏览器设置代理到 burp



接着通过浏览器请求上面 nginx 配置的 server,在 burp 抓包,接着 action——Send to Repeater,我们先看正常的返回



接着,通过 burp 改 header 中的 host,模拟攻击,看结果



可以看到,php 拿到的就不是我们自己的 host 信息,所以,这里会把恶意代码传过去


Nginx 的 server_name 匹配规则,是通过 HTTP 请求头的 host,去匹配配置文件中的 server_name,去决定走那个 server 配置,如果所有 server_name 都匹配不到,就使用默认的 server,如果没有配置默认的 server,就会请求第一个 server


这也就是为什么,上面 host 随便写个域名,都可以访问到的原因


这里还有一个 Nginx 的安全配置相关的,叫“恶意域名解析漏洞”,同样的原理,别人知道你的 IP,随便解析个域名,就可以访问你的网站


以上两种漏洞防范很简单,就是在 nginx 主配置文件中,写第一个 server,server_name 用默认 default_server,让所有未匹配的 server_name,都走这个 server 的配置,直接 return 对应的状态码,配置如下:



如果有 https 的网站,还需要配置 443 端口的默认 server



配置完成后,通过上面的方法再模拟一次攻击



可以看到,已经无法访问


发布于: 2021 年 03 月 04 日阅读数: 21
用户头像

有一点想法的电脑维修工 2020.07.14 加入

一位有些想法的技术爱好者

评论

发布
暂无评论
Nginx安装后要做的第一件事