DVWA Weak Session IDs High 的 Cookie dvwaSession 刷新不出来的原因是什么?

摘要:在做 DVWA 的 Weak Session IDs(会话 ID 安全性不足)High 难度实验时,发现了一个很奇怪的问题:按照正常流程点击 Generate 按钮,不管是用浏览器的开发者工具、Cookie 编辑插件,还是 HackBar,
DVWA Weak Session IDs High 难度踩坑记录:Cookie 为什么死活看不到? 发布时间: 2026-03-01 分类: Web 安全 / DVWA 实战 前言 在做 DVWA 的 Weak Session IDs(会话 ID 安全性不足)High 难度实验时,发现了一个很奇怪的问题:按照正常流程点击 Generate 按钮,不管是用浏览器的开发者工具、Cookie 编辑插件,还是 HackBar,都看不到 dvwaSession 这个 Cookie。 这不是操作问题,而是一个真实的 Bug,根源涉及到浏览器对 Cookie 规范的实现细节。本文记录完整排查过程,并深入解释背后的原因。 实验环境 DVWA(本地 phpStudy 搭建) 访问地址:http://dvwa:8564 难度:High 工具:Burp Suite、浏览器 F12 一、各难度 Session ID 生成方式 在分析问题之前,先了解 DVWA 各难度的实现方式: 难度 生成方式 安全问题 Low 数字递增(1、2、3...) 完全可预测,直接枚举 Medium Unix 时间戳 可根据时间推算 High MD5(递增数字) 看似随机,实则可预测 Impossible 真随机数 + 时间戳 + 盐值 安全 High 难度的核心源码如下: $_SESSION['last_session_id_high']++; $cookie_value = md5($_SESSION['last_session_id_high']); setcookie("dvwaSession", $cookie_value, time()+3600, "/vulnerabilities/weak_id/", $_SERVER['HTTP_HOST'], false, false); 逻辑很清晰:每次点击 Generate,将一个递增的数字做 MD5,结果作为 Cookie 写入浏览器。 理论上,访问几次后应该能看到类似这样的 Cookie: dvwaSession=c4ca4238a0b923820dcc509a6f75849b (MD5(1)) dvwaSession=c81e728d9d4c2f636f067f89cc14862c (MD5(2)) dvwaSession=eccbc87e4b5ce2fe28308fd9f2a7baf3 (MD5(3)) 但实际上浏览器里根本看不到这个 Cookie。 二、排查过程 步骤 1:确认功能是否正常运行 页面没有报错,看起来一切正常。 步骤 2:检查浏览器 Cookie 打开 F12 → Application → Cookies: 只能看到 PHPSESSID 和 security,dvwaSession 不见了。 步骤 3:换工具确认 分别尝试了: 浏览器自带开发者工具 Cookie Editor 插件 HackBar 结果一致,全都看不到 dvwaSession。 步骤 4:用 Burp Suite 抓包 在 BP 的 HTTP History 里找到 Generate 的请求,查看响应包: 响应包里能看到: Set-Cookie: dvwaSession=d3d9446802a44259755d38e6d163e820; expires=...; Max-Age=3600; path=/vulnerabilities/weak_id/; domain=dvwa:8564 服务器确实发送了 Set-Cookie,但浏览器就是不存! 步骤 5:定位问题 仔细看 Set-Cookie 的内容,发现问题所在: domain=dvwa:8564 domain 字段里包含了端口号。 三、根本原因:Cookie 规范不支持端口号 RFC 6265 的规定 Cookie 的行为由 RFC 6265 规范定义,其中明确指出: Cookie 的作用域由 domain、path、secure 属性决定,端口号不参与 Cookie 的作用域判断。 这意味着 Cookie 的 domain 字段设计上就不支持带端口号,这是一个历史遗留问题——Cookie 规范诞生于网站几乎都使用标准端口(80/443)的年代,端口的区分从未被纳入考虑。
阅读全文