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 端点探测

  1. 修改已知端点结构进行测试:

    • /api/v2/members/ → 404错误
    • /api/v2/users/ → 404错误
    • /api/v2/user/ → 405错误
  2. 405错误处理:

    • HTTP 405表示方法不被允许
    • 解决方案:将GET方法改为POST方法

3.2 参数构造

  1. 初始请求构造:

    {
      "username": "test",
      "password": "test123"
    }
    

    返回错误:缺少client参数

  2. 参数测试:

    • 尝试"client": "test" → 错误
    • 改为整型"client": 1 → 成功创建用户

4. 账户接管漏洞利用

4.1 用户组控制

  • client参数控制用户组归属
  • 使用Intruder模块爆破client值(1-100)
  • 筛选状态码201的响应确定有效ID

4.2 密码重置

  1. 使用有效clientID创建用户
  2. 在新浏览器登录该用户
  3. 触发密码重置功能
  4. 成功接收重置邮件

5. 权限提升攻击

5.1 管理员权限获取

  • 在请求中添加权限参数:
    {
      "username": "admin_test",
      "password": "admin123",
      "client": 5,
      "role": "admin"
    }
    
  • 成功创建具有管理员权限的账户

6. 漏洞挖掘经验总结

6.1 关键方法论

  1. 模糊测试应用:在目标简单、测试陷入僵局时,Fuzz测试可能带来意外收获
  2. 参数发散思维:大胆猜测可能的控制参数(如clientrole等)
  3. 漏洞影响扩大:发现漏洞后不急于提交,尝试扩大影响范围

6.2 技术要点

  1. HTTP状态码解读:

    • 404:端点不存在
    • 405:方法不正确(GET/POST等)
    • 201:创建成功
  2. JSON参数构造技巧:

    • 逐步添加参数测试
    • 注意参数类型(字符串/整型)
  3. 权限控制参数:

    • 用户组ID(client)
    • 角色参数(role)

7. 防御建议

7.1 接口安全

  1. 严格限制API端点访问权限
  2. 实现完善的认证和授权机制

7.2 参数验证

  1. 对所有输入参数进行严格验证
  2. 限制用户可修改的参数范围

7.3 权限控制

  1. 避免通过客户端参数控制权限
  2. 实施最小权限原则

7.4 监控与日志

  1. 记录所有敏感操作
  2. 设置异常行为告警

8. 扩展思考

8.1 类似漏洞场景

  1. 用户注册/创建接口
  2. 用户信息修改接口
  3. 权限变更接口

8.2 进阶测试思路

  1. JWT令牌分析
  2. 会话管理测试
  3. 横向越权测试

本教学文档完整呈现了从初始测试到最终获取管理员权限的全过程,强调了模糊测试和参数发散思维的重要性,并提供了详细的防御建议,可作为Web应用安全测试的实战参考。

账户接管漏洞挖掘实战教学文档 1. 漏洞背景与初始评估 1.1 目标环境 测试对象:私人项目网站 网站特点:业务简单,多为静态页面 测试权限:仅提供普通用户账户,无管理员权限 1.2 初始测试发现 唯一交互功能:文件上传点(仅限PDF格式) 无API文档提供,后端端点未知 2. 测试方法论 2.1 核心思路 遵循挖洞界名言:"网站如果有管理员用户,那么一定有管理员用户的特定端点" 采用模糊测试(Fuzz)方法寻找隐藏端点 2.2 端点猜测策略 常见管理员端点格式: 3. 模糊测试过程 3.1 端点探测 修改已知端点结构进行测试: /api/v2/members/ → 404错误 /api/v2/users/ → 404错误 /api/v2/user/ → 405错误 405错误处理: HTTP 405表示方法不被允许 解决方案:将GET方法改为POST方法 3.2 参数构造 初始请求构造: 返回错误:缺少 client 参数 参数测试: 尝试 "client": "test" → 错误 改为整型 "client": 1 → 成功创建用户 4. 账户接管漏洞利用 4.1 用户组控制 client 参数控制用户组归属 使用Intruder模块爆破 client 值(1-100) 筛选状态码201的响应确定有效ID 4.2 密码重置 使用有效 client ID创建用户 在新浏览器登录该用户 触发密码重置功能 成功接收重置邮件 5. 权限提升攻击 5.1 管理员权限获取 在请求中添加权限参数: 成功创建具有管理员权限的账户 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应用安全测试的实战参考。