一般情况下,软件的漏洞信息和特定版本是相关的,因此,软件的版本号对攻击者来说是很有价值的。 在默认情况下,系统会把Apache版本模块都显示出来(http返回头信息)。如果列举目录的话,会显示域名信息(文件列表正文),如: [root@localhost conf]# curl -I 192.168.146.188 HTTP/1.1 200 OK Date: Tue, 30 Aug 2011 09:17:42 GMT Server: Apache/2.2.4 (Unix) PHP/5.2.6 Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT ETag: "be0533-2c-3e9564c23b600" Accept-Ranges: bytes Content-Length: 44 Content-Type: text/html 隐藏方法: 1、隐藏Apache版本号的方法是修改Apache的配置文件,如RedHat系的Linux默认是: vim /etc/httpd/conf/httpd.conf 分别搜索关键字ServerTokens和ServerSignature,修改: ServerTokens OS 修改为 ServerTokens ProductOnly ServerSignature On 修改为 ServerSignature Off 2、重启或重新加载Apache就可以了。 apachectl restart 测试一下,如下: [root@localhost conf]# curl -I 192.168.146.188 HTTP/1.1 200 OK Date: Tue, 30 Aug 2011 09:17:58 GMT Server: Apache Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT ETag: "be0533-2c-3e9564c23b600" Accept-Ranges: bytes Content-Length: 44 Content-Type: text/html 版本号与操作系统信息已经隐藏了。 3、上面的方法是默认情况下安装的Apache,如果是编译安装的,还可以用修改源码编译的方法: 进入Apache的源码目录下的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 2 #define AP_SERVER_PATCHLEVEL_NUMBER 15 #define AP_SERVER_DEVBUILD_BOOLEAN 0 可以根据自己喜好,修改或隐藏版本号与名字。 没作任何设置前,查看web服务器请求文件头 HTTP/1.1 200 OK Date: Sun, 27 Apr 2008 11:56:46 GMT Server: Apache/2.2.8 (Unix) DAV/2 PHP/5.2.5 with Suhosin-Patch Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT ETag: "387a5-2c-3e9564c23b600" Accept-Ranges: bytes Content-Length: 44 Content-Type: text/html 几乎把web服务器详细信息都暴出来了,如果没个版本的apache和php爆出严重漏洞, 会给攻击者提供最有攻击价值的安全信息,这是非常危险的 将apache的配置文件加上两行 ServerTokens ProductOnly ServerSignature Off 重启apache让设置生效 再次发出apache头信息请求 HTTP/1.1 200 OK Date: Sun, 27 Apr 2008 11:57:40 GMT Server: Apache Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT ETag: "387a5-2c-3e9564c23b600" Accept-Ranges: bytes Content-Length: 44 Content-Type: text/html 可以看到apache版本号于已经没有了 做到这点,我们还可以改变apache的版本,这就要修改apache的源代码了 ,在apache的源码包中找到ap_release.h将 #define AP_SERVER_BASEPRODUCT "Apache" 修改为 #define AP_SERVER_BASEPRODUCT "Microsoft-IIS/5.0” 或者 #define AP_SERVER_BASEPRODUCT "Microsoft-IIS/6.0” 然后找到os/unix下的os.h文件,将其 #define PLATFORM "Unix" 修改为 #define PLATFORM "Win32“ 然后重新编译,安装apache。 最后修改httpd.conf配置文件,添加两行 ServerTokens Prod ServerSignature Off 在发送头请求,会有什么,就不用我说了吧,嘿嘿,这叫偷天换日, 从这点来说,php也是一样,同样可以通过这种方式改变一些系统信息,不过根据 GPL开源的精神,这样做貌似不太好,还是保留apache和php版权信息吧。 附: ServerSignature 三个选项 On|Off|EMai 主要起开关作用 ServerTokens 四个选项 Minimal|ProductOnly|OS|Full 四个选项隐藏信息依次增加 |
|
来自: jas0n_liu > 《apache服务》