手机号归一化缺失导致的批量刷积分
游山玩水
游山玩水
山水SRC
2026年9月1日 09:16
河南
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
免责声明
本公众号分享的所有渗透测试技术文章仅面向合法授权的安全测试、学习交流与研究用途。读者必须确保自身行为符合《网络安全法》等相关法律法规,严禁将其用于任何未授权攻击等非法活动。因不当使用或传播相关内容所引发的任何法律责任与风险,由行为人自行承担,本公众号(或本人)概不负责
测试流程
测试前提
- 平台支持手机号注册,且有\"新号注册送积分/优惠券\"类营销活动。
- 奖励发放逻辑以\"手机号是否首次出现\"为判定依据(如
phone唯一索引或is_first=1)。 - 服务端在注册落库 / 奖励校验时未对手机号做归一化(如去前导零、去空格、国家码统一
+86处理),导致13800138000与013800138000被当成两个不同手机号。 - 短信验证码下发接口与注册接口对手机号的归一化处理不一致(或验证码接口做了去零、注册接口没做),使得
+0变种仍能收到码并完成注册。
测试流程
- 用手机号
A = 13800000000注册账号 A,完成短信校验,进入平台,确认首注积分已到账(基线:首号得奖)。 - 再发起一次注册,手机号填
0A = 013800000000(A 前加前导零),请求短信,确认能收到验证码(说明下发侧把0A和A都路由到同一 SIM,或下发侧也缺归一化)。 - 用
0A完成注册,得到账号 B。 - 查账号 B 的积分/优惠券:
- 若 B 也拿到了\"新号首注\"积分 → 漏洞成立。
- (变体)试
+86A、0086A、A(尾部空格)、A\等,看是否都能过且都得奖。
根因一句话
手机号在\"短信下发 → 注册落库 → 奖励判定\"三条链路上归一化不一致:138xxxx和 0138xxxx在电信侧是同一 SIM(能收同一个码),但业务侧被当成两个用户,奖励首注判定被绕过。本质是输入规范化(Input Canonicalization)缺失——所有用户输入进系统第一件事必须是归一化,手机号尤甚(+86/前导零/空格/分隔符 -)。
危害
- 资损(核心):攻击者用一个真实手机号 + 前导零/国家码变体,可刷 N 份首注积分、优惠券、试用 VIP,营销预算被薅穿。
- 可批量放大:买一段号段(
13800000000–13800009999),每个号试原号 / +86 / 0086 / 0前缀四种变体 → 理论 4 倍账号量。 - 破坏活动模型:\"一手机号一新人\"的运营假设被打破,活动 ROI 失真,财务对账困难。
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论