1. 项目背景与目标
去年夏天,我接到某教育机构的委托,对其新上线的小程序及后台管理系统进行全面的安全评估。这个项目特别有意思,因为它涉及到从移动端到后台的完整攻击面,正好可以验证我这些年积累的渗透测试方法论。
该学校刚上线了基于微信生态的校园服务小程序,包含课表查询、成绩查看、校园卡充值等功能,后端采用Java SpringBoot框架,前端使用Vue.js开发管理后台。在初步沟通中,校方特别提到他们担心两个问题:一是小程序接口是否存在数据泄露风险,二是后台管理系统能否抵御外部攻击。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 信息收集阶段
2.1 小程序逆向分析
我首先从微信小程序入手,使用wxapkg解包工具获取前端代码。这里有个实用技巧:在安卓手机/data/data/com.tencent.mm/MicroMsg/{userhash}/appbrand/pkg/目录下可以找到缓存的小程序包。通过反编译发现:
javascript复制// 获取成绩的接口调用
wx.request({
url: 'https://api.xxx.edu.cn/v1/score',
data: {
studentId: getApp().globalData.userId
},
header: {'Authorization': 'Bearer '+token}
})
关键发现:
- 接口未做频率限制
- 用户ID采用连续数字编号
- Token有效期长达7天
2.2 后台系统指纹识别
通过子域名扫描发现管理后台地址:
code复制admin.xxx.edu.cn
使用Wappalyzer识别出:
- Web框架:Spring Boot 2.5.4
- 前端框架:Vue.js 2.6.11
- 服务器:Nginx 1.18.0
特别注意到X-Powered-By头泄露了详细版本信息,这为后续漏洞利用提供了线索。
3. 漏洞挖掘过程
3.1 小程序接口测试
使用Burp Suite抓包发现几个关键问题:
- 成绩查询接口存在水平越权:
code复制POST /v1/score HTTP/1.1
Host: api.xxx.edu.cn
Authorization: Bearer xxxxx
{"studentId": 20230001} // 可遍历修改ID获取他人成绩
- 图片上传功能未校验文件类型:
bash复制curl -F "file=@test.php" https://api.xxx.edu.cn/upload
3.2 后台管理系统渗透
3.2.1 SQL注入漏洞
在登录界面发现延时注入:
sql复制admin' AND (SELECT * FROM (SELECT(SLEEP(5)))a)--
使用sqlmap自动化验证:
bash复制sqlmap -u "http://admin.xxx.edu.cn/login" --data="username=admin&password=123" --level=5 --risk=3
成功获取到管理员凭据的MD5哈希,通过彩虹表破解获得明文密码。
3.2.2 文件上传漏洞
在"导入学生信息"功能处,绕过限制的步骤:
- 修改Content-Type为
text/csv - 使用双后缀名
test.php.jpg - 通过00截断上传webshell
4. 漏洞利用与权限提升
4.1 小程序端利用链
- 通过越权接口获取所有学生ID
- 利用弱token生成规则伪造其他用户token
- 结合未授权访问的API下载全校师生通讯录
4.2 后台系统攻防
获得管理员权限后,发现服务器存在以下问题:
- /actuator/heapdump接口未授权访问
- 使用JD-GUI分析heapdump文件找到数据库密码
- 通过Redis未授权访问获取会话令牌
最终通过Tomcat WAR文件部署获得服务器root权限。
5. 修复建议与总结
5.1 关键修复方案
- 接口安全:
java复制// 添加权限注解
@PreAuthorize("#studentId == authentication.principal.id")
public Score getScore(@PathVariable String studentId) { ... }
- 文件上传防护:
nginx复制location ~* \.(php|jsp)$ {
deny all;
}
5.2 渗透测试心得
- 小程序安全往往被忽视,但可能成为整个系统的突破口
- Spring Boot应用要特别注意actuator端点的权限控制
- 永远要验证前后端的权限校验是否一致
- 上传功能必须同时校验文件头和扩展名
这次测试中最有意思的发现是:通过小程序漏洞获取的token竟然可以直接用于后台管理系统,暴露出严重的系统设计缺陷。建议企业在开发中建立统一的安全规范,避免前后端安全措施脱节的情况。
