在 Web 应用中,由于安全配置错误导致的安全问题屡见不鲜 ,常见的安全配置 为 Apache 配置安全问题、Nginx 配置安全问题以及 Tomcat 配置安全问题 。在这里我们对这三个服务器软件的配置问题做一下简单描述。
1、Apache安全配置问题
Apache 的配置文件名为 httpd.conf,我们在启动自己的 Web 应用前,首先就需要对它进行配置的修改。
如果我们希望,Apache 在遇到扩展名为 PHP 的页面文件时,将它用 x-httpd-php 来解析,那么我们就可以在配置文件中添加代码 AddHandler application/x-httpd-php .php
在深入分析前,我们需要了解一个Apache的基本特性,那就是apache允许文件拥有多个后缀,并支持为不同后缀执行不同的解析程序。当我们配置了上述的这个选项后,如果说我们的文件后缀名里边包含l.php的后缀,那么apache就会调用PHP解析程序来解析该文件。
这里我们利用靶场来做一个示例:
首先上传test. test.php.xyz.jpg ,该文件的内容为:<?php phpinfo();?>
按照正常逻辑,应该展示我们一个图片格式的结果。
但是此时我们修改apache配置文件内容,添加: AddHandler application/x-httpd-php .php。然后重启 Apache2 服务。
再访问我们上传的文件, 获得到的响应内容就变为如下 :
这里可以看到,我们上传的恶意 PHP 代码已经被执行。此时这个 Web 应用就不再安全。
可见,如果说我们的web应用管理者如果配置了这个选项,那么我们的攻击者就可以利用这个配置来绕过上传限制,从而getshell。
2、Nginx安全配置问题
Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器,我们可以在 Unix 以及 Linux 中运行它。它的应用非常广泛,是仅次于apache的web服务器软件,并且使用率在逐年攀升,大有赶超apache的趋势。
当我们的nginx配置不当的时候,同样的也会产生安全问题。
下面代码是一个 Nginx 的一个虚拟主机的配置文件 :
server {
listen 8080;
root /usr/share/nginx/html;
index index.html;
server_name _;
location / {
return 302 https://$host$uri;
}
}
在这个 Nginx 配置文件中,存在问题的配置在最后一行,我们只需要关注这一部分即可 :
return 302 https://$host$uri;
$host,可以简单理解为原始请求中的 host 信息,而 $uri 则是安全问题产生的关键,它代表着请求中解码后的请求路径。如果攻击者将请求的 URL 信息设置为如下:
http://ip:port/%0a%0dSet-Cookie:%20a=test
这个 URL 中,%0a 经过解码之后就是 CR,%0d 经过解码之后则为 LF,%20 解码之后对应为空格。所以 Nginx 在对 $uri 进行解码时,会将 %0a%0d 解码为 CRLF,这会使得 HTTP 报文换行,然后发起 Set-Cookie 的请求,这就是 CRLF 注入的效果 。
我们来进行一下测试, 对 127.0.0.1:8080/%0a%0dSet-Cookie:%20a=test 进行访问 ,发现跳转到了https,但是响应中发现了我们的Set-cookie的内容,说明我们的CRLF注入已经成功。
3、Tomcat安全配置问题
Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用。实际上,Tomcat 是 Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行 Tomcat 时,它实际上是作为一个与 Apache 独立的进程单独运行。
Tomcat 中存在一个知名的安全配置问题,它就是 CVE-2017-12615。具体的问题体现为,当 Tomcat 运行在 Windows 主机上,并且在 conf/web.xml 的配置文件中将 DefaultServlet readonly 设置为 false,那么如果它启用了 HTTP PUT 请求方法,就会导致任意写文件的安全问题发生。 这有点类似于IIS的PUT上传漏洞。
这里我们来实际测试一下,打开我们的靶机,显示是Tomcat 8.5.19:
然后我们使用漏洞扫描工具来进行一下漏洞扫描:
扫描结果可见,我们的靶机存在多个安全漏洞,并且也扫描到了我们的Tomcat PUT漏洞,然后我们使用Tomcat PUT 漏洞利用工具来进行漏洞利用:
可见利用成功,并且获得了管理员权限。
4、安全配置原则
为了避免安全配置错误的发生,我们在配置 Web 应用时需要遵守几个原则:
我们需要将 Web 应用不需要的服务进行关闭或限制,防止攻击者通过这些服务发起恶意行为
将 Web 应用的报错信息设置得通用化,使得报错信息中不包含错误发生的细节信息,防止因此导致的敏感信息泄露
将 Web 应用默认的账户信息进行修改,尽量让账户密码变得复杂,否则攻击者很容易就会猜出账户信息,登陆进 Web 应用的管理后台
|