某移动端任意用户接管漏洞的发现与利用
字数 1713 2025-09-23 19:27:38
移动端任意用户接管漏洞:发现与利用教学文档
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_idtoken、session、authentication- API端点路径(如
/api/、/user/)
- 重点关注身份验证相关的逻辑,尤其是服务端返回数据后的本地处理过程。
3. 分析鉴权机制
- 检查请求中身份标识的传递方式:
- 是否通过URL参数、请求头(如
Authorization)、Cookie或Body传递。 - 是否仅依赖客户端传来的标识符而未做服务端二次校验。
- 是否通过URL参数、请求头(如
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)作为唯一可信凭据。
二、加强认证机制
-
服务端校验:
- 所有敏感操作需校验当前登录用户是否具备操作目标资源的权限。
- 示例代码(伪代码):
String currentUserId = getCurrentUserIdFromSession(); String targetUserId = request.getParameter("userId"); if (!currentUserId.equals(targetUserId)) { throw new AccessDeniedException(); }
-
使用不可预测的标识符:
- 避免使用自增ID作为用户标识,改用UUID或随机字符串。
-
接口权限控制:
- 引入统一的权限中间件,对所有接口进行鉴权。
- 实施最小权限原则(Principle of Least Privilege)。
-
日志与监控:
- 记录所有敏感操作的访问日志,实时监控异常行为(如频繁跨用户访问)。
附录:常见测试Payload
| 参数 | 测试值 |
|---|---|
| userId | 其他用户的ID(如12345) |
| uid | 其他用户的UID |
| token | 替换为其他用户的token(如有) |
| Authorization | 篡改Bearer Token中的用户标识 |
如果有新的想法,欢迎随时和我讨论!