熊海cms代码审计-学习篇
字数 1416 2025-08-15 21:33:00
熊海CMS代码审计教学文档
0x00 前言
本教学文档基于对熊海CMS的代码审计实践,总结发现的多个安全漏洞,包括文件包含漏洞、逻辑漏洞和SQL注入漏洞。通过本教学,您将学习到如何识别和利用这些常见的安全问题。
0x01 文件包含漏洞
漏洞位置
index.php文件admin/index.php文件
漏洞分析
-
漏洞原理:
- 代码通过
$_GET['r']获取参数,使用三元运算符判断是否为空 - 如果为空则包含
index,否则包含r参数指定的文件 r参数完全可控,未做任何过滤
- 代码通过
-
关键代码:
$r = isset($_GET['r']) ? $_GET['r'] : 'index'; include($r); -
利用方法:
- 构造Payload:
r=../xx实现目录遍历 - 可以包含任意文件,包括本地文件(LFI)或远程文件(RFI)
- 构造Payload:
-
影响范围:
- 前台
index.php和后台admin/index.php均存在此漏洞 - 可能导致敏感信息泄露、代码执行等严重后果
- 前台
0x02 逻辑漏洞(认证绕过)
漏洞位置
./inc/check_login.php文件
漏洞分析
-
认证流程:
- 正常登录流程涉及4个文件:
- 默认
r=login,包含login.php login.php包含inc/conn.php(处理账号密码验证)inc/conn.php负责MySQL连接和认证- 最后返回
login.php完成登录,设置usercookie
- 默认
- 正常登录流程涉及4个文件:
-
漏洞代码:
$user = $_COOKIE['user']; if ($user == ""){ header("Location: ?r=login"); exit; } -
漏洞原理:
- 仅检查
usercookie是否为空 - 如果
user不为空(无论值是什么),都会通过认证检查 - 没有验证
user值的有效性
- 仅检查
-
利用方法:
- 退出后台
- 添加任意
usercookie(如user=1) - 访问
?r=index即可绕过登录
-
影响:
- 完全绕过后台认证机制
- 攻击者可无密码访问后台所有功能
0x03 SQL注入漏洞
漏洞位置
admin/login.php文件
漏洞分析
-
漏洞代码:
// 用户输入直接拼接到SQL语句中 $user = $_POST['user']; $password = $_POST['password']; // 执行SQL查询 $query = "SELECT * FROM manage WHERE user='$user'"; $res = mysql_query($query); // 检查密码 if ($password != $row['password']){ exit; } -
漏洞特点:
- 用户输入的
$user直接拼接到SQL语句,无过滤 - 不能使用万能密码绕过,因为会单独检查密码
- 使用了
mysql_error()函数,适合报错注入
- 用户输入的
-
利用方法:
- 构造报错注入Payload:
1' or updatexml(1,concat_ws(database(),0x7e,0x7e),1) # - 通过错误信息获取数据库信息
- 构造报错注入Payload:
-
影响:
- 可能导致数据库信息泄露
- 可能进一步获取管理员凭据或其他敏感数据
0x04 其他安全问题
文档提到该系统还存在多处XSS漏洞,但未详细说明。在实际审计中,应检查:
- 所有用户输入输出点
- 是否使用了
htmlspecialchars等过滤函数 - 反射型和存储型XSS的可能性
0x05 防护建议
-
文件包含防护:
- 使用白名单限制可包含的文件
- 禁止包含用户可控的文件路径
- 使用
basename()等函数过滤路径
-
认证逻辑加固:
- 检查cookie值是否有效(如与session比对)
- 实现完整的会话管理机制
- 使用服务器端session而非仅依赖cookie
-
SQL注入防护:
- 使用预处理语句(PDO/mysqli)
- 对用户输入进行严格过滤
- 禁用错误信息显示
-
其他建议:
- 对所有用户输入进行验证和过滤
- 实现CSRF防护机制
- 定期进行安全审计和代码审查
0x06 总结
熊海CMS存在多处严重安全漏洞,包括文件包含、认证绕过和SQL注入等。这些漏洞的组合可能导致系统完全被攻陷。开发人员应重视安全编码实践,审计人员应重点关注用户输入处理、认证逻辑和数据库操作等关键点。