当前位置: 首页 > news >正文

DVWA靶场通关笔记-Weak Session IDs (Impossible级别)

目录

一、Session ID

二、源码分析

1、index.php

2、impossible.php

三、Weak Session IDs安全级别对比

四、impossible防范方法分析

1、高随机性会话 ID 生成

2、严格的 Cookie 作用域限制

3、安全的传输与存储控制期


本系列为通过《DVWA靶场通关笔记》的Weak Session IDs关卡(low,medium,high,impossible共4关)渗透集合,通过对相应关卡源码的代码审计找到讲解渗透原理并进行渗透实践。本文为Weak Session IDs impossible关卡的原理分析部分,讲解相对于low、medium和high级别,为何对其进行渗透测试是Impossible的。

一、Session ID

Session ID(会话 ID)是 Web 应用程序中用于标识用户会话的唯一标识符,是用户访问网站时的 “电子身份证”。会话id的核心作用和身份证类似,id用于区分不同的用户,核心作用如下所示。

  1. 区分用户会话:当用户访问网站时,服务器会为其创建一个会话(Session),并生成唯一的 Session ID,通过 Cookie 存储在用户浏览器或 URL 中。后续请求携带该 ID,服务器即可识别用户身份,保持会话状态(如登录状态、购物车数据等)。
  2. 跨请求状态保持:由于默认情况下HTTP应用层协议是无状态的,Session ID 让服务器能 “记住” 用户的操作,例如用户登录后,服务器通过 Session ID 关联其权限和数据。

Session ID(会话 ID)通常使用Cookie 存储:默认通过名为PHPSESSID(PHP)等的 Cookie 传输,浏览器自动携带。以DVWA的盲注关卡Impossible级别为例,使用bp抓包,如下报文的sesssion id使用PHPSESSID存储,值为tssqfshe2838kcg5nbkf4464u3,具体如下所示。

二、源码分析

1、index.php

进入DVWA靶场Weak Session IDs源目录,找到index.php源码。

这段 PHP 代码是 Damn Vulnerable Web Application (DVWA) “弱会话 ID 演示页面的核心逻辑,通过对比不同安全级别的实现方式,帮助开发者理解弱会话 ID 的风险和安全的会话管理实践。主要功能如下所示。

  • 安全级别控制:根据用户 Cookie 中存储的安全级别(低、中、高、安全),动态加载不同的会话 ID 生成算法实现文件,展示不同防护级别的会话管理场景。
  • 用户交互界面
    • 提供一个 “Generate” 按钮,每次点击时会触发会话 ID 的生成。
    • 页面说明文字提示用户每次点击按钮会设置一个名为 dvwaSession 的新 Cookie。
  • 会话 ID 生成演示:根据低、中、高、安全共4个级别演示会话id的生成。
  • 辅助功能
    • 提供帮助文档和源代码查看功能。
    • 根据不同安全级别显示相应的会话 ID 生成结果

经过注释后的详细代码如下所示。

<?php
// 定义网站根目录路径常量,用于后续文件引用
define( 'DVWA_WEB_PAGE_TO_ROOT', '../../' );
// 引入DVWA页面基础功能库
require_once DVWA_WEB_PAGE_TO_ROOT . 'dvwa/includes/dvwaPage.inc.php';// 启动页面,验证用户是否已认证并初始化PHPIDS(入侵检测系统)
dvwaPageStartup( array( 'authenticated', 'phpids' ) );// 创建新页面实例
$page = dvwaPageNewGrab();
// 设置页面标题,包含名称
$page[ 'title' ]   = 'Vulnerability: Weak Session IDs' . $page[ 'title_separator' ].$page[ 'title' ];
// 设置页面ID,用于导航和标识
$page[ 'page_id' ] = 'weak_id';
// 添加帮助按钮和源代码按钮
$page[ 'help_button' ]   = 'weak_id';
$page[ 'source_button' ] = 'weak_id';// 连接数据库
dvwaDatabaseConnect();// 设置HTTP请求方法(默认为GET)
$method            = 'GET';
// 配置不同级别对应的源文件
$vulnerabilityFile = '';// 根据安全级别Cookie值选择不同的实现文件
switch( $_COOKIE[ 'security' ] ) {case 'low':// 低安全级别:使用易预测的会话ID生成算法$vulnerabilityFile = 'low.php';break;case 'medium':// 中安全级别:部分增强的会话ID生成算法$vulnerabilityFile = 'medium.php';break;case 'high':// 高安全级别:进一步增强的会话ID生成算法$vulnerabilityFile = 'high.php';break;default:// 安全模式:使用安全的会话ID生成算法$vulnerabilityFile = 'impossible.php';$method = 'POST';break;
}// 引入选定的实现文件
require_once DVWA_WEB_PAGE_TO_ROOT . "vulnerabilities/weak_id/source/{$vulnerabilityFile}";// 构建页面主体内容,包含说明文字和生成会话ID的按钮
$page[ 'body' ] .= <<<EOF
<div class="body_padded"><h1>Vulnerability: Weak Session IDs</h1><p>This page will set a new cookie called dvwaSession each time the button is clicked.<br /></p><form method="post"><input type="submit" value="Generate" /></form>
$htmlEOF;/*
Maybe display this, don't think it is needed though
if (isset ($cookie_value)) {$page[ 'body' ] .= <<<EOFThe new cookie value is $cookie_value
EOF;
}
*/// 输出最终HTML页面
dvwaHtmlEcho( $page );?>

