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

一、攻击示例

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

二、解决办法 

        把Nginx、Apache、Tomcat对应的版本号和软件名称进行隐藏或修改,其中Nginx、Apache需要编译安装前进行源文件的内容修改来达到隐藏软件名称和版本号的目的,Tomcat是解压之后进行文件的修改来达到隐藏软件名称和版本号的目的。下面会对每一种应用服务进行版本号隐藏的详细介绍。

2.1.1、Nginx(或LNMP)

1、解压nginx安装包,并修改源文件参数

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

        [root@kafka01 core]# vi nginx.h

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

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

        [root@kafka01 http]# vi ngx_http_header_filter_module.c

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

        [root@kafka01 http]# vi ngx_http_special_response.c

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

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

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

        [root@kafka01 nginx]# vi nginx.conf

        重启nginx后生效。 

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

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

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

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

2.1.2、Apache(或LAMP)

1、解压http文件,并修改源文件参数

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

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

        [root@kafka01 include]# vi ap_release.h

 1.2、隐藏平台类型 

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

        [root@kafka01 include]# vi os.h

         保存以上文件之后,再进行编译安装(make和make install)。

1.3、验证修改结果

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

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

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

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

2.1.3、PHP信息隐藏 

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

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

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

2.1.4、Tomcat

1、解压tomcat,并修改信息

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

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

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

        [root@kafka01 conf]# vi server.xml

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

         [root@kafka01 conf]# curl -I http://192.168.2.12:8080/index.html

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

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

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

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

        重启Tomcat后所修改内容生效。

1.3、用浏览器测试修改后的结果 

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

推荐链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: