找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

675

积分

0

好友

82

主题
发表于 3 小时前 | 查看: 1| 回复: 0

声明:本文相关技术仅用于安全研究,请勿用于非法测试。

最近在一次授权渗透测试中,目标是一个小程序。整个测试过程颇为典型,发现了一处由接口信息泄露导致的严重垂直越权漏洞,最终实现了任意账号登录。下面我将详细复盘这次测试。

“有人要搞事情”的卡通表情包,暗示安全测试开始

拿到小程序后,首先进行常规操作:点击登录,使用手机号授权。整个过程非常顺畅。

小程序登录后的设置界面截图,包含安全设置、通知等选项

登录进入系统后,我发现功能点并不多,感觉可测试的面比较窄。于是决定跳出小程序的限制,尝试对其后台域名进行目录扫描,看看能否发现一些隐藏的路径或敏感信息。

“连个么么哒都没有”的卡通表情包,表达对功能稀少的调侃

最初使用 dirsearch 进行常规扫描,结果一无所获。这时我想到,很多接口可能需要进行身份认证才能访问。于是,我将登录后获取到的认证凭证(如Token)加入到扫描请求头中再次尝试。

果然,这次有了重大发现:扫描到了一个 Swagger API 文档 地址。这对于安全测试人员来说,无疑是一个极好的开端,因为它几乎等于拿到了系统的“接口说明书”。

Swagger API文档接口的请求与响应截图

常言道,好的开始是成功的一半。在浏览这些API接口时,我特别注意那些与用户信息相关的端点。很快,一个名为 user/list 的接口引起了我的注意。初步测试发现,该接口的权限校验似乎存在缺陷,导致通过我的账号凭证可以查询到小程序所有注册用户的简要信息,包括一个关键字段——user_name

user/list接口的请求与响应截图,显示可获取其他用户信息

当然,仅仅获取用户列表还不是最严重的。关键在于回顾小程序的登录机制。通过分析授权登录流程的请求(剔除无关参数后),我确认其核心是依赖微信的 openid 作为用户身份标识进行登录的。

而巧合的是,从 user/list 接口获取到的 user_name 字段值,正是其他用户的 openid。到这里,一条完整的攻击链就清晰了:

  1. 攻击者登录自己的正常账号。
  2. 利用有缺陷的 user/list 接口,窃取其他用户的 openid(即user_name)。
  3. 模拟登录请求,将窃取到的 openid 替换到登录参数中。
  4. 服务器错误地将该请求识别为目标用户的合法登录,从而返回目标用户的登录态。

我立即进行了验证,使用获取到的他人 openid 发起登录请求,果然成功地、丝滑地登录了其他用户的账号,实现了完全的账号接管。

使用他人openid成功登录的接口响应截图

漏洞总结与反思
这个案例暴露了两个关键问题:一是开发环境或测试环境的 Swagger 等调试接口 不应暴露在生产环境;二是后端接口,尤其是涉及用户敏感数据的接口,必须进行严格的权限校验(如判断当前请求用户是否有权查询目标数据),不能仅凭一个有效的登录Token就放行所有操作。开发者需要时刻牢记“最小权限原则”,并在上线前进行充分的安全审计。

这种由多个“小问题”串联形成的严重安全风险在实际中并不少见。如果你在开发或测试中遇到过类似有趣或惊险的案例,欢迎到云栈社区安全板块分享交流,共同提升安全防御意识与能力。




上一篇:GPT-5.2等六大前沿大模型安全评测:报告揭示对抗攻击与多语言安全短板
下一篇:深度解析Redis Cluster集群原理:数据分片、高可用与横向扩展
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-24 23:06 , Processed in 0.415467 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表