源URL:http://foreversong.cn/archives/789

偶然下载了今年ISC大会360应急响应中心的一个ppt,在最后有个攻防领域专家注册考试目录,其中有很大一块就是中间件的安全,包括Apache、IIS、Tomcat、Weblogic等等,后面我会针对这些中间件,并且借着上面的考试要求进行一个安全配置的讲解。(自己之前也很少接触这块,因此只能算一个学习记录了。。)

Apache方面的考核内容:

1.Apache服务器权限配置

2.Apache服务器文件解析漏洞

3.Apache服务器日志文件审计方法

4.Apache服务器WEB目录权限的配置

下面我将针对上面几个要求,进行一个实例讲演!

问题1:Apache服务器权限配置

这里的权限配置指的就是在访问Apache服务器时限制哪些ip,允许哪些ip来访问。

配置文件在Apache\conf目录下的httpd.conf文件中

 
1
2
3
4
5
6
7
8
DocumentRoot  "C:\phpmystudy\WWW"
<Directory/>
    Options+Indexes+FollowSymLinks+ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all
    Require all granted
</Directory>

这里是初始状态,最重要的就是Order allow,deny下面的配置,可以看到我们这里的配置为Allow from all,因此允许任何人来访问我们的web服务器,但是我们修改成只允许10.10开头的ip访问,修改如下

 
1
2
Order allow,deny
Allow from10.10

我们可以看到我们访问服务器时就会出现访问禁止,实现了权限的配置。

 
1
2
    Order allow,deny
    Allow from192.168

如果想让内网实现访问,这里只允许内网网段的ip访问

但是实际上,这里没有添加127.0.0.1网段的,会导致我们的web主机登录不上web服务

下面作一个演示,我们只想让web主机登录,其他主机都登陆不上

 
1
2
3
    Order allow,deny
    Allow from127.0
    Deny from all

这里只有127.0.0.1的主机能访问,其余主机均登录不上,Apache服务器权限配置就告一段落。。

问题2:Apache服务器文件解析漏洞

这个应该很老套了,就是一个解析漏洞。

Apache对于文件名的解析是从后往前解析的,直到遇见一个它认识的文件类型为止。因此,如果web目录下存在以类似webshell.php.test这样格式命名的文件,Apache在解析时因为不认识.test这个文件类型,所以会一直往前解析,当解析到.php时,它认识了,因此会将它解析为PHP文件。

实际上我在复现的时候没有成功利用,原因很简单,目前这个解析漏洞只适用于以module方式解析php的apache,使用fastcgi方式解析php的apache不受影响。而我测试使用的phpmystudy正是使用的fastcgi方式。

防御方法:

apache配置文件,禁止.php.这样的文件执行,配置文件里面加入

<Files ~ “\.(php.|php3.)”>

Order Allow,Deny

Deny from all

</Files>

问题3:Apache服务器日志文件审计方法

这里主要有两个log文件,一个是access.log,一个是error.log,这是在windows环境下,其实一开始由于配置问题,没有开启access.log,配置同样是在Apache\conf目录下的httpd.conf文件中

 
1
2
3
##CustomLog "logs/access.log" common
...
#CustomLog "logs/access.log" combined

将前面的注释符删去即可~

然后就会生成access.log

 
1
2
::1--[07/Nov/2017:15:23:55+0800]"GET / HTTP/1.1"200369
::1--[07/Nov/2017:15:23:55+0800]"GET / HTTP/1.1"200369"-""Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0"

这里给出一张截图,是我网站服务器的Apache日志

一般情况下,我们都会写一个自定义的脚本来审计日志文件或者说下载市面上拥有成熟技术的日志审计软件。假如这是一台linux服务器,日志文件中出现了/etc/passwd的字样,就可以在一定程度上说明有人已经可以访问你的密钥文件,也就反映了你的网站可能已经被人攻破了,或者说出现了大量的sql注入语句,这些黑客行为都可以帮助你来审计一个网站的安全性。

而error.log则是记录了服务器运行时的出错情况

 
1
2
3
4
5
[Tue Nov0715:23:33.5418252017][mpm_winnt:notice][pid3232:tid636]AH00455:Apache/2.4.23(Win32)OpenSSL/1.0.2jPHP/5.4.45configured--resuming normal operations
[Tue Nov0715:23:33.5428262017][mpm_winnt:notice][pid3232:tid636]AH00456:Server built:Jul  1201616:42:20
[Tue Nov0715:23:33.5428262017][core:notice][pid3232:tid636]AH00094:Command line:'D:\\Server\\phpstudy\\Apache\\bin\\httpd.exe -d D:/Server/phpstudy/Apache'
[Tue Nov0715:23:33.5488282017][mpm_winnt:notice][pid3232:tid636]AH00418:Parent:Created childprocess8984
[Tue Nov0715:23:35.4574352017][mpm_winnt:notice][pid8984:tid676]AH00354:Child:Starting150worker threads.
问题4:Apache服务器WEB目录权限的配置

