常见漏洞验证121 条

会话固定检查

登录前后会话标识未轮换时存在会话固定风险;检查登录、提权、改密后会话 ID 是否更新。

会话固定是什么

会话固定(Session Fixation)指攻击者预先获得或设定一个会话标识,诱导受害者携带它完成登录;如果登录后服务端没有重新生成标识,攻击者手里的旧标识就直接变成已认证会话。检查要点是标识的生命周期:登录成功、权限提升、修改密码、切换身份这四类状态变化之后,标识是否轮换且旧值立即失效。

基本信息

适用平台所有基于会话的 Web 与 App 后端(Cookie、Token 形态均适用)
观察对象Cookie 值、Authorization 令牌、移动端 session 字段
期望行为敏感状态变化后重新签发标识并作废旧标识
验证方式对比同一浏览器登录前后的标识值,并用旧值重放只读请求

典型使用场景

  • 登录功能改造后回归验证会话轮换是否生效
  • 排查自助注册到登录链路中标识未重建的问题
  • 核查 SSO 单点登录回跳过程是否固定了标识
  • 验证改密、换绑手机号后的旧会话是否被强制失效
  • 移动端评估中确认 Token 在重新认证后是否重新签发

验证步骤

验证步骤
curl -isS -c jar.txt https://app.example.com/login | grep -i 'set-cookie'   # 匿名访问获取初始标识
curl -isS -b jar.txt -c jar.txt -d 'user=test&pass=***' https://app.example.com/login | grep -i 'set-cookie'   # 登录后看标识是否更换
curl -isS -b jar.txt https://app.example.com/api/me      # 用新标识确认登录态
# 再用登录前的旧标识值重放一次只读请求:应被拒绝,而不是返回 200

状态变化与期望

状态变化期望行为常见问题
匿名到登录重新签发会话标识沿用匿名时期标识
普通用户提权重新签发并作废旧标识仅更新权限标志位
修改密码作废其他设备会话旧会话仍可用直至过期
注销服务端使标识失效仅清前端 Cookie
重新认证签发新令牌旧令牌在有效期内继续可用
会话标识必须由服务端生成且不可预测:允许客户端传入自定义标识(如 ?sid= 参数)的实现在这类检查中通常直接命中。
验证时只使用自有测试账号,并且不要对他人会话做重放;发现旧标识仍可用时立即记录并报告,避免影响真实用户的会话。

易错点

  • 只检查 Cookie 形态的会话,漏掉 Authorization 头中的令牌与移动端自定义会话字段
  • 在共享测试账号上验证,标识变化无法归因到具体登录动作
  • 把“前端已经重新获取用户信息”当成轮换证据,服务端标识实际未变
  • 只验证登录场景,漏掉提权、改密、换绑这些同样敏感的标识生命周期节点
  • 发现旧标识仍有效后继续长时间测试,等于维持了一个越权会话

数据来源与参考

  • OWASP WSTG WSTG-SESS-03
  • CWE-384(Session Fixation)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