这是一道文件上传题,我们如果上传一个真正的图片就能成功上传,但是一旦上传的是一个包含一句话木马的文件都会返回"这是一个PHP文件"
我们加上图片的头(GIF89a)文件后还是如此
同时发现把文件后缀名改为PHP和phtml时会报错"后缀名不能有ph"此时我们想到先使用.htaccess文件
在文件上传漏洞的利用中,先上传一个 .htaccess 文件,可以"重写"服务器的解析规则,从而绕过上传功能对文件扩展名的严格限制(如黑名单),让一个本应被视为"无害"的文件(如 .jpg、.png)被服务器当作可执行的脚本(如 PHP)来运行
许多文件上传功能会使用黑名单来阻止危险扩展名(如 .php),但往往忽略了对 .htaccess 这类配置文件的过滤。.htaccess 是 Apache 服务器的目录级配置文件,该目录及其子目录下的所有文件都受其指令控制
攻击者正是利用这一点,上传一个精心构造的 .htaccess 文件,在不触碰系统核心配置的情况下,仅仅为当前上传目录"局部"地修改解析规则。这条新规则会覆盖服务器原有的设定,指示 Apache:"在这个目录里,请把 .jpg 文件也当作 PHP 脚本来处理
apache
<FilesMatch "MM.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
只有当访问的文件名精确匹配 MM.jpg 时,才会触发 PHP 解析
首先,将一个内容为上述指令的 .htaccess 文件上传到目标服务器的可写目录(通常是上传目录)。由于 .htaccess 这个文件名本身可能不在黑名单中,因此上传常常能够成功




此时木马已经成功上传,我们用蚁剑连接该网站就可以获取该网站的信息
最后找到flag

这种攻击并非在所有环境下都能成功,它依赖于几个特定的条件:
Web 服务器为 Apache:.htaccess 是 Apache 的特性
服务器配置允许 .htaccess 生效:Apache 主配置中的 AllowOverride 指令必须被设置为 All 或至少包含 FileInfo,否则 Apache 会忽略该文件。
上传功能未对 .htaccess 进行拦截:这是攻击能够发起的直接原因,即黑名单不完整或白名单未包含对配置文件的检查