[GXYCTF2019]BabyUpload

这是一道文件上传题,我们如果上传一个真正的图片就能成功上传,但是一旦上传的是一个包含一句话木马的文件都会返回"这是一个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 进行拦截:这是攻击能够发起的直接原因,即黑名单不完整或白名单未包含对配置文件的检查
相关推荐
http阿拉丁神猫5 小时前
Go语言入门笔记:从基础到开发环境搭建(二)
开发语言·笔记·golang
HRBorderInsight8 小时前
马来西亚人均收入一个月多少钱,个人薪资和家庭收入要分开看
经验分享·笔记
又見山10 小时前
本地 Markdown 与数据主权:你的笔记到底属于谁
笔记·obsidian
撩得Android一次心动11 小时前
Jetpack Compose 知识点整理2【个人用】
android·笔记·学习·kotlin·compose
cao233311 小时前
关于 x1 y1 等变量名冲突的指正(校对版)
笔记
Demons_kirit12 小时前
CTFHub 信息泄露通关笔记:Git泄露 Log - 教程
笔记·git·网络安全
xhyu6113 小时前
【学习笔记】图像质量评估方法 (5.生成图像是否符合用户要求)
笔记·学习·计算机视觉
2601_9611462014 小时前
实验室用等离子表面处理设备处理新能源汽车塑料件的一点记录
笔记·汽车·设备
知产xiao_xin14 小时前
专利主体及权利归属
经验分享·笔记·知识产权