文件上传漏洞实验报告
作者:百科 来源:热点 浏览: 【大 中 小】 发布时间:2026-10-17 06:40:27 评论数:
我把一个带文件上传功能的文件测试站点当靶场,花了三个小时,上传实验用一句话木马成功拿到了服务器权限。漏洞整个过程比想象中简单,报告也比想象中可怕。文件
漏洞出在头像上传功能。上传实验表单允许jpg、漏洞png,报告后端用白名单校验扩展名,文件但校验逻辑写在JS里。上传实验我用Burp拦截请求,漏洞把文件名改成“shell.php.jpg”,报告Content-Type改成image/jpeg,文件后端居然只检查了Content-Type,上传实验没检查文件头。漏洞服务器是Apache,遇到.php.jpg会当成php执行——这是老配置漏洞,但依然有效。
上传成功后,我访问那个文件的URL,返回200。用蚁剑连接,密码是“cmd”,直接拿到www用户权限。没绕什么复杂机制,纯粹是校验逻辑偷懒。这个站点还是个政府单位的外包项目,你说吓不吓人。
后来我试了另一个思路,更直接。有些站点把文件存在OSS或云存储,上传接口只做类型判断,不校验内容。我传了个带php代码的图片,用包含漏洞去触发。那个站点的图片预览功能用了file_get_contents,参数没过滤。拼接路径,包含我上传的图片,代码就执行了。这种组合拳比单纯绕扩展名更隐蔽,日志里看着就是正常图片请求。
防御方也不是没设防。有的站点把上传目录设成不可执行,加了随机文件名,还校验了文件头。但道高一尺魔高一丈,我试过用.phar文件绕过,把恶意代码打包进phar,配合反序列化漏洞触发。那次花了更久,但最终还是进去了。原因很简单,他们防了上传,没防解析链。
做实验时我注意到一个细节:多数开发者的安全意识停留在“黑名单扩展名”层面。他们知道禁止php,却忘了.htaccess、.user.ini这些配置文件也能上传。我传了个.htaccess,内容是把.jpg解析成php,然后上传正常图片格式的木马,直接绕过所有文件类型检查。这个技巧用了不到五分钟,比前面所有方法都快。
整个实验给我最大的触动是,漏洞根子不在技术,在流程。上传功能涉及前端校验、后端处理、存储策略、解析规则四个环节,每个环节由不同人负责,沟通一断,漏洞就出来了。那个政府项目就是前端工程师写了JS校验,后端工程师只信Content-Type,运维配置Apache时没关多后缀解析,三方各干各的,最后合成一个完美漏洞。
修复方案其实不难。后端强制校验文件头、扩展名白名单、随机重命名、上传目录禁脚本执行、单独域名存储,做到五条里三条,我那天就进不去。但现实是很多项目连第一条都做不到。我写这份报告不是秀技术,是想说,安全这事,认真做和糊弄做,差距就是一次getshell的距离。
