1. 漏洞核心原理
会话固定攻击 是一种利用服务端会话管理缺陷的攻击方式。攻击者预先设定受害者的会话ID,诱导用户使用该ID登录后,攻击者即可劫持已认证的会话。
攻击三要素:
-
会话ID可预测/可注入:如URL参数、Cookie手动设置
-
登录不更新会话ID:认证前后SessionID保持不变
-
无绑定验证:会话未与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. 渗透测试流程
-
信息收集:
-
寻找
jsessionid
、PHPSESSID
等参数 -
检查登录接口是否接受外部会话ID
-
-
漏洞验证:
GET /login?sessionid=pen_test_123 HTTP/1.1
Host: target.com
--> 登录后检查是否仍使用原sessionid
-
漏洞利用:
-
社工诱导管理员点击固定链接
-
结合XSS批量设置受害者Cookie
-
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容