在挖洞过程中,时常会出现目录泄露这样的漏洞,其实此类漏洞就是因为中间件的配置问题而造成的。

能够进行目录的遍历,这的确会造成很多的安全问题,那么如何进行web目录权限的配置呢?

其实这里跟第一个问题是类似的,第一个问题是对服务器的权限配置,这里是对某个目录配置访问限制,同样是在Apache\conf目录下的httpd.comf文件中添加对目录的权限配置

 
1
2
3
4
<Directory"C:\phpmystudy\WWW\test">
    Order allow,deny
    deny from all
</Directory>

这里test目录设置成任何人都不允许访问

这样也就避免了目录的泄露问题。

灵光一闪

最后突然想到一个问题,如何禁止某个目录运行php脚本文件,这种情形现在来说应该仍然十分受用,假如存在文件上传漏洞,那么通过这种方法禁止了脚本文件的运行,从而达到保护服务器的作用。

方法非常多,例如禁止当前目录访问,这里给出一种直接的方法,那就是禁止php脚本的执行

这里模拟了下文件上传,然后我们通过文件任意上传漏洞上传了我们的php脚本,发现是可以执行的,然后挂菜刀,传大马继续。。

这里的防御方法是给Apache\conf目录下的vhosts.conf添加如下信息

 
1
2
3
<Directory"C:\phpmystudy\WWW\upload">
php_flag engine off
</Directory>

这里即表示当前目录下关闭php脚本执行功能

再来访问已经变成空白了!

上述如有不当之处,敬请指出~

偶然下载了今年ISC大会360应急响应中心的一个ppt,在最后有个攻防领域专家注册考试目录,其中有很大一块就是中间件的安全,包括Apache、IIS、Tomcat、Weblogic等等,后面我会针对这些中间件,并且借着上面的考试要求进行一个安全配置的讲解。(自己之前也很少接触这块,因此只能算一个学习记录了。。)

Apache方面的考核内容:

1.Apache服务器权限配置

2.Apache服务器文件解析漏洞

3.Apache服务器日志文件审计方法

4.Apache服务器WEB目录权限的配置

下面我将针对上面几个要求,进行一个实例讲演!

问题1:Apache服务器权限配置

这里的权限配置指的就是在访问Apache服务器时限制哪些ip,允许哪些ip来访问。

配置文件在Apache\conf目录下的httpd.conf文件中

 
1
2
3
4
5
6
7
8
DocumentRoot  "C:\phpmystudy\WWW"
<Directory/>
    Options+Indexes+FollowSymLinks+ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all
    Require all granted
</Directory>

这里是初始状态,最重要的就是Order allow,deny下面的配置,可以看到我们这里的配置为Allow from all,因此允许任何人来访问我们的web服务器,但是我们修改成只允许10.10开头的ip访问,修改如下

 
1
2
Order allow,deny
Allow from10.10

我们可以看到我们访问服务器时就会出现访问禁止,实现了权限的配置。

 
1
2
    Order allow,deny
    Allow from192.168

如果想让内网实现访问,这里只允许内网网段的ip访问

但是实际上,这里没有添加127.0.0.1网段的,会导致我们的web主机登录不上web服务

下面作一个演示,我们只想让web主机登录,其他主机都登陆不上

 
1
2
3
    Order allow,deny
    Allow from127.0
    Deny from all

这里只有127.0.0.1的主机能访问,其余主机均登录不上,Apache服务器权限配置就告一段落。。

问题2:Apache服务器文件解析漏洞

这个应该很老套了,就是一个解析漏洞。

Apache对于文件名的解析是从后往前解析的,直到遇见一个它认识的文件类型为止。因此,如果web目录下存在以类似webshell.php.test这样格式命名的文件,Apache在解析时因为不认识.test这个文件类型,所以会一直往前解析,当解析到.php时,它认识了,因此会将它解析为PHP文件。

实际上我在复现的时候没有成功利用,原因很简单,目前这个解析漏洞只适用于以module方式解析php的apache,使用fastcgi方式解析php的apache不受影响。而我测试使用的phpmystudy正是使用的fastcgi方式。

防御方法:

apache配置文件,禁止.php.这样的文件执行,配置文件里面加入

