导航菜单

Nginx(LNMP)、Apache(LAMP)、Tomcat版本信息泄漏危险和修复方法

陆兴东 2026-04-08 39 浏览 中间件

前言

在使用Nginx(或lnmp)做反向代理、集群或是做跨域配置、Apache(或lamp)、Tomcat的相关版本号和软件名称信息泄露时,攻击者会利用相应软件版本的当前漏洞,进行有效的相应攻击。

一、攻击示例

截图以tomcat为例(Nginx、Apache类似),攻击者有可能会故意访问一个不存的页面,来获取对应应用APP的名称和版本号,利用其软件当前版本存在的漏洞进行攻击。

image.png

二、解决办法

把Nginx、Apache、Tomcat对应的版本号和软件名称进行隐藏或修改,其中Nginx、Apache需要编译安装前进行源文件的内容修改来达到隐藏软件名称和版本号的目的,Tomcat是解压之后进行文件的修改来达到隐藏软件名称和版本号的目的。

2.1、Nginx(或LNMP)

2.2.1、解压好nginx安装包,安装包内容修改

[root@kafka01 core]# cd /root/nginx-1.21.4/src/core

[root@kafka01 core]# vi nginx.h

找到以下参数进行修改(举例说明,可以根据实际情况进行修改)

image.png

[root@kafka01 http]# cd /root/nginx-1.21.4/src/http

[root@kafka01 http]# vi ngx_http_header_filter_module.c

image.png

[root@kafka01 http]# cd /root/nginx-1.21.4/src/http

[root@kafka01 http]# vi ngx_http_special_response.c

image.png

修改完成之后,再进行编译安装(make和make install)。

2.1.2、进入nginx.conf配置文件中进行web版本号的隐藏

[root@kafka01 nginx]# cd /usr/local/nginx/conf

[root@kafka01 nginx]# vi nginx.conf

image.png

重启之后生效。

2.1.3、测试软件版本号和软件名称隐藏结果

[root@kafka01 nginx]# curl -I http://localhost

image.png

从测试的结果可以看出软件名称已经被改为我们自己定义的“transferapp”,并且版本号也消失不见。如果不在nginx.conf中添加“server_tokens off”参数,此时会把之前自己自定义的版本号输出,如下:

image.png

此时不管是不是输出版本号,对攻击者来说已经无法得知其软件的真正名称,从而也避免了利用软件名称查找露洞攻击的风险。

2.2、Apache(或LAMP)

2.2.1、解压httpd文件,并修改源文件参数

2.2.1.1、隐藏应用名称和版本号

[root@kafka01 include]# cd /root/httpd-2.4.1/include

[root@kafka01 include]# vi ap_release.h

image.png

2.2.1.2、隐藏平台类型

[root@kafka01 include]# cd /root/httpd-2.4.1/os/unix

[root@kafka01 include]# vi os.h

image.png

保存以上文件之后,再进行编译安装。

2.2.1.3、验证修改结果

[root@kafka01 apache]# curl -I http://localhost

image.png

从结果中看出Server字段的内容,已经改为我们自己自定义的应用名称、版号和平台类型。

如果版本号和平台类型都不想让其获取的话,可以在httpd.conf配置文件修改或是添加“ServerSignature off”和“ServerTokens prod”这2个参数之后,重启httpd使其生效。

[root@kafka01 apache]# curl -I http://localhost

image.png

2.2.2、PHP信息隐藏

php的信息隐藏相对来说,操作比较简单,只需要把“expose_php = On”改成“expose_php = Off”即可。

[root@kafka01]# vi /etc/php.ini

找到“expose_php = On”改成“expose_php = Off”。

2.3、Tomcat

2.3.1、解压tomcat,并修改信息

2.3.1.1、隐藏命令行下的头部信息

通过命令行获取http请求返回的头部信息

[root@kafka01 conf]# cd /usr/local/tomcat/conf

[root@kafka01 conf]# vi server.xml

image.png

用命令进行测试的结果如下:

image.png

2.3.1.2、修改网页端展示的版本信息

通过网页访问tomcat网站,测试页面和错误页面中包含Tomcat的版本信息,此时可以用以下方面把相关信息进行隐藏。

[root@kafka01 lib]# cd /usr/local/tomcat/lib

[root@kafka01 lib]# jar -xf catalina.jar

[root@kafka01 lib]# cd org/apache/catalina/util

[root@kafka01 lib]# vi ServerInfo.properties

image.png

再将修改后的信息压缩回jar包。

[root@kafka01 lib]# jar uvf catalina.jar org/apache/catalina/util/ServerInfo.properties

或是直接把catalina.jar下载下来,用压缩工具打开,进行文件内容的修改。

重启之后生效。

2.3.1.3、用浏览器测试结果

image.png

当访问相关页面出现问题时,报错页面显示出的应用名称和版本号都是自己自定义的信息,避免了利用软件名称和版本号查找露洞攻击的风险。