# 文件上传漏洞检查清单(CWE-434|OWASP Top10) 适用:渗透测试、代码审计、安全验收、等保测评;分为**功能发现→前端校验→后缀校验→内容校验→路径存储→容器解析→高级绕过→权限管控→代码审计→加固项**10大模块。 ## 一、第一步:梳理全部上传入口(先找点位) - [ ] 头像、图片、附件、工单、资料导入、批量Excel/CSV导入 - [ ] 富文本编辑器图片上传、视频、压缩包、模板文件 - [ ] 远程URL上传(URL导入文件,极易触发SSRF+文件写入) - [ ] 后台批量导入、证书上传、备份文件上传 - [ ] 移动端小程序/H5上传接口(往往校验更宽松) ## 二、前端JS校验(最容易绕过,必测) - [ ] 禁用JS、抓包修改请求,直接上传脚本文件(php/jsp/asp/aspx) - [ ] 前端只校验后缀,后端无任何校验 → 高危 - [ ] 前端限制文件大小,后端未限制 → 可上传超大文件DoS > 结论:**前端验证全部不可信,仅做体验优化,不能作为安全防护** ## 三、文件名&后缀校验测试(核心项) ### 3.1 后缀绕过测试项(白名单优先,黑名单几乎全部可绕过) 1. 大小写绕过:`shell.Php`、`shell.AspX`、`shell.Jsp` 2. 双后缀:`shell.jpg.php`、`shell.png;.php` 3. 特殊后缀(黑名单漏拦截): PHP:`.phtml .php3 .php4 .php5 .phar .inc .shtml` Windows:`.asa .cer .cdx` 4. 末尾点+空格:`shell.php.`、`shell.php `(Windows自动去掉末尾点和空格) 5. Windows ADS流:`shell.php::$DATA`,上传后文件名保留php后缀 6. 双写绕过(过滤替换机制):`pphphp`(过滤php→替换为空,最终变成php) 7. 空字节截断(PHP<5.3.4):`shell.jpg%00.php`、hex写入`0x00`截断文件名 ### 3.2 校验机制检查 - [ ] 是否使用**黑名单**(禁止后缀)→ 极易被绕过,风险极高 - [ ] 是否使用**白名单**(仅允许jpg/png/pdf/docx)→ 安全做法 - [ ] 校验逻辑是否只取最后一个后缀(右到左解析) - [ ] 文件名是否过滤特殊字符:`\ / : * ? " < > | % 0x00` ## 四、MIME类型校验(只校验Content-Type=高危) - [ ] 仅校验请求头`Content-Type: image/jpeg`,不校验文件真实内容 → 直接修改请求头即可绕过 - [ ] 测试:上传php文件,把Content-Type改为`image/png`,看是否放行 - 结论:**MIME头部完全由客户端可控,绝对不能单独作为校验依据** ## 五、文件内容校验(图片马、多态文件) 1. 文件头(魔术字Magic Bytes)校验 - [ ] 仅校验文件头,不校验整个文件内容 → GIF图片马可绕过 - 测试:文件开头写入`GIF89a`,后面拼接一句话木马 2. EXIF元数据注入:把PHP代码写入图片EXIF信息,配合文件包含执行 3. 多态文件(GIFAR、图片+脚本混合文件) 4. 图片二次处理漏洞:ImageMagick ImageTragick(CVE-2016-3714),上传恶意图片触发命令执行 5. 压缩包上传:Zip Slip漏洞(压缩包内文件名包含`../`路径穿越,解压写入任意目录);压缩包内嵌套脚本文件 ## 六、文件名&存储路径(路径穿越高危) - [ ] 直接使用客户端传入的原始文件名保存(`$_FILES['name']`)→ 存在路径穿越风险 - [ ] 测试Payload: `../../shell.php`、`..%2Fshell.php`、`..%252Fshell.php`(双重URL编码) - [ ] 上传路径是否可控:路径参数可被篡改,配合00截断写入Web根目录 - [ ] 文件名未做随机重命名:文件名可控、可预测,直接访问即可执行脚本 ## 七、Web容器解析漏洞(上传图片也能执行代码) ### 7.1 Apache - 文件名从右向左解析:`shell.jpg.php` → 当成php执行 - 上传`.htaccess`,将jpg文件强制解析为PHP脚本(高风险) ### 7.2 Nginx - CVE-2013-4547:文件名带空格,访问`xxx.jpg/.php`即可解析执行 - 路径缺失后缀:`/upload/shell.jpg` 后面追加 `/php` 触发解析 ### 7.3 IIS6.0 - 目录解析:`upload/shell.jpg/xxx.php`,整个目录按php解析 - 分号解析:`shell.jpg;.php`,分号后内容被截断,按php执行 ### 7.4 IIS7/7.5 - 配置FastCGI时,图片路径后加`/.php`触发PHP解析 ## 八、高级漏洞场景(容易遗漏) 1. **条件竞争(竞争上传)** 流程:临时文件先写入→再校验→校验失败再删除;多线程并发上传+访问临时文件,在删除前执行webshell 2. **文件包含+上传组合漏洞** 上传图片马,再通过LFI漏洞包含该图片,执行脚本代码 3. **远程文件上传(URL上传)** 传入外网URL下载文件到服务器,极易导致写入恶意文件+SSRF 4. **文件名注入** 文件名带入SQL命令、XSS、命令注入;文件名含换行符写入日志触发日志注入 5. **软链接漏洞(Linux)** 压缩包内包含符号链接,解压覆盖系统配置文件 ## 九、文件存储与访问控制(上传成功后依然可被利用) - [ ] 上传目录是否在Web根目录内(必须放到webroot之外) - [ ] 上传目录是否开启脚本执行权限(禁止php/jsp/asp执行权限) - [ ] 文件访问是否做鉴权:A用户上传的文件,B用户能否直接URL遍历读取(未授权访问+水平越权) - [ ] 是否可以遍历上传目录所有文件(目录浏览开启) - [ ] 文件大小无上限,无数量限制,造成磁盘耗尽DoS - [ ] 未做病毒查杀,允许上传恶意exe、木马文件 ## 十、代码审计检查项(SAST重点检索关键词) ### 10.1 危险代码特征 - PHP:直接使用`$_FILES['xxx']['name']`拼接路径;`move_uploaded_file`未过滤文件名;无白名单仅做后缀替换 - Java:`request.getOriginalFilename()`直接拼接路径;未做文件名过滤 - Python:`request.files.filename`直接保存;未随机重命名 - 直接信任客户端MIME、只做前端校验、黑名单过滤 ### 10.2 审计检查点 1. 校验顺序:先校验文件名→再校验MIME→最后校验文件内容(魔术字) 2. 文件名是否做随机UUID重命名,完全丢弃原始文件名 3. 存储路径是否硬编码,禁止使用用户可控参数拼接路径 4. 上传目录是否配置:禁止执行脚本、禁止解析PHP ## 十一、加固修复清单(逐条落地) ### ✅ 1. 校验策略(纵深防御) 1. 只使用**后缀白名单**,坚决舍弃黑名单;只允许jpg、png、gif、pdf、docx等业务必需格式 2. 三重校验: ① 后端校验文件后缀(白名单) ② 校验文件真实魔术字(读取文件二进制头部,不依赖后缀) ③ 校验文件内容,防止图片马(二次图片渲染校验) 3. 完全丢弃客户端传入的原始文件名,使用UUID+随机字符串重命名文件,杜绝路径穿越与文件名可控问题 ### ✅ 2. 路径与权限加固 1. 上传目录部署在**Web根目录之外**,无法通过HTTP直接访问 2. 若必须放在Web目录:给上传目录配置权限,**禁止执行脚本**(nginx/apache配置禁止php执行) 3. 严格过滤文件名:过滤`../ \ / % 0x00 换行符`等危险字符 4. 限制单文件大小、单日上传总量,防止磁盘耗尽 ### ✅ 3. 容器与配置加固 1. 关闭Apache/Nginx/IIS解析漏洞配置 2. 禁止上传`.htaccess`、`.user.ini`这类配置文件 3. 开启WAF拦截脚本后缀、路径穿越字符 ### ✅ 4. 访问控制 1. 文件下载/预览必须校验当前用户是否拥有该文件权限,防止未授权遍历 2. 关闭目录浏览功能 ## 十二、漏洞复现测试用例(直接复制使用) 1. 前端JS绕过:禁用JS,直接上传shell.php 2. 后缀绕过:shell.php. 、shell.jpg.php、shell.PHP 3. MIME绕过:修改Content-Type为image/jpeg,上传php文件 4. 图片马:GIF89a+一句话木马,绕过文件头校验 5. 路径穿越:文件名写../../shell.php,测试能否写入上级目录 6. 解析漏洞:上传图片马,拼接路径触发容器解析执行 ## 十三、漏洞报告模板(适配你现有格式) 漏洞名称:不安全的文件上传(CWE-434) 风险等级:高危 前置条件:具备文件上传权限 漏洞原理:上传功能仅做前端/后缀/MIME浅层校验,未校验文件真实内容;文件名未随机重命名,可上传脚本文件,配合容器解析漏洞实现代码执行。 复现步骤: 1. 进入上传页面,抓包拦截上传请求 2. 修改文件名为脚本后缀(或构造图片马),绕过服务端校验 3. 文件上传成功,直接访问上传地址执行恶意代码 缓解措施:临时拦截脚本后缀,关闭上传目录执行权限 永久修复:启用白名单+魔术字校验;文件随机重命名;上传目录移出Web根目录;禁止脚本执行权限;开启图片二次内容校验 ## 十四、WAF/设备检测规则 1. 拦截文件名中包含`../`、`%00`、双后缀`.php.jpg` 2. 拦截上传内容中出现`

附件资料

附件仅对登录用户可见,请先 登录。

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载或以其他方式使用本站原创内容。