<Files ~ “\.(php.|php3.)”>

Order Allow,Deny

Deny from all

</Files>

问题3:Apache服务器日志文件审计方法

这里主要有两个log文件,一个是access.log,一个是error.log,这是在windows环境下,其实一开始由于配置问题,没有开启access.log,配置同样是在Apache\conf目录下的httpd.conf文件中

 
1
2
3
##CustomLog "logs/access.log" common
...
#CustomLog "logs/access.log" combined

将前面的注释符删去即可~

然后就会生成access.log

 
1
2
::1--[07/Nov/2017:15:23:55+0800]"GET / HTTP/1.1"200369
::1--[07/Nov/2017:15:23:55+0800]"GET / HTTP/1.1"200369"-""Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0"

这里给出一张截图,是我网站服务器的Apache日志

一般情况下,我们都会写一个自定义的脚本来审计日志文件或者说下载市面上拥有成熟技术的日志审计软件。假如这是一台linux服务器,日志文件中出现了/etc/passwd的字样,就可以在一定程度上说明有人已经可以访问你的密钥文件,也就反映了你的网站可能已经被人攻破了,或者说出现了大量的sql注入语句,这些黑客行为都可以帮助你来审计一个网站的安全性。

而error.log则是记录了服务器运行时的出错情况

 
1
2
3
4
5
[Tue Nov0715:23:33.5418252017][mpm_winnt:notice][pid3232:tid636]AH00455:Apache/2.4.23(Win32)OpenSSL/1.0.2jPHP/5.4.45configured--resuming normal operations
[Tue Nov0715:23:33.5428262017][mpm_winnt:notice][pid3232:tid636]AH00456:Server built:Jul  1201616:42:20
[Tue Nov0715:23:33.5428262017][core:notice][pid3232:tid636]AH00094:Command line:'D:\\Server\\phpstudy\\Apache\\bin\\httpd.exe -d D:/Server/phpstudy/Apache'
[Tue Nov0715:23:33.5488282017][mpm_winnt:notice][pid3232:tid636]AH00418:Parent:Created childprocess8984
[Tue Nov0715:23:35.4574352017][mpm_winnt:notice][pid8984:tid676]AH00354:Child:Starting150worker threads.
问题4:Apache服务器WEB目录权限的配置

在挖洞过程中,时常会出现目录泄露这样的漏洞,其实此类漏洞就是因为中间件的配置问题而造成的。

能够进行目录的遍历,这的确会造成很多的安全问题,那么如何进行web目录权限的配置呢?

其实这里跟第一个问题是类似的,第一个问题是对服务器的权限配置,这里是对某个目录配置访问限制,同样是在Apache\conf目录下的httpd.comf文件中添加对目录的权限配置

 
1
2
3
4
<Directory"C:\phpmystudy\WWW\test">
    Order allow,deny
    deny from all
</Directory>

这里test目录设置成任何人都不允许访问

这样也就避免了目录的泄露问题。

灵光一闪

最后突然想到一个问题,如何禁止某个目录运行php脚本文件,这种情形现在来说应该仍然十分受用,假如存在文件上传漏洞,那么通过这种方法禁止了脚本文件的运行,从而达到保护服务器的作用。

方法非常多,例如禁止当前目录访问,这里给出一种直接的方法,那就是禁止php脚本的执行

这里模拟了下文件上传,然后我们通过文件任意上传漏洞上传了我们的php脚本,发现是可以执行的,然后挂菜刀,传大马继续。。

这里的防御方法是给Apache\conf目录下的vhosts.conf添加如下信息

 
1
2
3
<Directory"C:\phpmystudy\WWW\upload">
php_flag engine off
</Directory>

这里即表示当前目录下关闭php脚本执行功能

再来访问已经变成空白了!

上述如有不当之处,敬请指出~

