跳转到帖子

CTF 密码学实战:从弱口令重置令牌复现到社会工程情报面的权限边界审计

精选回复

发布于

背景在授权渗透和 CTF Web 题中,口令重置链路常同时涉及密码学与社会工程情报面:服务端生成的令牌看似随机,实际可能由时间戳、用户标识和可公开获取的信息拼接后哈希得到。攻击者不需要破解哈希,只需缩小输入空间即可离线枚举。本文以隔离靶场中的重置接口为例:应用使用 MD5(email + timestamp + birthYear) 生成令牌,有效期 10 分钟。邮箱与出生年份可能出现在公开资料中,时间戳又能由邮件头或访问日志推断。测试目标是验证令牌是否可预测、权限边界是否可绕过,以及系统能否留下足够审计证据。所有操作应限定在书面授权的测试账号、靶场域名和约定时间窗内。问题定位先画清链路,不要一上来跑字典。重点确认以下数据流:重置申请是否泄露账号存在性,例如响应正文、状态码、长度或耗时不同。令牌由什么字段构成,是否包含邮箱、用户 ID、时间戳、手机号后四位、生日等可推断信息。令牌是否绑定用户、用途、会话和一次性状态,修改请求中的 uid 后是否仍可使用。过期与核销是否由服务端强制执行,成功修改密码后旧令牌是否立即失效。网关、应用与身份系统是否记录申请、校验、核销和失败原因。黑盒测试时,可以对测试账号连续申请两次令牌,控制除时间外的变量,比较令牌长度、字符集和变化规律。若服务端返回 32 位十六进制字符串,不应直接断言是 MD5,但可结合代码审计、依赖调用和样本验证进一步判断。技术分析该方案的问题不在 MD5 能否被“反解”,而在输入熵过低。假设攻击者已知测试邮箱和出生年份,且可将生成时间定位在前后 120 秒,则候选输入只有 241 个。即使换成 SHA-256,只要构造方式不变,枚举成本仍然很低。更严重的是令牌若未绑定用户,接口可能同时接受客户端提交的 uid 与 token。此时,一个测试账号的合法令牌可能被替换 uid 后用于另一个授权测试账号,形成对象级权限边界缺失。验证时必须使用专门创建的两个测试账号,不要触碰真实用户。操作步骤创建账号 A、B,记录各自内部 ID;为 A 发起一次重置申请。保存请求与响应的原始时间、响应码、响应长度、邮件头中的 Date,并统一换算为 UTC。在本地离线生成候选令牌,与 A 收到的令牌比对;不要对线上接口进行高频枚举。命中算法后,仅在授权范围内测试令牌的用户绑定:用 A 的令牌配合 B 的测试 ID 提交一次请求。分别验证过期、重复使用、修改密码后复用、并发核销四种状态。导出网关和应用日志,确认每个步骤是否可由请求 ID 串联。离线复现代码以下脚本只对已取得的测试样本做离线验证。时间范围应来自实际证据,不应扩大为无边界扫描。from datetime import datetime, timezone
import hashlib

email =

网络流量与边界分析示意图
网络请求、日志与边界流量分析示意
靶场实验与攻防复盘示意图
靶场实验、复盘记录与攻防路径示意

这个题目建议把“令牌可预测性”和“情报是否越权”拆成两条证据链,不要把弱口令、用户名枚举和社工信息混在一个结论里。

重置令牌侧重点验证四件事:随机性、绑定关系、有效期和单次消费。抓取多次由同一账号及不同账号触发的令牌,先解码其 Base64/Hex/JWT 外观,再比较长度、固定前后缀、时间戳和相邻值差分。不要只凭“看起来有规律”下结论;至少确认是否能在不知道服务端密钥的情况下预测下一枚令牌。若是 JWT,还要检查服务端是否固定算法并校验 exp、aud、iss,而不是仅做解码。

# 仅对 CTF 或已授权环境采样;观察响应码、长度和耗时是否泄露账号存在性
for u in alice bob not_exist_$(date +%s); do
  curl -sk -o /tmp/$u.out -w "$u %{http_code} %{size_download} %{time_total}\n" \
    -H 'Content-Type: application/json' \
    --data "{\"username\":\"$u\"}" \
    
done

服务端修复可以落到:使用 CSPRNG 生成至少 128 bit 随机值;数据库只保存令牌哈希;令牌绑定用户、用途和请求上下文;短时过期且原子地单次消费;请求接口统一响应,配合账号/IP/设备维度限速。消费动作建议用条件更新避免并发重放:

UPDATE password_reset
SET used_at = NOW()
WHERE token_hash = :sha256
  AND used_at IS NULL
  AND expires_at > NOW();
-- affected_rows 必须等于 1,否则拒绝重置

情报面权限审计则应先定义边界:公开来源不等于可任意归集,更不等于可以拿来尝试登录、回答安全问题或联系第三方诱导操作。CTF 中只使用题目明确提供或授权收集的数据;真实审计中记录来源 URL、采集时间、字段、处理目的和授权依据,并做最小化保存。像生日、手机号后四位、公司组织关系这类信息,应该作为“身份验证因子已被公开信息削弱”的风险证据,而不是继续扩展画像。

报告里最好分别给出可复现证据:令牌样本与生成规律、账号枚举的响应差异、越权所需的最小公开字段,以及每一步是否在授权范围内。这样既能证明漏洞链成立,也能避免把“能搜到信息”误写成“允许使用信息”。

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。