文件上传漏洞之.htaccess

0x00 前言

.htaccess文件(“分布式配置文件”)提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令将受到限制。管理员可以通过Apache的AllowOverride指令来设置。

概述来说,htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。


0x01 重写解析规则绕过黑名单

原理:上传覆盖.htaccess文件,重写解析规则,将上传的图片马以脚本方式解析
具体实现:

1、上传.htaccess文件至服务器上传目录,此时apache在解析该目录下的php时将按照文件要求。只要文件名匹配到所定义的字符串,就会将该文件当作php解析。

<FilesMatch "shana">
SetHandler application/x-httpd-php
</FilesMatch>

2、上传.htaccess文件设置的关键字的文件名,即上传一个黑名单没有过滤的随意后缀名文件,但文件名中一定要包含shana,如"shana.jpg",内容为一句话木马。此时"shana.jpg"会被Apache当作php解析。


0x02 .htaccess文件常用场景:

htaccess文件应该被用在内容提供者需要针对特定目录改变服务器的配置而又没有root权限的情况下。

如果服务器管理员不愿意频繁修改配置,则可以允许用户通过.htaccess文件自己修改配置,尤其是ISP在同一个机器上运行了多个用户站点,而又希望用户可以自己改变配置的情况下。

虽然如此,但一般情况下都应该尽可能地避免使用.htaccess文件。任何希望放在.htaccess文件中的配置,都可以放在主配置文件的段中,而且更高效。

在/w1/w2/www目录下的.htaccess文件中放置指令,与在主配置文件httpd.conf中<Directory /w1/w2/www>段中放置相同指令,是完全等效的。

/w1/w2/www目录下的.htaccess文件的内容:

AddType text/example .exm

等效于httpd.conf文件中:

<Directory /w1/w2/www>
AddType text/example .exm
</Directory>

但将配置放在主配置文件中更加高效,因为只需要在Apache启动时读取一次,而不是在每次文件被请求时都读取。

在配置文件中将AllowOverride设置为none,可以完全禁止使用.htaccess文件:AllowOverride None

0x03 避免使用.htaccess文件有两个主要原因:

1、性能

如果AllowOverride启用了.htaccess文件,则Apache需要在每个目录中查找.htaccess文件。因此,无论是否真正用到,启用.htaccess都会导致性能的下降。且对于每一个请求,都需要读取一次.htaccess文件。

Apache必须在所有上级的目录中查找.htaccess文件,以使所有有效的指令都起作用,所以,如果请求/w1/w2/www中的页面,Apache必须查找以下文件:
/.htaccess、/w1/.htaccess、/w1/w2/.htaccess、/w1/w2/www/.htaccess
共要访问4个额外的文件,即使这些文件都不存在。而这可能仅仅由于允许根目录"/"使用.htaccess ,虽然这种情况并不多。

2、安全

允许用户自己修改服务器的配置,这可能会导致某些意想不到的修改,且如果给予用户较少的特权而不能满足其需要,则会带来额外的技术支持请求。所以,必须明确地告诉用户已经给予他们的权限,说明AllowOverride设置的值,并引导他们参阅相应的说明,以免日后生出许多麻烦。

相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页