Bugbounty:一次有趣的账户接管
字数 1228 2025-08-26 22:11:45
账户接管漏洞挖掘实战教学文档
1. 漏洞背景与初始评估
1.1 目标环境
- 测试对象:私人项目网站
- 网站特点:业务简单,多为静态页面
- 测试权限:仅提供普通用户账户,无管理员权限
1.2 初始测试发现
- 唯一交互功能:文件上传点(仅限PDF格式)
- 无API文档提供,后端端点未知
2. 测试方法论
2.1 核心思路
- 遵循挖洞界名言:"网站如果有管理员用户,那么一定有管理员用户的特定端点"
- 采用模糊测试(Fuzz)方法寻找隐藏端点
2.2 端点猜测策略
常见管理员端点格式:
/api/v2/member/
/api/v2/members/
/api/v2/users/
/api/v2/user/
3. 模糊测试过程
3.1 端点探测
-
修改已知端点结构进行测试:
/api/v2/members/→ 404错误/api/v2/users/→ 404错误/api/v2/user/→ 405错误
-
405错误处理:
- HTTP 405表示方法不被允许
- 解决方案:将GET方法改为POST方法
3.2 参数构造
-
初始请求构造:
{ "username": "test", "password": "test123" }返回错误:缺少
client参数 -
参数测试:
- 尝试
"client": "test"→ 错误 - 改为整型
"client": 1→ 成功创建用户
- 尝试
4. 账户接管漏洞利用
4.1 用户组控制
client参数控制用户组归属- 使用Intruder模块爆破
client值(1-100) - 筛选状态码201的响应确定有效ID
4.2 密码重置
- 使用有效
clientID创建用户 - 在新浏览器登录该用户
- 触发密码重置功能
- 成功接收重置邮件
5. 权限提升攻击
5.1 管理员权限获取
- 在请求中添加权限参数:
{ "username": "admin_test", "password": "admin123", "client": 5, "role": "admin" } - 成功创建具有管理员权限的账户
6. 漏洞挖掘经验总结
6.1 关键方法论
- 模糊测试应用:在目标简单、测试陷入僵局时,Fuzz测试可能带来意外收获
- 参数发散思维:大胆猜测可能的控制参数(如
client、role等) - 漏洞影响扩大:发现漏洞后不急于提交,尝试扩大影响范围
6.2 技术要点
-
HTTP状态码解读:
- 404:端点不存在
- 405:方法不正确(GET/POST等)
- 201:创建成功
-
JSON参数构造技巧:
- 逐步添加参数测试
- 注意参数类型(字符串/整型)
-
权限控制参数:
- 用户组ID(client)
- 角色参数(role)
7. 防御建议
7.1 接口安全
- 严格限制API端点访问权限
- 实现完善的认证和授权机制
7.2 参数验证
- 对所有输入参数进行严格验证
- 限制用户可修改的参数范围
7.3 权限控制
- 避免通过客户端参数控制权限
- 实施最小权限原则
7.4 监控与日志
- 记录所有敏感操作
- 设置异常行为告警
8. 扩展思考
8.1 类似漏洞场景
- 用户注册/创建接口
- 用户信息修改接口
- 权限变更接口
8.2 进阶测试思路
- JWT令牌分析
- 会话管理测试
- 横向越权测试
本教学文档完整呈现了从初始测试到最终获取管理员权限的全过程,强调了模糊测试和参数发散思维的重要性,并提供了详细的防御建议,可作为Web应用安全测试的实战参考。