apache服务安全配置

0x01.错误详情页隐藏

错误详情页测试方法

  • 访问网站不存在的页面,如果网站没有做404页面重定向,就会泄露其敏感信息如下图

mark

  • 查看响应头信息
1
2
3
4
5
6
7
8
zzq@ubuntu:~$ curl -I http://192.168.178.135/
HTTP/1.1 200 OK
Date: Tue, 01 May 2018 11:58:36 GMT
Server: Apache/2.4.7 (Ubuntu) #中间件版本及操作系统
X-Powered-By: PHP/5.5.9-1ubuntu4.24 #显示服务端脚本语言及其版本号
Link: <http://192.168.178.135/index.php/wp-json/>; rel="https://api.w.org/"
Link: <http://192.168.178.135/>; rel=shortlink
Content-Type: text/html; charset=UTF-8
修复方法
1).修改配置文件:etc/apache2/apache2.conf 或者/etc/httpd/conf/httpd.conf隐藏中间件信息。修改或添加以下配置
1
2
ServerTokens Prod
ServerSignature Off
2).修改配置文件:/etc/php5/apache2/php.ini隐藏PHP信息,将expose_php = On 改为 expose_php = Off
1
expose_php = Off
3).修改配置文件: /etc/apache2/sites-enabled/000-default.conf设置网站根目录为 /var/www/html/
1
zzq@ubuntu:~$ sudo vim /etc/apache2/sites-enabled/000-default.conf

mark

4).修改配置文件:/etc/apache2/apache2.conf将网站根目录里面的AllowOverride None设置AllowOverride All,保存退出!
1
zzq@ubuntu:~$ sudo vim /etc/apache2/apache2.conf
1
2
3
4
5
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All #设置为All,此目录下的.htaccess 指令才会生效
Require all granted
</Directory>
5).修改完以上配置文件保存并退出,然后重启apache服务
1
zzq@ubuntu:~$ sudo service apache2 restart
6).再次访问错误页面,已经没有刚才泄露的信息了

mark

1
2
3
4
5
6
7
8
9
10
zzq@ubuntu:~$ sudo curl -I http://192.168.178.135/
HTTP/1.1 200 OK
Date: Tue, 01 May 2018 12:26:10 GMT
Server: Apache
Last-Modified: Tue, 17 Apr 2018 02:49:12 GMT
ETag: "2cf6-56a02621ccf1c"
Accept-Ranges: bytes
Content-Length: 11510
Vary: Accept-Encoding
Content-Type: text/html

0x02.重定向404页面

加固步骤:

1).在网站根目录新建一个.htaccess文件,内容为:
1
2
3
4
zzq@ubuntu:/var/www/html$ cd /var/www/html/
zzq@ubuntu:/var/www/html$ ls -a
. .. index.html wordpress
zzq@ubuntu:/var/www/html$ sudo vim .htaccess
1
ErrorDocument 404 /404.html
1
2
3
zzq@ubuntu:/var/www/html$ ls -a
. .. .htaccess index.html wordpress
zzq@ubuntu:/var/www/html$
2).在同目录下新建404.html,文件名与上一步指定的文件名相同,即404.html
1
zzq@ubuntu:/var/www/html$ sudo vim 404.html
1
2
3
4
5
6
7
8
9
<!DOCTYPE html>
<html>
<head>
<title>404页面</title>
</head>
<body>
Hello,This is 404 page!!
</body>
</html>
3).测试一下,可以看到我们自定义的页面已经生效

mark

注意事项

1、不要将404错误直接转向到网站首页,这将导致首页不被收录;
2、/404.html 前面不要带主域名,否则返回的状态码是302或200状态码;
3、自定义的404页面必须是大于512B,如果小于这个大小,浏览器就不会执行;


0x03.列目录问题

什么是列目录

当Web服务器配置不当的时候,如果当前目录不存在默认文件(比如index.html),Apache会列出当前目录下所有文件,造成敏感信息泄露。
我们可以测试一下,测试方法:
首先我们可以删除存在的默认文件index.html

1
2
3
4
5
6
7
zzq@ubuntu:/var/www/html$ ls
404.html index.html wordpress
zzq@ubuntu:/var/www/html$ sudo cp index.html index.html.bak
zzq@ubuntu:/var/www/html$ sudo rm -rf index.html
zzq@ubuntu:/var/www/html$ ls
404.html index.html.bak wordpress
zzq@ubuntu:/var/www/html$

然后再访问网站

mark

修复方法

修改配置文件:/etc/apache2/apache2.conf
1
zzq@ubuntu:~$ sudo vim /etc/apache2/apache2.conf
1
2
3
4
5
<Directory /var/www/html>        #这必须是网站的根目录
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

Options Indexes FollowSymLinks
这里的indexes 是指在目录中要存在index文件,如果不存在把文件列出来,如果存在index文件可以直接显示index文件,因此每个目录都必须存在index文件,如果不存在有可能此目录把文件全部列出来。

删除Indexes这个参数,保存退出,然后重启apache服务
1
2
3
4
5
<Directory /var/www/html>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
1
zzq@ubuntu:~$ sudo service apache2 restart
再次访问就会出现403Forbidden页面如下图所示:

mark


0x04.删除默认安装页面

测试方法

默认安装完成之后,会有一个默认的apache测试页面,里面会泄露一些信息,包括网站目录,操作系统,版本等等

mark

加固方法

step1.编辑配置文件/etc/httpd/conf.d/welcome.conf

1
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf

step2.找到如下行

mark

step3.修改为如下,并保存退出

mark

step4.重启apache服务

1
[root@localhost ~]# service httpd restart
修复验证

step1.在网站根目录下创建一个index.php文件

mark

step2.再次访问

mark

0x05.文件权限

在图片上传过程中,特对是针对上传图片的目录和上传的文件内容必须经过严格控制,因为可能由
于权限过高导致上传被突破后,直接放入小马,这个站点就被拿下了,所以对上传目录进行权限控
制。

漏洞测试

mark

加固方法:

step1.编辑http.conf文件

1
[root@localhost upload]# vim /etc/httpd/conf/httpd.conf

step2.限定目录没有执行的PHP脚本执行的权限

mark

step3.编辑重启服务

1
[root@localhost upload]# service httpd restart

step4.再次测试漏洞是否存在

mark

可以看到/upload/目录下的php小马已经不能用了