【转】Apache服务器安全配置的更多相关文章

  1. 分享:linux下apache服务器的配置和管理

    linux下apache服务器的配置和管理. 一.两个重要目录: Apache有两个重要的目录:1.配置目录/etc/httpd/conf:2.文档目录/var/www: 二.两种配置模式: Apac ...

  2. Windows操作系统Apache服务器下配置PHP

    在Apache web服务器上发布PHP项目之前,需要进行相应的配置,服务器才能解析php文本,正常显示php动态页面内容.在进行php配置之前默认已经在Windows系统下安装好了Apache服务器 ...

  3. iOS学习系列-Apache服务器的配置

    配置Apache服务器 一.目的 能够有一个测试的服务器,不是所有的特殊网络服务都能找到免费得! 二.为什么我们要用"Apache"? Apache是目前使用最广的web服务器 M ...

  4. [iOS]超详细Apache服务器的配置(10.10系统)

    配置目的:有一个自己专属的测试服务器 我们需要做以下事情: 1.新建一个目录,存放网页 2.修改Apache配置文件httpd.conf - 修改两个路径 - 增加一个属性 - 支持PHP脚本 3.拷 ...

  5. 配置apache apache服务器如何配置多站点

    http://jingyan.baidu.com/article/5225f26b07605be6fa090890.html 让Apache在启动时能加载虚拟主机模块. 打开Apache安装目录下co ...

  6. Nginx和Apache服务器上配置反向代理

    在实际项目过程中,由于网站要用到一个在线编辑器(个性化的在线编辑软件),需要跨域进行通信!由于跨域通信较多,所以当时就想到在网站服务器上代理编辑软件的请求! 这就是“反向代理”的实际需求! 一.Ngi ...

  7. Apache服务器中配置虚拟机的方法

    新浪微博虚拟机开发配置步骤及介绍.1.由于后面虚拟机中需要用到Rewrite所以先编辑Apache的conf目录下的httpd.conf文件.(可根据实际需要操作)添加mod_rewrite.so模块 ...

  8. windows Apache服务器简单配置虚拟域名(转载)

    1.找到apache目录下的conf下的extra下的httpd-vhosts.conf虚拟主机配置文件 将下面的代码复制粘贴到最下面:   #<VirtualHost *:80>#   ...

  9. windows下配置lamp环境(1)---安装Apache服务器2.2.25

    window下lamp成为wamp; 安装wamp环境的第一步是安装Apache服务器.下面开始安装步骤图文并茂. 一.双击安装包点“next”进行下一步,然后同意协议(这张图没有截):

随机推荐

  1. Maven学习笔记一

    maven是apache下的一个开源项目,是纯java开发,并且只是用来管理java项目的. Maven好处 1.普通的传统项目,包含jar包,占用空间很大.而Maven项目不包含jar包,所以占用空 ...

  2. Beta No.7

    今天遇到的困难: 构造新适配器的时候出现了某些崩溃的问题 ListView监听器有部分的Bug 今天完成的任务: 陈甘霖:完成相机调用和图库功能,完成阿尔法项目遗留下来的位置调用问题,实现百度定位 蔡 ...

  3. 网络1711班 C语言第四次作业批改总结

    网络1711班 C语言第四次作业批改总结 助教有话说(写在前面) 近来,有同学跟老师和助教们反映:博客作业太多太麻烦,而且对编程能力提高似乎没什么帮助?在这里我要谈一谈我的感想. 博客作业的意义? 首 ...

  4. Beta冲刺第七天

    一.昨天的困难 没有困难. 二.今天进度 1.林洋洋:MD图片上传,修复权限问题,修复本地存储判空问题,修复协作申请没有过滤问题. 2.黄腾达:添加文件链接和邀请链接复制功能,协作树界面优化. 3.张 ...

  5. 201621123050 《Java程序设计》第12周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系统或购物车 使用流与文件改造你的图书馆管理系统或购物车. 2.1 简述如何 ...

  6. 如何查看与更改python的工作目录?

    在编写<机器学习实战>第二章kNN代码时遇到问题,即在自己编写好模块后,使用ipython进行import时,出现以下错误: 可知若想找到该模块,需将工作目录改变到当前文件(模块py文件) ...

  7. Python strip()方法

    描述 Python strip() 方法用于移除字符串头尾指定的字符(默认为空格). 语法 strip()方法语法: str.strip([chars]); 参数 chars -- 移除字符串头尾指定 ...

  8. 从集合的无序性看待关系型数据库中的"序"

    本文目录:1.集合的特征2.集合的无序性3.表中记录的无序性4.集合的"序"和物理存储顺序之间的关系5.查询结果(虚拟表)的无序性.随机性6.为什么总是强调"无序&quo ...

  9. Python之旅.第三章.函数3.28

    一.命名关键字参数: 什么是命名关键字参数?格式:在*后面参数都是命名关键字参数特点:1 必须被传值1 约束函数的调用者必须按照key=value的形式传值2 约束函数的调用者必须用我们指定的key名 ...

  10. es6学习笔记--Interator和Generator(以及for-of的用法)

    这几天学习了遍历器和生成器,看着资料学,有点雾里缭绕的感觉,让人忍不住放弃,还好多看了好几遍,怼着资料里的例子让自己学会了Interator和Generator.   Interator,中文简称:遍 ...