用curl -I 域名 ,会发现如果没有设置隐藏版本号的话,服务器版本及Openssl信息会全都显示出来,这样容易暴露web服务器版本,进而通过版本号查找漏洞入侵web服务器。
例如:
HTTP/1.1 302 Found
Date: Wed, 11 Apr 2018 08:03:25 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips PHP/5.6.32
X-Powered-By: PHP/5.6.32
Set-Cookie: PHPSESSID=slukigut3n2fkuii73r4tse9k1; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Location: /Home/Login/index.html
Content-Type: text/html; charset=UTF-8
以上信息暴露了apache的版本号以及openssl的版本号,按照下面的方法来隐藏Apache的版本号。
源码编译的Apache,以/usr/local/apache为主目录
1. vim /usr/local/apache/conf/httpd.conf ### 编辑httpd.conf文件
找到 Include conf/extra/httpd-default.conf,去掉前面的#号,使其生效,wq保存
2. vim /usr/local/apache/conf/extra/httpd-default.conf
找到ServerTokens选项,将其Full值改为Prod ### full值为显示版本号以及其它详细信息,Prod为隐藏这些信息
找到ServerSignature,将其On值改为Off ### Yes为启用这个指令用来配置服务器端生成文档的页脚(错误信息mod_proxy的FTP目录列表、mod_info的输出),No为隐藏这些信息
以上方法只能隐藏版本号以及Openssl信息,如果需要真正隐藏命名,或者需要伪装一个新的命名,需要先修改Apache的源码包,然后再进行编译安装
以源码包httpd-2.4.33为例
- cd 到解压好的 httpd-2.4.33 文件夹里
- 找到include/ap_release.h文件
- vim httpd-2.4.33/include/ap_release.h文件
找到以下几行:
#define AP_SERVER_BASEVENDOR "Apache Software Foundation" ###服务的供应商名称
#define AP_SERVER_BASEPROJECT "Apache HTTP Server" ###服务的项目名称
#define AP_SERVER_BASEPRODUCT "Apache" ###服务的产品名
#define AP_SERVER_MAJORVERSION_NUMBER 2 ###主版本号
#define AP_SERVER_MINORVERSION_NUMBER 4 ###小版本号
#define AP_SERVER_PATCHLEVEL_NUMBER 33 ###补丁级别
#define AP_SERVER_DEVBUILD_BOOLEAN 0 #
将上边的内容改成你想要的信息,然后保存,前面的#号保留。编译安装,这样再用curl -I 域名 命令来查询时就是你修改后的信息了,对方就彻底不知道你的服务器是什么版本的了^_^
原文地址:http://blog.51cto.com/taoyeno1/2097002