Weak Session IDs 弱会话标识:全等级预测与会话劫持实操

📅 2026/7/18 2:13:48
Weak Session IDs 弱会话标识:全等级预测与会话劫持实操
Weak Session IDs 弱会话标识全等级预测与会话劫持实操前言1. 弱会话 ID 漏洞核心理论基础1.1 什么是 Session ID 会话标识1.2 弱会话 ID 漏洞本质1.3 弱会话 ID 的常见类型1.4 漏洞危害1.5 DVWA Weak Session IDs 模块说明2. DVWA Weak Session IDsLow2.1 漏洞页面与初步探测2.2 验证会话 ID 递增规律2.3 模拟受害者环境实施 Cookie 篡改劫持2.4 攻击效果说明2.5 源码分析3. DVWA Weak Session IDsMedium3.1 抓包观察 Cookie 规律3.2 漏洞原理分析3.3 实操攻击流程3.4 源码分析4. DVWA Weak Session IDsHigh4.1 抓包观察 Cookie 特征4.2 漏洞利用MD5 哈希 Cookie 劫持4.3 High 等级源码审计5. DVWA Weak Session IDsImpossible5.1 此处我们贴出源码5.2 核心安全改进彻底修复弱会话ID漏洞5.3 为什么无法爆破劫持5.4 四级难度完整对比汇总免责声明前言会话Session是 Web 应用维持用户身份状态的核心机制。用户登录后服务器会生成一个唯一的Session ID会话标识并下发给客户端后续所有请求只需携带这个 Session ID服务器就能识别出你是谁无需每次都重新输入账号密码。这套机制的安全性完全建立在一个前提之上——Session ID 必须是不可预测的。如果攻击者能够猜测、推算或枚举到合法用户的 Session ID就可以直接冒用该用户的身份访问系统这就是Weak Session IDs弱会话标识漏洞也常被称为会话预测Session Prediction或会话劫持Session Hijacking。在真实场景中弱会话 ID 的危害不容小觑攻击者无需破解密码只需拿到一个有效的 Session ID就能直接登录受害者的账号窃取数据、篡改信息、甚至执行管理员操作。许多早期的 Web 系统因使用自增数字、时间戳、简单哈希等可预测方式生成 Session ID导致大量账号被批量劫持。DVWA 的 Weak Session IDs 模块正是为了演示这一漏洞而设计。它在四个安全等级Low / Medium / High / Impossible中分别采用了不同强度的 Session ID 生成算法——从最原始的自增整数到时间戳、MD5 哈希再到真正安全的随机数方案。通过逐级分析和利用我们可以清晰地看到什么样的 Session ID 是危险的、为什么危险、以及如何防御。本文将从渗透测试的视角出发按照黑盒测试 → 源码审计 → 攻击复现 → 原理总结的思路逐级拆解每个等级的 Session ID 生成逻辑演示完整的预测与劫持过程并对比各级别之间的防护差异最终总结出安全的会话标识设计原则。前置知识阅读本文需要了解 HTTP Cookie 机制、Session 工作原理能够使用 Burp Suite 进行抓包和重放操作。实验环境建议使用本地搭建的 DVWA 靶场所有操作均仅限授权测试环境。1. 弱会话 ID 漏洞核心理论基础1.1 什么是 Session ID 会话标识Web 应用是无状态的 HTTP 协议为了识别用户身份、保持登录状态服务端会为每个登录用户生成一个唯一的会话标识Session ID存在用户浏览器的 Cookie 中。用户后续每次请求都会自动携带这个 Session ID服务端通过它识别当前是哪个用户、是否登录、拥有什么权限。常见名称PHPSESSID、JSESSIONID、sessionid、ASP.NET_SessionId等。1.2 弱会话 ID 漏洞本质Session ID 的安全核心在于必须足够随机、不可预测、唯一且无法被枚举。如果 Session ID 是自增数字、时间戳、简单哈希、或者有规律可推导攻击者就能预测/枚举到合法用户的 Session ID然后替换自己 Cookie 中的值直接冒充该用户登录系统也就是会话劫持。一句话总结Session ID 能被猜到/算到攻击者就能直接顶替你的身份。1.3 弱会话 ID 的常见类型漏洞类型原理说明示例自增数字型Session ID 是连续递增的数字猜下一个值极其简单1001、1002、1003时间戳型Session ID 基于当前时间生成可被精确预测1718600000Unix时间戳简单哈希型用时间戳/用户名/IP等做简单MD5/SHA1哈希可逆向推导md5(时间戳)固定前缀递增前缀固定后半段递增规律明显user_0001、user_0002可预测算法生成算法有规律掌握种子后可批量预测线性同余生成器1.4 漏洞危害会话劫持攻击者拿到合法 Session ID直接冒充用户登录拥有用户全部权限越权操作冒充管理员账号执行后台敏感操作数据窃取以用户身份查看、下载个人信息、订单、资金等敏感数据账号接管结合改密接口直接修改用户密码永久接管账号1.5 DVWA Weak Session IDs 模块说明DVWA 的 Weak Session IDs 模块以「生成 Session ID」为核心场景演示了四种不同强度的会话标识生成逻辑。四个安全等级分别对应不同程度的弱会话缺陷Low纯自增数字一眼看穿规律直接预测下一个值Medium基于时间戳生成可被精确预测High用 MD5 哈希包装但哈希源仍是时间戳可逆向推导Impossible使用强随机数生成不可预测无法爆破劫持接下来从 Low 级别开始逐级抓包验证规律、复现会话劫持、源码审计生成逻辑完整拆解弱会话 ID 漏洞的利用与防御。2. DVWA Weak Session IDsLow2.1 漏洞页面与初步探测进入 DVWA 靶场将安全等级调至 Low左侧导航栏选择 Weak Session IDs来到弱会话 ID 漏洞实验页面。页面只有一个 Generate 按钮官方描述为每次点击按钮都会生成一个名为dvwaSession的新 Cookie。开启 Burp Suite 抓包点击页面上的 Generate 按钮拦截到 POST 请求。在请求头的 Cookie 字段中可以看到dvwaSession1这是我们第一次点击生成的会话 ID 值。2.2 验证会话 ID 递增规律再次点击 Generate 按钮继续抓包观察 Cookie 变化。可以看到dvwaSession的值从 1 变成了 2数值精确地递增了 1。多次点击后规律一致每点击一次 GeneratedvwaSession 的值就 1。这说明该网站使用连续递增的整数作为会话标识符属于典型的弱会话 ID 漏洞 —— 会话 ID 完全可预测攻击者只需遍历数字就能枚举所有有效会话。最终我们得到Cookie:dvwaSession4;PHPSESSIDg2t1t66dut1vvm0vs01a0kdnp6;securitylow将这个复制下来2.3 模拟受害者环境实施 Cookie 篡改劫持打开全新浏览器访问靶场地址 http://dvwa:9001/vulnerabilities/weak_id/模拟受害者独立访问环境。初始访问页面时抓包请求 Cookie 仅携带登录会话PHPSESSID与安全等级securitylow不存在dvwaSession字段。此时我们将第八行那一栏改成Cookie:dvwaSession5;PHPSESSIDg2t1t66dut1vvm0vs01a0kdnp6;securitylow然后forward发送就可以看到结果了在新的浏览器上我们没有输入账号密码成功登录上去了2.4 攻击效果说明修改 Cookie 后放行请求 / 刷新页面服务器仅依靠dvwaSession区分用户身份无额外校验攻击者直接冒用受害者会话无需账号密码完成会话劫持。漏洞总结Low 级别后端使用自增数字作为会话标识ID 具备极强可预测性攻击者只需枚举递增数字、篡改 Cookie 值即可接管任意在线用户会话存在严重身份越权风险。2.5 源码分析?php$html;if($_SERVER[REQUEST_METHOD]POST){if(!isset($_SESSION[last_session_id])){$_SESSION[last_session_id]0;}$_SESSION[last_session_id];$cookie_value$_SESSION[last_session_id];setcookie(dvwaSession,$cookie_value);}?代码漏洞点拆解会话 ID 可预测使用简单自增整数作为身份凭证每次点击固定 1攻击者可批量遍历数字猜取他人会话。Cookie 缺少安全防护配置setcookie仅传入名称与值未设置过期时间、路径域名限制、Secure、HttpOnly标识无 HttpOnlyXSS 漏洞可直接 JS 读取 Cookie 窃取会话无 SecureHTTP 明文传输 Cookie抓包即可劫持计数器绑定当前 PHP 会话每个登录用户独立维护一套递增数字互不干扰更换浏览器 / 无痕窗口会重新从 1 开始计数方便分用户枚举测试。漏洞成因总结低难度模块未使用加密安全随机串生成会话令牌采用可预测有序数字同时 Cookie 无任何安全加固最终导致会话劫持高危漏洞。3. DVWA Weak Session IDsMedium3.1 抓包观察 Cookie 规律将 DVWA 安全等级切换为 Medium进入弱会话 ID 页面开启 Burp Suite 抓包多次点击页面Generate按钮观察dvwaSession数值变化。首次抓包可见 Cookie 内dvwaSession为一串 10 位长数字对比 Low 简单递增数字视觉上更像随机数。多次点击按钮再次抓包观察多组 Cookie 数值对比多组数字可以发现数值会随时间持续增大间隔固定特征完全符合Unix 秒级时间戳可以确认后端使用服务器时间戳作为会话 ID。3.2 漏洞原理分析PHP 内置time()函数会返回从 1970-01-01 至今的总秒数每秒自动 1因此每次点击 Generate 都会生成全新递增时间戳作为 Cookie 值。看似比 Low 级别的自增数字更难猜但时间戳具备严格线性递增规律仍属于可预测弱会话 ID。3.3 实操攻击流程攻击者自行点击 Generate获取当前时间戳dvwaSession17xxxxxxxxx确定大致时间区间预判受害者操作页面的时间范围批量生成前后区间的时间戳在请求头 Cookie 中遍历修改dvwaSession值其余字段PHPSESSID、securitymedium保持不变若遍历到受害者当时生成的时间戳服务器直接识别为受害者身份完成会话劫持。3.4 源码分析?php$html;if($_SERVER[REQUEST_METHOD]POST){$cookie_valuetime();setcookie(dvwaSession,$cookie_value);}?代码缺陷会话 ID 可预测time () 生成单调递增时间戳攻击者划定时间区间即可批量爆破Cookie 缺少安全配置仅传入名称与值未设置HttpOnly、Secure、有效期、路径限制存在 XSS 窃取、明文抓包劫持风险。4. DVWA Weak Session IDsHigh4.1 抓包观察 Cookie 特征切换安全等级为 High进入弱会话 ID 页面多次点击Generate按钮抓包分析。观察请求包 Cookie 字段dvwaSession是一串 32 位随机字符串仅从请求头无法判断生成规则。切换至响应面板查看Set-Cookie字段每次点击 Generate 都会下发全新 32 位字符串格式完全符合 MD5 哈希值特征。多组响应包对比第一次响应dvwaSession1679091c5a880fa76fb526087eb1b2dc第二次响应dvwaSessionc9cf01895fb98ab9159f51fd0297e236d第三次响应dvwaSessiond3d9446802a44259755d38e6d163e820第四次响应dvwaSessionc20ad4d76fe97759aa27a0a99bff6710注意到相应的Set-Cookie有点像md5我们去测测https://www.cmd5.com/default.aspx将以上字符串放入 MD5 解密网站反向查询可解密得到底层数字1679091c5a880fa76fb526087eb1b2dc → MD5(6)c9cf01895fb98ab9159f51fd0297e236d → MD5(8)d3d9446802a44259755d38e6d163e820 → MD5(10)c20ad4d76fe97759aa27a0a99bff6710 → MD5(12)验证规律后端底层依旧是连续自增整数仅对数字做 MD5 加密后存入 Cookie这里我测试时只出现偶数6、8、10、12是因为抓包时将请求 Send to Repeater 后点击 Forward 放行服务器连续收到 2 次 POST计数器一次性 2跳过了奇数。4.2 漏洞利用MD5 哈希 Cookie 劫持已知底层数字可预测我们预先计算目标数字14对应的 MD5 值aab3238922bcc25a6f606eb525ffdc56。构造完整 Cookie 头Cookie:dvwaSessionaab3238922bcc25a6f606eb525ffdc56;PHPSESSIDg2t1t66dut1vvm0vs01a0kdnp6;securitylow放行请求刷新页面页面成功识别该会话完成会话劫持无需账号密码。4.3 High 等级源码审计?php$html;if($_SERVER[REQUEST_METHOD]POST){if(!isset($_SESSION[last_session_id_high])){$_SESSION[last_session_id_high]0;}$_SESSION[last_session_id_high];$cookie_valuemd5($_SESSION[last_session_id_high]);setcookie(dvwaSession,$cookie_value,time()3600,/vulnerabilities/weak_id/,$_SERVER[HTTP_HOST],false,false);}?代码漏洞分析底层 ID 仍可预测只是对自增数字做 MD5 哈希伪装原始序列 1、2、3、4…… 完全有序攻击者可预生成数字 - MD5 映射字典爆破Cookie 安全配置缺失Securefalse、HttpOnlyfalse存在 XSS 窃取、HTTP 明文抓包劫持风险仅增加外层加密未修复核心缺陷和 Low、Medium 本质漏洞一致会话 ID 具备可预测性仅提升了少量爆破成本无法防御会话劫持。5. DVWA Weak Session IDsImpossible5.1 此处我们贴出源码?php$html;if($_SERVER[REQUEST_METHOD]POST){$cookie_valuebin2hex(random_bytes(20));setcookie(dvwaSession,$cookie_value,time()3600,/vulnerabilities/weak_id/,$_SERVER[HTTP_HOST],true,true);}?5.2 核心安全改进彻底修复弱会话ID漏洞会话ID使用密码学安全随机数random_bytes(20)PHP加密安全随机函数由系统底层熵源生成无任何递增、时序规律不存在可预测序列bin2hex()将20字节随机二进制转为40位十六进制字符串总熵值极高暴力枚举完全不现实Low/Medium/High 底层都存在有序数字序列只是外层包装不同而Impossible完全抛弃有序计数器从根源杜绝预测。Cookie全套安全防护参数Securetrue仅HTTPS加密通道传输CookieHTTP明文抓包无法窃取HttpOnlytrue前端JS无法通过document.cookie读取dvwaSession网站存在XSS漏洞也偷不到会话限定路径/vulnerabilities/weak_id/、绑定域名缩小Cookie生效范围降低泄露风险设置1小时有效期缩短会话存活周期减少劫持窗口。5.3 为什么无法爆破劫持无固定递增序列每一次点击Generate生成的字符串完全无关联不存在可枚举的字典40位十六进制随机串组合数量达到16^40现有算力不可能暴力遍历多重Cookie防护加持就算泄露少量数据包也无法利用会话。5.4 四级难度完整对比汇总等级ID生成逻辑是否可预测攻击方式Cookie安全配置Low页面自增数字 1,2,3…极易预测手动改数字劫持无任何防护Medium服务器秒级时间戳time()易预测小范围手动枚举无任何防护High自增数字MD5哈希可预测Burp批量爆破MD5字典仅限制路径Secure/HttpOnly关闭Impossiblerandom_bytes(20)真随机串完全不可预测无法爆破劫持SecureHttpOnly路径域名限制全开启免责声明本文所有内容仅用于网络安全技术研究与教学演示所有测试均在本地授权搭建的 DVWA 靶场环境中进行旨在帮助读者理解漏洞原理与防御机制。请勿将本文涉及的技术与方法用于任何未经授权的真实系统测试。任何利用本文内容进行的非法攻击行为均与作者无关由使用者自行承担相应法律责任。网络安全学习请严格遵守《中华人民共和国网络安全法》及相关法律法规仅在获得明确书面授权的前提下开展安全测试。