2、impossible.php

进入DVWA靶场Weak Session IDs的source源码目录,找到impossible.php源码,分析其为何能让这一关卡名为不可能实现Weak Session IDs渗透。

打开源码impossible.php,如下所示。

详细注释后的impossible.php源码如下所示,impossible.php 在接收 POST 请求时,通过 sha1 哈希处理随机数、时间戳与固定字符串的拼接结果生成高随机性会话 ID,设置为 dvwaSession cookie,限定 1 小时有效期、特定路径和域名,且仅 HTTPS 传输并禁止 JS 访问,实现安全会话管理。

<?php
// 初始化HTML输出变量
$html = "";
// 检查请求方法是否为POST
if ($_SERVER['REQUEST_METHOD'] == "POST") {// 生成会话ID:使用sha1哈希函数处理随机数、时间戳和固定字符串$cookie_value = sha1(mt_rand() . time() . "Impossible");// 设置名为dvwaSession的Cookiesetcookie("dvwaSession",       // Cookie名称$cookie_value,       // Cookie值(即会话ID)time() + 3600,       // 过期时间:当前时间+1小时"/vulnerabilities/weak_id/", // 作用路径$_SERVER['HTTP_HOST'], // 作用域名(当前主机)true,                // 仅通过HTTPS传输(Secure属性)true                 // 禁止JavaScript访问(HttpOnly属性));
}
?>
  • 会话 ID 生成

    • 当接收到 POST 请求时,生成不可预测的会话 ID(dvwaSession
    • 生成方式:通过mt_rand()(随机数)+ time()(当前时间戳)+ 固定字符串 "Impossible" 拼接后,再经sha1()哈希处理
  • 安全的 Cookie 设置

    • 限制作用路径:仅在/vulnerabilities/weak_id/路径下有效
    • 绑定当前域名:防止跨域访问
    • 强制 HTTPS 传输(secure属性为true
    • 启用 HttpOnly 保护:阻止客户端脚本(如 JavaScript)访问 Cookie,防范 XSS 攻击盗取会话
  • 防护目标

    • 通过高随机性的会话 ID 生成算法,彻底避免会话 ID 被预测或猜测
    • 借助 Cookie 的安全属性,增强会话标识的传输和存储安全性,符合 OWASP 会话管理最佳实践

三、Weak Session IDs安全级别对比

impossible级别相对于Low级别、Medium级别、High级别,四个级别的防范措施对比如下所示。

安全级别会话 ID 生成方式Cookie 设置细节安全性分析
Low基于会话变量last_session_id自增生成数字(如 1、2、3...)仅设置dvwaSession键值,无有效期、路径、域名限制,无安全属性完全可预测,无任何安全防护,极易被猜测
Medium使用当前时间戳(time())作为会话 ID仅设置dvwaSession键值,无有效期、路径、域名限制,无安全属性看似随机,但连续生成时存在时间规律,易被推测
High将自增会话变量last_session_id_highmd5哈希处理生成有效期 1 小时,限制路径/vulnerabilities/weak_id/和当前域名,未启用secureHttpOnly哈希增加复杂度,但源为可预测的递增数值,仍有被破解可能;缺少核心安全属性
Impossible拼接mt_rand()随机数、时间戳和固定字符串后经sha1哈希生成有效期 1 小时,限制路径/vulnerabilities/weak_id/和当前域名,启用secure(仅 HTTPS)和HttpOnly(禁止 JS 访问)高随机性,结合严格的 Cookie 安全属性,难以被预测或盗取,安全性极高

四、impossible防范方法分析

impossible.php 的功能是在接收到 POST 请求时,通过将随机数、当前时间戳和固定字符串 “Impossible” 拼接后经 sha1 哈希处理生成高随机性的会话 ID(dvwaSession),并设置该 Cookie,其有效期为 1 小时,限制作用路径为/vulnerabilities/weak_id/,绑定当前域名,且仅通过 HTTPS 传输并禁止 JavaScript 访问,以实现难以预测的安全会话管理。

防护机制作用场景核心目标
高随机性会话 ID 生成(mt_rand()随机数 + 时间戳 + 固定字符串拼接后经sha1哈希)生成会话标识时确保会话 ID 难以被预测或猜测,从源头杜绝通过 ID 推测入侵的可能
限制 Cookie 作用路径(/vulnerabilities/weak_id/Cookie 在服务器与客户端间传输及存储时限定 Cookie 仅在特定路径下生效,减少跨路径访问风险
绑定当前域名($_SERVER['HTTP_HOST']Cookie 作用域控制防止 Cookie 被其他域名访问,增强跨域安全性
设置有效期(1 小时,time()+3600会话生命周期管理避免会话长期有效导致的潜在风险,自动终止过期会话
启用secure属性(仅通过 HTTPS 传输)Cookie 传输过程中确保 Cookie 在加密通道中传输,防止传输过程中被窃听
启用HttpOnly属性(禁止 JavaScript 访问)客户端脚本环境中防范 XSS 攻击通过脚本盗取 Cookie,保护会话标识安全
仅响应 POST 请求生成会话 ID处理会话 ID 生成的请求时增加请求来源的验证门槛,减少非预期请求生成会话的风险

1、高随机性会话 ID 生成

通过mt_rand()生成随机数、time()获取当前时间戳,结合固定字符串 “Impossible” 拼接后,使用sha1()哈希算法生成会话 ID。随机数确保每次生成的值无规律,时间戳增加实时性差异,哈希处理进一步混淆原始数据,使 ID 难以被预测或逆向破解,从源头杜绝通过猜测会话 ID 进行攻击的可能,大幅提升会话标识的唯一性和不可预测性。

$cookie_value = sha1(mt_rand() . time() . "Impossible");

2、严格的 Cookie 作用域限制

/vulnerabilities/weak_id/限制 Cookie 仅在该路径下生效,$_SERVER['HTTP_HOST']绑定当前域名。这种限制确保 Cookie 不会被其他路径或域名的脚本访问,缩小了 Cookie 的作用范围,减少了跨路径、跨域的安全风险,防止恶意网站通过跨域请求获取或操纵会话 Cookie,增强了 Cookie 的访问控制安全性

setcookie(..., "/vulnerabilities/weak_id/", $_SERVER['HTTP_HOST'], ...);

3、安全的传输与存储控制期

time()+3600设置 Cookie 有效期为 1 小时,避免会话长期有效导致的风险;true(第一个)启用secure属性,强制 Cookie 仅通过 HTTPS 加密传输,防止传输过程中被窃听;true(第二个)启用HttpOnly属性,禁止 JavaScript 访问 Cookie,有效防范 XSS 攻击通过脚本盗取会话标识,从传输和客户端存储层面双重保护 Cookie 安全。

// weak_id/source/impossible.php 中的代码
setcookie("dvwaSession", $cookie_value, time()+3600, "/vulnerabilities/weak_id/", $_SERVER['HTTP_HOST'], true,  // secure属性(仅HTTPS传输)true   // HttpOnly属性(禁止JavaScript访问)
);
http://www.dtcms.com/a/361112.html

相关文章:

  • 【Flask】测试平台开发,实现全局邮件发送工具 第十二篇
  • 【SpringBoot】20 - SpringBoot中的Ajax和MyBatis究竟是什么?
  • 【lucene核心】impacts的由来
  • 【Web安全】CRLF注入攻击深度解析:原理、场景与安全测试防御指南
  • hive表不显示列注释column comment的问题解决
  • 【Proteus仿真】蜂鸣器控制系列仿真——蜂鸣器控制/蜂鸣器播放音乐/蜂鸣器播放多种音乐/蜂鸣器和LED组成报警装置
  • UE5 C++ 第三方动态库的使用
  • 【数据库】openGauss 6.0 单机自动化安装最佳实践
  • MTK-Android13-实现拷贝预置资源到vendor分区下
  • Java全栈学习笔记27
  • 深度解析条件编译:#ifdef与#ifndef的本质区别与应用实践
  • Dify中使用SearXNG
  • 子串:滑动窗口最大值
  • Macbook Air M4 笔记本 ChatTTS 初体验
  • 总线矩阵的原理
  • 番外篇 | YOLO-FireAD:通过注意力逆残差模块与双池化模块融合实现高精度火灾检测
  • GitHub CLI (gh) 全面指南:终端中的 GitHub 工作流革命
  • 前端页面性能优化
  • JavaScript 性能优化实战技术
  • 99、23种设计模式之组合模式(8/23)
  • Map + 函数式接口的策略模式
  • 控制系统仿真之PID校正-利用PID控制器、PID调节器实现(九)
  • Coze源码分析-工作空间-项目开发-后端源码
  • Python爬虫实战:研究 Lines, bars and markers 模块,构建电商平台数据采集和分析系统
  • 【软件开发工程师の校招秘籍】
  • nginx-realip问题解决方案
  • AI 智能体架构中的协议设计三部曲:MCP → A2A → AG-UI
  • 基于单片机宠物项圈/宠物防丢失设计
  • VMware pro16(许可证)+centos 7超详细安装教程
  • Go语言入门学习笔记