Apache/Nginx/PHP 服务器隐藏版本号和系统
一般情况下,软件的漏洞信息和特定版本是相关的,因此,软件的版本号对攻击者来说是很有价值的。
在默认情况下,Apache Httpd,Nginx,PHP 等系统会把版本模块都显示出来(http返回头信息)。
如果列举目录的话,会显示域名信息,服务器版本号,操作系统类型等。
Apache 隐藏版本号
不隐藏版本号,正常访问返回客户端头信息:
[root@ithomer conf]# curl --head 127.0.0.1
HTTP/1.1 200 OK
Date: Thu, 22 Jan 2015 15:39:00 GMT
Server: Apache/2.2.26 (CentOS)
X-Powered-By: PHP/5.5.9
Vary: Cookie,Accept-Encoding,User-Agent
X-Pingback: https://blog.mimvp.com/xmlrpc.php
Cache-Control: max-age=600
Expires: Thu, 22 Jan 2015 15:49:00 GMT
Content-Type: text/html; charset=UTF-8
上面头信息中,会显示服务器类型和版本(Apache/2.2.26),以及操作系统(CentOS)
修改Apache的配置文件:
vim /etc/httpd/conf/httpd.conf
修改 ServerTokens
修改 ServerTokens OS 为 ServerTokens productonly
重启 Apache : /etc/init.d/httpd restart
再次返回头信息如下:
[root@ithomer conf]# curl --head 127.0.0.1
HTTP/1.1 200 OK
Date: Thu, 22 Jan 2015 15:40:53 GMT
Server: Apache
X-Powered-By: PHP/5.5.9
Vary: Cookie,Accept-Encoding,User-Agent
X-Pingback: https://blog.mimvp.com/xmlrpc.php
Cache-Control: max-age=600
Expires: Thu, 22 Jan 2015 15:50:53 GMT
Content-Type: text/html; charset=UTF-8
同时修改 ServerTokens 为 Prod 和 ServerSignature 为off 返回结果
[root@ithomer conf]# curl --head 127.0.0.1
HTTP/1.1 200 OK
Date: Thu, 22 Jan 2015 16:23:07 GMT
Server: Apache
Vary: Cookie,Accept-Encoding,User-Agent
X-Pingback: https://blog.mimvp.com/xmlrpc.php
Cache-Control: max-age=600
Expires: Thu, 22 Jan 2015 16:33:07 GMT
Content-Type: text/html; charset=UTF-8
到这里,我们还可以改变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
最后修改 vim /etc/httpd/conf/httpd.conf 配置文件,添加两行
ServerTokens Prod // Prod 同 ProductOnly
ServerSignature Off
在发送头请求,头信息就都被偷天换日了
从这点来说,php也是一样,同样可以通过这种方式改变一些系统信息。
附:
ServerSignature 三个选项,分别是 On | Off | EMail
ServerTokens 的取值如下,其分别隐藏信息依次增加
ProductOnly : Server: Apache
Major : Server: Apache/2
Minor : Server: Apache/2.2
Minimal : Server: Apache/2.2.26
OS : Server: Apache/2.2.26 (CentOS)
Full : Server: Apache/2.2.26 (CentOS) DAV/2 PHP/5.5.9 SVN/1.6.11 mod_perl/2.0.4 Perl/v5.10.1
推荐: ServerTokens ProductOnly
Nginx 隐藏版本号
nginx 配置文件里增加 server_tokens off;
server_tokens作用域是http server location语句块
server_tokens默认值是on,表示显示版本信息,设置server_tokens值是off,就可以在所有地方隐藏nginx的版本信息。
http { include blockip.conf; include mime.types; default_type application/octet-stream; charset utf-8; log_format main '$time_iso8601 $remote_addr - "$request_method $uri?$args" ' '$status $request_time $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; server_tokens off; # 隐藏Nginx版本号 .... }
修改 fastcgi.conf
vim vim /usr/local/nginx/conf/fastcgi.conf
修改
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
为
fastcgi_param SERVER_SOFTWARE nginx;
最后,重启 nginx
/etc/init.d/nginx restart
PHP 隐藏版本号
配置文件php.ini进行配置,默认情况下 expose_php = On
httpd 修改步骤:
vim /etc/php.ini
expose_php = On
将其改为
expose_php = Off
重启 Apache:
/etc/init.d/httpd restart
nginx 修改步骤:
vim /usr/local/php/etc/php.ini
expose_php = On
将其改为
expose_php = Off
软连接配置文件:
ln -s /usr/local/php/etc/php.ini /usr/local/php/lib/php.ini (注意细节)
重启 php-fpm :
/etc/init.d/php-fpm restart
获取头信息:
[root@ithomer conf]# curl --head 127.0.0.1
HTTP/1.1 200 OK
Date: Thu, 22 Jan 2015 16:15:48 GMT
Server: Apache
Vary: Cookie,Accept-Encoding,User-Agent
X-Pingback: https://blog.mimvp.com/xmlrpc.php
Cache-Control: max-age=600
Expires: Thu, 22 Jan 2015 16:25:48 GMT
Content-Type: text/html; charset=UTF-8
发现上面php版本信息(X-Powered-By: PHP/5.5.9)已经隐藏了
附上
修改Tomcat 服务器名称的头信息
修改Tomcat配置文件:
vim /opt/apache-tomcat-7.0.54/conf/server.xml
添加下面红色一行:
<Connector port="8280" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
server="MIServer" />
查看Tomcat头信息:
[root@ithomer conf]# curl --head 127.0.0.1:8280
HTTP/1.1 200 OK
Content-Type: text/html;charset=ISO-8859-1
Transfer-Encoding: chunked
Date: Thu, 22 Jan 2015 16:30:20 GMT
Server: MIServer
发现上面Tomcat服务器名称已经修改为了 Server: MIServer
隐藏 Nexus 服务器的头信息
Nexus 默认运行在Jetty下,并且在头信息中曝露了版本号,如下:
[root@ithomer apache-tomcat-7.0.54]# curl --head 127.0.0.1:8081
HTTP/1.1 404 Not Found
Date: Fri, 23 Jan 2015 01:51:06 GMT
Cache-Control: must-revalidate,no-cache,no-store
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 1267
Server: Jetty(8.1.11.v20130520)
由于Nexus服务运行在Jetty框架内,因此需要修改Jetty服务配置文件
修改jetty.xml配置文件 :
vim /opt/nexus-2.11.0/nexus-2.11.0-02/conf/jetty.xml
修改 sendServerVersion 值由 true 为 false(不发送服务器版本信息),如下:
<Set name="stopAtShutdown">true</Set>
<Set name="sendServerVersion">false</Set>
<Set name="sendDateHeader">true</Set>
<Set name="gracefulShutdown">1000</Set>
重启Nexus服务:
/opt/nexus-2.11.0/nexus-2.11.0-02/bin/nexus restart
查看Nexus头信息:
[root@ithomer apache-tomcat-7.0.54]# curl --head 127.0.0.1:8081
HTTP/1.1 404 Not Found
Date: Fri, 23 Jan 2015 02:13:53 GMT
Cache-Control: must-revalidate,no-cache,no-store
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 1267
修改完重启Nexus后,发现服务器版本信息 Server: Jetty(8.1.11.v20130520),已被隐藏了
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2018-08-19 11:32:11
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!