会话固定攻击(Session Fixation):永不失效的凭证陷阱

会话固定攻击(Session Fixation):永不失效的凭证陷阱

1. 漏洞核心原理

会话固定攻击 是一种利用服务端会话管理缺陷的攻击方式。攻击者预先设定受害者的会话ID,诱导用户使用该ID登录后,攻击者即可劫持已认证的会话。

攻击三要素

  1. 会话ID可预测/可注入:如URL参数、Cookie手动设置

  2. 登录不更新会话ID:认证前后SessionID保持不变

  3. 无绑定验证:会话未与IP/User-Agent等绑定

2. 攻击场景与复现

(1) URL会话固定(PHP经典案例)
GET /login.php?sessionid=ATTACKER_SESSION_ID HTTP/1.1
Host: victim.com

--> 用户点击链接登录后,攻击者直接使用该sessionid访问
(2) Cookie注入(跨站Cookie设置)
// 恶意网站代码
document.cookie = "PHPSESSID=ATTACKER_SESSION_ID; domain=victim.com; path=/";
(3) 隐藏表单固定(ASP.NET ViewState)
<input type="hidden" name="__VIEWSTATE" value="ATTACKER_TOKEN">

3. 自动化检测工具

工具 功能 示例
Burp Suite 扫描Set-Cookie响应头 检测jsessionid等固定值
ZAP 主动修改会话参数测试 强制指定?sessionid=test
手工测试 对比登录前后Cookie 观察是否变化

4. 防御方案

(1) 代码层修复
// Java最佳实践 - 登录后重置会话
request.getSession().invalidate();
HttpSession newSession = request.getSession(true);
// PHP防御方案
session_regenerate_id(true); // 删除旧会话文件
(2) 架构层防护
方案 配置示例 作用
Cookie安全标记 Set-Cookie: JSESSIONID=xxx; HttpOnly; Secure; SameSite=Lax 防止JS读取和跨站传递
会话绑定 将SessionID与IP前24位、User-Agent哈希绑定 异常访问自动失效
短时效 session.cookie_lifetime=3600 减少攻击窗口
(3) 云WAF规则
{
  "rule": {
    "name": "Session-Fixation",
    "condition": {
      "type": "URI",
      "pattern": "\\?.*(sessionid|jsessionid)="
    },
    "action": "BLOCK"
  }
}

5. 历史漏洞案例

受影响系统 利用方式 后果
某银行系统 URL携带sessionid参数 账户完全接管
WordPress插件 认证后未更新wp-settings Cookie 管理员权限获取
政府OA系统 固定JWT的kid参数 伪造高权限令牌

6. 渗透测试流程

  1. 信息收集

    • 寻找jsessionidPHPSESSID等参数

    • 检查登录接口是否接受外部会话ID

  2. 漏洞验证

GET /login?sessionid=pen_test_123 HTTP/1.1
Host: target.com

--> 登录后检查是否仍使用原sessionid
  1. 漏洞利用

    • 社工诱导管理员点击固定链接

    • 结合XSS批量设置受害者Cookie

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容