文章总结: 本文系统梳理了验证码、登录、密码重置等环节的26种任意用户漏洞实战案例,涵盖验证码爆破、响应包篡改、SQL注入、权限绕过等核心漏洞类型,并针对每种场景提供了具体修复方案,强调服务端不可信任客户端、凭证一次性有效及三要素校验等安全原则。 综合评分: 85 文章分类: web安全,漏洞分析,实战经验,应用安全,安全开发
【扩充版】“任意用户漏洞”全景手册 20+ 实战案例
原创
繁星01 繁星01
安全君呀
2026年4月22日 16:01 北京
在小说阅读器读本章
去阅读
点击上方蓝色文字关注↑↑↑↑↑
将安全君呀设为”星标⭐️”
第一时间收到文章更新
声明: 安全君呀 公众号文章中的技术只做研究之用,禁止用来从事非法用途,如有使用文章中的技术从事非法活动,一切后果由使用者自负,与本公众号无关。
文章声明:本篇文章内容部分选取网络,如有侵权,请告知删除。
前言
以下 25 条覆盖“验证码→登录→密码重置”完整链路,均来自近一年 SRC 真实案例。
01
四位数验证码可爆破
• 场景:登录/注册/换绑手机仅 4 位数字,有效期 10 min,接口无次数限制。
• 利用:Burp Intruder 0-9999 全量跑,平均 3-5 min 即命中。
• 修复:① 6 位以上;② 5 次错误即锁;③ 同 IP 1 h 限 30 次。
02
验证码回显(Response Reflection)
• 场景:服务端把验证码藏在 JSON 里返回前端,再由 JS 比对。
• 利用:拦截响应包即可看到 code=“123456”,改 client 端结果为 true 即可通过。
• 修复:后端必须自行比对,禁止把验证码返回到客户端。
03
只验证验证码,未校验绑定关系
• 场景:手机 A 的验证码可以验证手机 B 的表单。
• 利用:先给自己手机发码→获得正确验证码→把手机号改成受害者→提交。
• 修复:比对 session 里保存的“手机号+验证码”与提交的是否一致。
04
修改返回包(状态码/JSON)
• 场景:/checkCode 返回 {“code”:400,”msg”:”错误”}。
• 利用:Intercept Response → 改 {“code”:200,”msg”:”正确”} → 前端直接跳转重置页。
• 修复:关键状态必须由后端签发 JWT 或 session-flag,客户端仅做展示。
05
双写手机号(批量短信轰炸)
• 场景:mobile=13555555555,13500000000&code=134567
• 利用:逗号分隔即可给 N 个号码发同一条短信,瞬间耗尽短信包量。
• 修复:mobile 字段强制 string 单号码;数组格式需后端白名单长度≤1。
POST/cc/register/mobile/smssendHTTP/1.1Host:xxx.comUser-Agent:Mozilla/5.0(WindowsNT5.1;rv:21.0)Gecko/20100101Firefox/21.0Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language:zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3Accept-Encoding:gzip,deflateReferer:Cookie:Connection:keep-aliveContent-Type:application/x-www-form-urlencodedContent-Length:60mobile=13555555555,13500000000&c0de=134567
06
第三方 OAuth 登录 → UID 越权
• 场景:微博授权后返回 {“uid”:”123456″,”token”:”xxx”}。
• 利用:把 uid 改成目标用户即可直接获得其本站 session。
• 修复:以第三方返回的 openid+unionid 做本地账号绑定,不可信任客户端传来的 UID。
07
随意验证码(万能 6 位)
• 场景:后端 WHERE code=$input 且 code 字段为空时 SQL 短路。
• 利用:输入 000000/111111 必过。
• 修复:code=空 或 NULL 时直接抛异常;用严格==比对。
08
验证码字段为空/null
• 场景:mobile=13555555555&code=null
• 利用:PHP 弱类型 null==0==false,绕过。
• 修复:empty($code) || strlen($code)!=6 直接拒绝。
POST/cc/register/mobile/smssendHTTP/1.1Host:xxx.comUser-Agent:Accept:tion/xml;q=0.9,*/*;q=0.8Accept-LanguageAccept-Encoding:gzip,deflateReferer:Cookie:Connection:keep-aliveContent-Type:application/x-www-form-urlencodedContent-Length:60mobile=13555555555&code=null
或:mobile=13555555555&code=
09
修改手机号—短信劫持
步骤:
-
输入用户名 admin
-
拦截发送短信包,改手机号为自己的
-
下一步提交新密码时再把手机号改回 admin
结果:admin 的密码重置码发到攻击者手机。
修复:session 固化“待验证手机”,任何后续步骤必须与之一致。
10
重置链接参数可预测
链接:/reset?uid=123&d=base64(md5(uid+timestamp))
• 利用:timestamp 只到秒,跑 60 个值即可拼出正确 d。
• 修复:d 使用 HMAC(uid+expire, serverKey) 并设 15 min 过期。
11
万能密码(SQL 注入)
ASP/ASPX/PHP/JSP 常用 payload 已列出,补充 2 条最新绕过:
• 'or''='&password={any}
• '||1#(MySQL 模式)
修复:预编译+ORM;禁用拼接;失败 3 次锁定账号。
asp aspx万能密码"or"a"="a').or.(.a.='.aor1=1--admin'or1=1#
PHP万能密码admin'"密码*/''or 1=1/*"or"a"="a
jsp万能密码1'or1'='1admin'or 1=1/*
任意用户登录:admin'or'1'='1
12
接口暴露用户敏感字段
场景:/u/getUserInfo?user=abc 返回
{“uid”:1,”email”:”[email protected]”,”mobile”:”13800138000″}
利用:先批量跑用户名→得到 uid/手机/邮箱→再用九、十重置密码。
修复:敏感字段走加密通道,对外仅返回脱敏后四位。
13
步骤序号越权(URL 参数)
找回密码三步:
-
/getpwc1.html
-
/getpwc2.html
-
/getpwc3.html
直接 GET /getpwc3.html?step=3 即可进入最后一步输入新密码。
修复:每一步完成后把标识写入服务端 session,后端校验 step 顺序。
14
UID 遍历+无验证码
场景:/resetPwd POST 数据 {“uid”:10001}
利用:10000-10100 跑一遍,即可批量下发重置邮件。
修复:加图形/短信验证码;uid 与当前登录身份二次校验。
15
邮件令牌未绑定账号
重置链接:/reset?token=8a9b8c9d
数据库里 token 表没有 user_id 外键,导致任何有效 token 可重置任意账号。
修复:token 记录包含 uid 与过期时间,校验时 WHERE token=? AND uid=?。
16
子域名共享 Cookie 导致会话混淆
公司把 wiki.xxx.com 与 passport.xxx.com 配在 *.xxx.com,token 储存在主域 Cookie。
攻击者在 wiki 子域拿到 Cookie 后,可直接访问 passport 重置接口。
修复:敏感业务单独二级域 passport.xxx.com,Cookie 设 Domain=passport.xxx.com; HttpOnly; SameSite=Strict。
17
JSONP 劫持获取用户 UID
场景:/api/getUid?callback=abc 返回 abc({“uid”:123})
攻击者在自己页面调用即可获得已登录用户的 uid,再用于十、十四。
修复:敏感接口禁止 JSONP;改用 CORS 并加 Authorization 头。
18
GraphQL 批量查询
{users(first:100){edges{node{uid email}}}}
无节点级权限,一次性拉全站用户列表。
修复:GraphQL 加 @auth 指令,限制查询深度与条数。
19
密码找回凭证可复用
/token/verify 接口返回 HTTP 302,Location 带一次性 code。
Location: /reset?code=ABC123
code 未置过期,可被多次使用。
修复:code 校验后立即删除或标记 used=1。
20
弱加密可逆
重置链接里 uid=AES(uid, ECB, key=1234567890abcdef)
key 固定且 ECB 模式,可离线解密/伪造任意 uid。
修复:改用 HMAC 或 RSA 签名,服务器端保存密钥。
21
服务器时间泄露
返回头 Server-Timing: dt=1234567890
攻击者由此得知服务器秒级时间,辅助预测十中的 timestamp。
修复:关闭非必要服务器头。
22
日志外泄
/static/logs/2025/04/27.log 可直接下载,内含所有重置 token。
修复:禁止 Web 访问日志目录;日志脱敏或移至 OSS 内网。
23
验证码音频路径可猜解
/audio/20250427/13555555555.wav
按手机号+日期生成,可暴力下载听取语音验证码。
修复:audio 文件名使用随机 UUID,与手机号无关联。
24
邮箱别名绕过
某些系统把 [email protected] 与 [email protected] 视为同一账号,但重置时只对 alias 做校验,导致原账号被劫持。
修复:标准化邮箱,去掉 +alias 后再入库。
25
HTTP 参数污染
mobile=13800000000&mobile=13900000000
后端取第一个,框架取第二个,验证与最终重置号码不一致。
修复:禁止同名参数;严格用 getParameter(name) 并只接受单值。
26
修复原则
-
服务端永远不信任客户端传来的身份标识;
-
所有凭证一次有效+过期+绑定用户;
-
任何验证步骤必须“三要素”同检:用户标识、凭证、操作对象。
Tips
欢迎大家在下面点赞评论加关注,让我们一起在网安之路越走越远!!!
长按扫描下方二维码加关注,了解更多网安知识哦!
END
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:安全君呀 繁星01 繁星01《【扩充版】“任意用户漏洞”全景手册 20+ 实战案例》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论