禅道11.6注入分析
字数 858 2025-08-22 12:23:36

禅道11.6 SQL注入漏洞分析与利用

漏洞概述

禅道11.6版本存在一个SQL注入漏洞,攻击者可以通过构造特定的URL请求直接执行任意SQL语句,获取数据库敏感信息如用户账号密码等。该漏洞位于API模块的getModel方法中,通过call_user_func_array()函数调用导致。

漏洞利用条件

  • 需要有效的用户权限(已登录状态)
  • 目标系统为禅道11.6版本

漏洞利用POC

http://127.0.0.1/zentao116/api-getModel-api-sql-sql=select+account,password+from+zt_user

技术分析

URL解析机制

禅道的请求类型分为三种:PATH_INFO、PATH_INFO2和GET。漏洞利用使用的是PATH_INFO模式,以"-"方式传参。

  1. 请求首先由index.php处理,创建应用实例
  2. 调用$app->parseRequest()解析请求
  3. parsePathInfo()函数中,URL以"."分隔,前面部分作为URI,后面部分作为viewType
  4. setRouteByPathInfo()函数使用"-"分隔URI并整理为数组:
    • $items[0]为模块名
    • $item[1]为方法名

参数传递过程

  1. 对于PATH_INFO请求,调用getParams()函数获取参数
  2. 使用mergeParams函数合并参数
  3. 最终通过call_user_func_array()调用目标方法:
    call_user_func_array(array($module, $methodName), $this->params);
    
    这相当于$module::$methodName($this->params)

漏洞根源

漏洞位于/module/api/control.php中的getModel方法:

$result = call_user_func_array(array(&$module, $methodName), $params);

该方法允许直接调用API模块中的sql方法,而sql方法存在SQL注入漏洞:

public function sql($sql)
{
    $sql = trim($sql);
    echo $sql;
    if(strpos($sql, 'select ') === false) return $this->dao->query($sql)->fetchAll();
    return $this->dao->query($sql)->fetchAll();
}

该方法直接执行传入的SQL语句,仅做了简单的"select "字符串检查,但检查逻辑存在缺陷,无法有效防止SQL注入。

漏洞修复建议

  1. 对传入的SQL语句进行严格过滤和参数化处理
  2. 限制API模块的访问权限
  3. 更新到最新版本的禅道系统

参考链接

  • [渗透笔记]禅道(payload)
  • 禅道11.6后台SQL注入漏洞复现分析(URL格式分析)
禅道11.6 SQL注入漏洞分析与利用 漏洞概述 禅道11.6版本存在一个SQL注入漏洞,攻击者可以通过构造特定的URL请求直接执行任意SQL语句,获取数据库敏感信息如用户账号密码等。该漏洞位于API模块的getModel方法中,通过call_ user_ func_ array()函数调用导致。 漏洞利用条件 需要有效的用户权限(已登录状态) 目标系统为禅道11.6版本 漏洞利用POC 技术分析 URL解析机制 禅道的请求类型分为三种:PATH_ INFO、PATH_ INFO2和GET。漏洞利用使用的是PATH_ INFO模式,以"-"方式传参。 请求首先由index.php处理,创建应用实例 调用 $app->parseRequest() 解析请求 在 parsePathInfo() 函数中,URL以"."分隔,前面部分作为URI,后面部分作为viewType setRouteByPathInfo() 函数使用"-"分隔URI并整理为数组: $items[0] 为模块名 $item[1] 为方法名 参数传递过程 对于PATH_ INFO请求,调用 getParams() 函数获取参数 使用 mergeParams 函数合并参数 最终通过 call_user_func_array() 调用目标方法: 这相当于 $module::$methodName($this->params) 漏洞根源 漏洞位于 /module/api/control.php 中的getModel方法: 该方法允许直接调用API模块中的sql方法,而sql方法存在SQL注入漏洞: 该方法直接执行传入的SQL语句,仅做了简单的"select "字符串检查,但检查逻辑存在缺陷,无法有效防止SQL注入。 漏洞修复建议 对传入的SQL语句进行严格过滤和参数化处理 限制API模块的访问权限 更新到最新版本的禅道系统 参考链接 [ 渗透笔记 ]禅道(payload) 禅道11.6后台SQL注入漏洞复现分析(URL格式分析)