文件上传绕过是指攻击者通过技术手段突破服务器对上传文件的限制,实现恶意文件(如WebShell、木马等)的上传。其核心在于利用前端验证缺失、后端过滤不严、服务器解析漏洞等缺陷,常见手法包括修改文件扩展名、伪造MIME类型、利用%00截断、黑名单绕过等。以下是具体实现方式:
-
前端绕过:删除浏览器JavaScript验证或使用抓包工具(如Burp Suite)拦截请求,直接修改文件后缀名。例如,将
evil.php
伪装为evil.jpg
上传,再通过抓包还原为.php
。 -
MIME类型伪造:服务器通过
Content-Type
字段校验文件类型时,可将恶意文件的MIME类型改为image/jpeg
或image/png
以绕过检测。 -
黑名单绕过:
- 特殊后缀:利用服务器解析漏洞,上传
.php5
、.phtml
等非标准后缀,某些配置下仍会被执行。 - 大小写混合:如
File.PhP
,绕过未统一大小写的过滤规则。 - 双写后缀:上传
shell.phphpp
,若服务器仅替换一次php
,剩余部分仍可解析。
- 特殊后缀:利用服务器解析漏洞,上传
-
系统特性利用:
- 空格/点绕过:在Windows系统中,
shell.php.
或shell.php(空格)
上传后,系统会自动去除末尾字符,保留可执行后缀。 -
::$DATA
流:Windows文件流特性下,shell.php::$DATA
会被解析为shell.php
。
- 空格/点绕过:在Windows系统中,
-
文件内容伪装:
- 图片马:将恶意代码嵌入图片头部(如添加
GIF89a
),上传后修改后缀为.php
。 - 二次渲染绕过:针对图片处理逻辑,通过脚本保留恶意代码不被渲染破坏。
- 图片马:将恶意代码嵌入图片头部(如添加
-
竞争条件攻击:利用服务器“先保存后检测”的时间差,快速访问上传的临时文件并触发恶意代码。
防御建议:开发者应使用白名单校验、随机重命名文件、隔离上传目录,并定期审计服务器配置。普通用户需警惕非可信来源的文件上传功能,避免成为攻击跳板。