文件上传漏洞: .htaccess文件
1. 什么是 .htaccess 文件?
.htaccess(Hypertext Access,超文本访问)是 Apache Web 服务器使用的分布式配置文件。
核心特性包括:
分布式:可以放置在网站目录树的任何目录中
继承性:配置指令会影响所在目录及其所有子目录
即时生效:修改后无需重启 Apache 服务器即可立即应用
2.htaccess 文件上传漏洞
.htaccess 文件上传漏洞是指攻击者能够将恶意的 .htaccess
文件上传到 Web 服务器可访问目录的安全漏洞。
漏洞成因主要条件:
存在文件上传功能 - 网站允许用户上传文件
过滤不严格 - 未正确验证上传文件的类型和内容
目录权限配置不当 - 上传目录允许
.htaccess
文件生效
3.攻击方式
攻击方式一:任意文件解析
恶意 .htaccess 内容:所有以 .jpg
、.png
、.txt
结尾的文件,都应该被当作PHP脚本来解析和执行,而不是作为图片或文本文件来处理。
# 方法1:使用 AddType
AddType application/x-httpd-php .jpg .png .txt
# 方法2:使用 SetHandler(更强大)
<FilesMatch "\.(jpg|png|gif|txt)$">SetHandler application/x-httpd-php
</FilesMatch>
攻击流程:
(1)上传恶意
.htaccess
文件(2)上传包含 PHP 后门的图片文件
shell.jpg
(3)访问
http://target.com/uploads/shell.jpg
即可执行 PHP 代码
攻击方式二:源码泄露攻击
方式一:
RemoveHandler .php
RemoveType .php
含义解析:
RemoveHandler:移除指定文件扩展名的处理器关联
RemoveType:移除指定文件扩展名的 MIME 类型关联
.php:目标文件扩展名
当访问 某个
php文件
时,Apache 不再将其交给PHP解释器执行,而是作为普通的文本文件直接输出到浏览器,导致 PHP 源代码泄露。
方式二:
<Files *.php>SetHandler text/plain
</Files>
含义解析:
<Files *.php>:匹配所有
.php
文件的条件块SetHandler text/plain:强制设置处理器为文本类型
PHP 文件不会被解释执行,而是以纯文本形式显示源代码。
攻击方式三:授权绕过攻击
# 移除对admin目录的认证要求
Satisfy Any
Order allow,deny
Allow from all
正常情况:
/admin
这样的敏感目录通常会有一个认证配置,要求用户输入用户名和密码。这个配置.htaccess
文件中,使用AuthType Basic
、Require valid-user
等指令。攻击原理:
Satisfy Any
:这是一个关键指令。它告诉服务器,满足Allow
条件或成功通过身份认证,任一条件即可访问资源。
Order allow,deny
和Allow from all
:这两条指令组合在一起,表示允许来自任何IP地址的请求。最终效果:由于设置了
Satisfy Any
,服务器检查发现请求来自“所有”IP(满足了Allow
条件),于是它直接跳过了密码认证步骤,允许任何人无密码访问/admin
目录。
攻击方式四:重定向攻击
RewriteEngine On
RewriteRule ^login.php$ http://恶意网站/login.php [R=302,L]
攻击目标:网站的登录页面(如
login.php
)。攻击原理:
(1)RewriteRule ^login.php$ ...
:这是一个重写规则。^login.php$
是一个正则表达式,精确匹配对login.php
页面的请求
(2)http://恶意网站/login.php
:这是规则的目标,即用户将被重定向到的地址。L
表示这是最后一条规则,如果匹配,就不再处理后续规则。
(3)R=302
表示这是一个临时重定向,浏览器会跳转到新地址;L
表示这是最后一条规则,如果匹配,就不再处理后续规则。最终效果:当用户尝试访问正常网站
/login.php
时,会被无缝重定向到一个看起来一模一样的钓鱼网站。用户在此输入用户名和密码,这些凭证就会被攻击者窃取。
#无限重定向循环
RewriteEngine On
RewriteRule ^(.*)$ /$1 [R=301,L]
攻击原理:
(1)RewriteRule ^(.*)$ /$1
:这个规则匹配任何请求(.*)
,并将其重定向到/$1
。$1
是前面括号捕获的内容,所以它本质上是重定向到它自己。(2)
[R=301,L]
:301
是永久重定向。最终效果:
(1)对用户:浏览器会快速连续地收到重定向指令,最终显示“重定向过多”的错误,无法访问网站。
(2)对服务器:每一个请求都会触发这个规则,CPU 需要不断处理重定向逻辑。如果有大量并发请求,服务器资源(CPU、内存)会被迅速耗尽,导致整个网站瘫痪,形成拒绝服务攻击。