CTF文件上传漏洞实战|常见绕过方式+踩坑全记录
前言
文件上传漏洞是CTF Web题型中最高频、最易得分的考点,几乎每场CTF比赛都会出现。该漏洞的核心成因是服务器未严格校验上传文件的后缀、MIME类型、文件内容,导致恶意脚本文件可被上传并执行。
本人在刷题过程中,踩过大量上传绕过的坑,本文结合实战场景,整理新手必备的上传绕过方法,同时记录报错排查思路,全程干货,适合零基础CTF选手学习收藏。
一、漏洞原理
正常网站会限制用户仅上传图片、文档等合规文件,若后端代码校验逻辑不严谨,攻击者可通过修改文件后缀、伪装文件类型、绕过黑名单等方式,上传PHP、Python等恶意脚本文件,进而获取服务器权限、执行任意代码。
二、新手必学4种基础绕过方式
1. 后缀大小写绕过(最简绕过)
很多低端黑名单校验仅过滤小写后缀(php、jsp),未区分大小写。
• 原理:Windows服务器系统文件名不区分大小写
• 实操:将 shell.php 修改为 shell.PHP / shell.PhP
• 适用场景:简单黑名单校验、无二次渲染的上传靶场
2. 后缀特殊拼接绕过
针对严格过滤常规后缀的场景,利用服务器解析特性绕过。
• 常用格式:shell.php.(末尾加点)、shell.php空格
• 原理:Windows系统会自动忽略文件名末尾的点和空格
• 优势:成功率极高,新手优先尝试
3. MIME类型绕过
部分后端仅校验文件的Content-Type(文件类型),不校验后缀。
1. 正常上传一句话图片,用Burp抓包
2. 将请求头中的 Content-Type: image/jpeg 保留
3. 将文件后缀改为 .php,上传恶意脚本
4. 放行数据包,即可成功绕过类型校验
4. 双后缀绕过
针对只过滤单次后缀的代码逻辑
• 格式:shell.php.jpg
• 原理:后端过滤.php后,剩余.jpg,绕过校验;服务器解析时优先识别php脚本执行
三、实战高频踩坑&报错排查
坑点1:上传成功但无法执行脚本
问题现象:文件上传提示成功,但访问链接无回显、无法执行代码
原因:
1. 靶场配置禁止脚本文件运行
2. 文件被二次渲染,恶意代码被清除
3. 上传路径错误,访问地址不正确
解决方案:核对靶场文档的上传存储路径,优先使用大小写、后缀拼接绕过,避开二次渲染机制。
坑点2:所有后缀直接拦截,无上传权限
问题现象:只要是非图片后缀,直接拦截上传
解决方案:放弃前端修改,必须抓包改包绕过。前端校验均为前端JS限制,可通过Burp拦截数据包,直接修改后端接收的文件参数,绕过前端所有限制。
坑点3:蚁剑连接上传shell失败
问题现象:文件上传成功,蚁剑连接超时、连接失败
原因:脚本代码失效、靶场环境限制、网络端口不通
解决方案:替换通用一句话木马,检查靶场是否开启外网访问,确认文件路径无误。
四、进阶学习方向
基础上传绕过掌握后,可进阶学习高频考点:
1. 图片马绕过(文件包含+上传组合漏洞)
2. .htaccess配置绕过
3. 绕过二次渲染、文件内容校验
4. 批量上传漏洞自动化测试脚本
五、总结
文件上传漏洞属于低门槛、高性价比的CTF考点,新手无需掌握复杂原理,熟记4种基础绕过方式,可应对80%的基础上传题型。
学习核心不在于死记方法,而在于根据报错判断校验方式:被拦截→抓包改包、后缀拦截→大小写/拼接绕过、类型拦截→MIME修改。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)