文件上传白名单绕过的方式有哪些?
1 个回答
明知不可为而为之就是我最大的诚意加刑天文件上传白名单绕过的方式主要是针对服务端只允许某些文件类型(如 `.jpg`、`.png`、`.gif`、`.pdf`)时,利用规则缺陷或解析特性上传可执行脚本。常见方式包括: ### 1. **扩展名绕过** * **双扩展名** 例如:`shell.php.jpg`、`shell.asp;.jpg`,部分服务器只校验第一个或最后一个扩展名。 * **大小写混淆** 例如:`shell.PHp`、`shell.PHP%20`,某些校验对大小写或空格处理不严格。 * **特殊符号截断** 利用 `%00`(空字节截断)、`;`、`%20` 等在不同服务端语言或解析器中的截断特性。 ### 2. **MIME 类型绕过** * 客户端可修改 HTTP 请求头 `Content-Type` 为合法类型(如 `image/jpeg`),绕过前端或后端校验。 * 一些服务端只信任前端提交的 MIME,而不二次检测文件真实类型。 ### 3. **文件内容伪造** * 在文件头添加合法文件的魔数(如 JPEG 的 `FFD8FF`),但尾部仍包含恶意代码。 * 结合解析漏洞,如 PHP 在特定环境下只要文件中有 `<?php ... ?>` 仍可能被执行。 ### 4. **解析漏洞利用** * **IIS 6.0**:`shell.asp;.jpg` 仍会按 `.asp` 解析执行。 * **Apache**:多后缀解析(`shell.php.abc` 可能按 `.php` 解析)。 * **Nginx**:配置错误时可能导致 `.jpg/.gif` 按 PHP 解析。 ### 5. **白名单规则缺陷** * 白名单匹配不严格(`endsWith`、`contains` 等),可能被大小写、空格、点号等绕过。 * 仅检查文件名,不检查文件内容和真实扩展名(`Content-Type` 与后缀不一致时未拦截)。 ### 6. **结合文件包含漏洞** * 上传后文件不能直接访问,但若存在 **文件包含漏洞**(LFI/RFI),可通过 `include()`、`require()` 等方式执行上传文件的代码。发布于 2025-08-08 15:31 •IP属地 青海举报评论收藏
公众号进入网站体验更佳

