[TOC]

快速入门

描述:Apache起初由伊利诺伊大学香槟分校的国家超级电脑应用中心(NCSA)开发,此后Apache Httpd被开放源代码团体的成员不断的发展和加强,从上个世纪90年代开始它的市场占有率就超过了50%。

如今虽然它的使用率有些下降但是仍是世界使用排名第一的 Web 服务器软件,它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的 Web服务器端软件之一。

安全加固

Apache自身的安全性是很高的,但是人为的错误设置会导致Apache产生安全问题 。

1.服务器运行权限(注意操作系统环境)
描述:Linux中默认给予Apache的是一个www-data账户,执行命令:lsof -i:80 或者:ps aux|grep apache|grep -v grep

1
2


  • 第一行是Apache主进程以root权限运行的,因为Apache的Web端口是80或443,而在Linux中开启小于1024的端口需要root权限,所以主进程必须以root权限运行。
  • 第二行起为Apache子进程,其执行用户为www-data,www-data是Ubuntu中运行Web服务的默认用户,权限较低。

比如当我们使用一个shell.php去执行添加文件测操作就会由于权限问题而失败。

WeiyiGeek.

WeiyiGeek.

  • Linux操作
    如果是一个高权限用户可以尝试更改为低权限用户,Apache的运行用户的配置信息可以在 /etc/apache2/apache2.conf 文件中看到,提示用户和用户组设置在 /etc/apache2/envvars文件中

    1
    2
    User ${APACHE_RUN_USER}
    Group ${APACHE_RUN_GROUP}

    然后在到/etc/apache2/envvars文件中设置即可

    1
    2
    export APACHE_RUN_USER=www-data
    export APACHE_RUN_GROUP=www-data
  • Windows操作
    由于windows机器默认是administrator权限所以第一步需要进行对Apache降权或者说设置一个安全的执行账户

    1
    2
    net user apache /add
    net localgroup guests apache /add #将Apache的用户组改为Guests,注意要将Apache目录下的日志的可写权限赋给Guests账户。

    打开·Apache服务属性中的登录选项卡,点选此账户,写入刚才添加的用户名和密码,最后重启服务

    WeiyiGeek.

    WeiyiGeek.

注意事项:

  • Windows中Apache安装完成后默认是administrator权限,如果使用此权限运行Web服务一旦攻击者拿下webshell就很容易控制整个服务器


2.目录及文件权限
描述:Linux在默认情况下如果当前目录不存在默认文件(比如index.html),Apache会列出当前目录。

其权限设置位置在Apache配置文件httpd.conf中

1
2
3
4
5
6
7
8
9
$vim /etc/httpd/conf/httpd.conf
<Directory /var/www/>
Options Indexs FollowSymLinks
AllowOverride None
Rquire all granted
<Directory>

#Indexes:可以在该目录中使用符号连接,从漏洞角度上讲也就是目录遍历漏洞,操作这个参数即可进行权限控制。
#FollowSymLinks:允许目录浏览,当客户仅指定要访问的目录,但没有指定要访问目录下的哪个文件,而且目录下不存在默认文档时,Apache以超文本形式返回目录中的文件和子目录列表(虚拟目录不会出现在目录列表中)。

加固后的再次进行访问时,另外也Linux中可以通过Linux自带的chmod命令进行权限控制
1
2
3
4
5
6
$vim /etc/httpd/conf/httpd.conf
<Directory /var/www/>
Options ollowSymLinks
AllowOverride None
Rquire all granted
<Directory>

WeiyiGeek.

WeiyiGeek.

补充:对于Windows防止目录列出的与上面差不多,主要说明windows自带的权限控制,还是以访问flag.txt文件为例,默认情况下
想要设置单个文件对其的访问:右键==>属性==>安全(前面已经将Apache添加Guests用户组)

WeiyiGeek.

WeiyiGeek.


3.错误重定向
描述:错误重定向是指通过在Web程序出错令其跳转到指定的显示界面,首先可以通过设置.htaccess文件达到目的,但是windows中正常情况下无法直接创建.xxx的文件,所以要是使用DOS命令echo 1 > .htaccess,然后在用其他编辑器编辑.htaccess文件即可,

比如设置404错误重定向,在.htaccess文件中添加:ErrorDocument 404 /404.html

1
2
3
4
5
$vim .htaccess
ErrorDocument 404 /404.html

#然后在同目录下创建404.html文件
<html><h1>Page Not Found</h1></html>

然后随机访问一个不存在的文件,则会自动跳转到404.html
WeiyiGeek.

WeiyiGeek.

或者采用精准匹配,通过配置httpd.conf文件也可以达到跳转的目的,还是在刚才添加设置目录权限的地方

1
2
3
4
5
6
7
8
9
10
DocumentRoot "/var/www/html"
<Directory "/var/www">
Options +Indexs +FollowSymLinks +ExecCGI
RewriteEngine On
RewriteRule "tttt\.html$" "404.html"
Order allow,deny
AllowOverride All
Allow from all
Require all granted
</Directory>

比如对于本条正则当访问tttt.html时会跳转到404.html界面。

  • RewriteEngine On:开启跳转
  • RewriteRule “tttt.html$” “404.html”
    第一个参数是一个正则
    第二个参数使要跳转到的相对地址;也就是说当符合正则时进行跳转。
    WeiyiGeek.

    WeiyiGeek.


4.安全日志
Apache日志常规路径是,注意采用源码安装或者系统安装软件安装以及不同的Linux版本可能位置不一样;
采用的变量${APACHE_LOG_DIR},且日志记录是有等级

  • ubuntu:/var/log/apache2/
  • Centos:/etc/httpd/logs/

日志级别的详细分类:

WeiyiGeek.

WeiyiGeek.

其中的压缩文件为Apache自动压缩以节省空间:

  • other_vhosts_access.log 虚拟主机日志
  • access.log 成功访问记录文件
  • error.log 失败访问以及启动报错记录文件,一般格式为”[日期和时间] [错误等级] 错误消息”

httpd.conf定义的日志文件格式在:

1
192.168.228.1 - - [22/Sep/2017:05:26:41 -0700] "GET /flag.txt HTTP/1.1" 403 515 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0"

参数解释:

  • 远端主机:192.168.228.1
  • 远端登录名:-
  • 远程用户名:-
  • 访问时间:[22/Sep/2017:05:26:41 -0700]
  • HTTP请求:GET /flag.txt HTTP/1.1
  • HTTP状态码:403
  • 发送的字节数:515
  • Referer:-
  • User-Agent:”Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0”