某移动端任意用户接管漏洞的发现与利用
字数 1713 2025-09-23 19:27:38

移动端任意用户接管漏洞:发现与利用教学文档

0x01 漏洞简介

该漏洞存在于某移动端应用中,属于身份认证与会话管理缺陷,攻击者可在未授权的情况下接管任意用户的账户,获取其敏感数据与操作权限。漏洞核心问题在于服务端对用户标识符(如userIdtoken或会话ID)的校验机制不完善,导致越权访问。


0x02 漏洞危害

  • 任意用户账户接管:攻击者可访问、修改他人账户信息。
  • 敏感信息泄露:如个人资料、私密内容、交易记录等。
  • 未授权操作:可执行如支付、发布内容、修改密码等敏感操作。
  • 业务逻辑破坏:影响平台信誉与用户信任。

0x03 漏洞复现过程

一、挖掘过程

1. 初步观察与疑点

  • 使用抓包工具(如Burp Suite、Charles)拦截移动端App的HTTP/HTTPS请求。
  • 关注涉及用户身份的API接口(如/user/profile/api/getUserInfo等)。
  • 注意请求参数中是否包含可预测或可篡改的用户标识(如userIduidtoken)。

2. 代码审计与端点搜索

  • 若具备客户端代码(如Android APK),反编译后搜索关键词:
    • userIduiduser_id
    • tokensessionauthentication
    • API端点路径(如/api//user/
  • 重点关注身份验证相关的逻辑,尤其是服务端返回数据后的本地处理过程。

3. 分析鉴权机制

  • 检查请求中身份标识的传递方式:
    • 是否通过URL参数、请求头(如Authorization)、Cookie或Body传递。
    • 是否仅依赖客户端传来的标识符而未做服务端二次校验。

4. 再次验证

  • 修改请求中的用户ID为其他用户的ID,重放请求:
    GET /api/userInfo?userId=12345 HTTP/1.1
    Host: target.com
    Authorization: Bearer <attacker_token>
    
  • 若返回其他用户信息,则存在IDOR(Insecure Direct Object Reference)类漏洞。

5. 发现异常响应

  • 在某些接口中,发现即便使用其他用户的ID,服务端仍返回200 OK及该用户数据。
  • 可能伴随响应中返回完整用户对象(如邮箱、手机号、令牌等)。

6. 发现关键漏洞

  • 某关键接口(如账户绑定、密码重置、登录态刷新)允许通过修改userId参数直接操作他人账户。
  • 例如:
    POST /api/changePassword HTTP/1.1
    Content-Type: application/json
    
    {"userId": "victim_id", "newPassword": "hacked"}
    

7. 完全接管测试

  • 通过篡改userId,成功修改他人密码并登录其账户。
  • 验证可访问其私密数据、执行敏感操作。

为什么会有这个漏洞?

  • 服务端未对请求中的用户标识做有效性校验。
  • 依赖客户端传递的身份参数,未与当前登录会话绑定。
  • 缺乏权限控制层(RBAC或ABAC)对操作进行鉴权。

0x04 修复建议

一、职责分离

  • 服务端应完全自主管理用户会话与身份,不信任客户端传来的身份标识。
  • 使用服务端生成的会话ID(如JWT或Session Cookie)作为唯一可信凭据。

二、加强认证机制

  1. 服务端校验

    • 所有敏感操作需校验当前登录用户是否具备操作目标资源的权限。
    • 示例代码(伪代码):
      String currentUserId = getCurrentUserIdFromSession();
      String targetUserId = request.getParameter("userId");
      if (!currentUserId.equals(targetUserId)) {
          throw new AccessDeniedException();
      }
      
  2. 使用不可预测的标识符

    • 避免使用自增ID作为用户标识,改用UUID或随机字符串。
  3. 接口权限控制

    • 引入统一的权限中间件,对所有接口进行鉴权。
    • 实施最小权限原则(Principle of Least Privilege)。
  4. 日志与监控

    • 记录所有敏感操作的访问日志,实时监控异常行为(如频繁跨用户访问)。

附录:常见测试Payload

参数 测试值
userId 其他用户的ID(如12345)
uid 其他用户的UID
token 替换为其他用户的token(如有)
Authorization 篡改Bearer Token中的用户标识

如果有新的想法,欢迎随时和我讨论!

移动端任意用户接管漏洞:发现与利用教学文档 0x01 漏洞简介 该漏洞存在于某移动端应用中,属于 身份认证与会话管理缺陷 ,攻击者可在未授权的情况下 接管任意用户的账户 ,获取其敏感数据与操作权限。漏洞核心问题在于服务端对用户标识符(如 userId 、 token 或会话ID)的校验机制不完善,导致越权访问。 0x02 漏洞危害 任意用户账户接管 :攻击者可访问、修改他人账户信息。 敏感信息泄露 :如个人资料、私密内容、交易记录等。 未授权操作 :可执行如支付、发布内容、修改密码等敏感操作。 业务逻辑破坏 :影响平台信誉与用户信任。 0x03 漏洞复现过程 一、挖掘过程 1. 初步观察与疑点 使用抓包工具(如Burp Suite、Charles)拦截移动端App的HTTP/HTTPS请求。 关注涉及用户身份的API接口(如 /user/profile 、 /api/getUserInfo 等)。 注意请求参数中是否包含可预测或可篡改的用户标识(如 userId 、 uid 、 token )。 2. 代码审计与端点搜索 若具备客户端代码(如Android APK),反编译后搜索关键词: userId 、 uid 、 user_id token 、 session 、 authentication API端点路径(如 /api/ 、 /user/ ) 重点关注身份验证相关的逻辑,尤其是服务端返回数据后的本地处理过程。 3. 分析鉴权机制 检查请求中身份标识的传递方式: 是否通过URL参数、请求头(如 Authorization )、Cookie或Body传递。 是否仅依赖客户端传来的标识符而未做服务端二次校验。 4. 再次验证 修改请求中的用户ID为其他用户的ID,重放请求: 若返回其他用户信息,则存在IDOR(Insecure Direct Object Reference)类漏洞。 5. 发现异常响应 在某些接口中,发现即便使用其他用户的ID,服务端仍返回200 OK及该用户数据。 可能伴随响应中返回完整用户对象(如邮箱、手机号、令牌等)。 6. 发现关键漏洞 某关键接口(如账户绑定、密码重置、登录态刷新)允许通过修改 userId 参数直接操作他人账户。 例如: 7. 完全接管测试 通过篡改 userId ,成功修改他人密码并登录其账户。 验证可访问其私密数据、执行敏感操作。 为什么会有这个漏洞? 服务端未对请求中的用户标识做有效性校验。 依赖客户端传递的身份参数,未与当前登录会话绑定。 缺乏权限控制层(RBAC或ABAC)对操作进行鉴权。 0x04 修复建议 一、职责分离 服务端应完全自主管理用户会话与身份,不信任客户端传来的身份标识。 使用服务端生成的会话ID(如JWT或Session Cookie)作为唯一可信凭据。 二、加强认证机制 服务端校验 : 所有敏感操作需校验当前登录用户是否具备操作目标资源的权限。 示例代码(伪代码): 使用不可预测的标识符 : 避免使用自增ID作为用户标识,改用UUID或随机字符串。 接口权限控制 : 引入统一的权限中间件,对所有接口进行鉴权。 实施最小权限原则(Principle of Least Privilege)。 日志与监控 : 记录所有敏感操作的访问日志,实时监控异常行为(如频繁跨用户访问)。 附录:常见测试Payload | 参数 | 测试值 | |---------------|----------------------------------| | userId | 其他用户的ID(如12345) | | uid | 其他用户的UID | | token | 替换为其他用户的token(如有) | | Authorization | 篡改Bearer Token中的用户标识 | 如果有新的想法,欢迎随时和我讨论!