DVWA靶场通关笔记-弱会话IDs(Weak Session IDs Medium级别)

目录

一、Session ID

二、代码审计(Medium级别)

1、配置security为Medium级别

2、源码分析

(1)index.php

(2)Medium.php

(3)对比分析

(4)渗透思路

三、渗透实战

1、点击生成会话ID

2、bp抓包分析

3、预测后续会话 ID


DVWA(Damn Vulnerable Web Application)中的 弱会话Weak Session IDs关卡是用于练习和演示弱会话ID的不同场景,不同安全等级存在不同的脆弱点和绕过方法,本小节对中等级别的关卡进行渗透实战。

一、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,具体如下所示。

二、代码审计(Medium级别)

1、配置security为Medium级别

进入到弱会话id关卡,完整URL地址具体如下所示。

http://192.168.59.1/dvwa/vulnerabilities/weak_id/

2、源码分析

(1)index.php

进入DVWA靶场源目录,找到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)Medium.php

进入DVWA靶场源目录,找到Medium.php源码。

打开源码medium.php,分析可知这段代码实现了一个简单的会话 ID 生成机制功能,如下所示。

代码的功能如下所示。

  • 当用户通过 POST 请求访问页面时。
  • 生成一个基于当前时间戳的会话 ID
  • 将该 ID 存储在名为dvwaSession Cookie 中。
  • 未设置 Cookie 的安全属性(如SecureHttpOnly

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

<?php
// 初始化HTML输出变量(用于存储页面内容)
$html = "";// 检查当前请求是否为POST方法(例如用户点击表单提交按钮)
if ($_SERVER['REQUEST_METHOD'] == "POST") {// 将会话ID设置为当前时间戳(以秒为单位)$cookie_value = time();// 设置名为"dvwaSession"的Cookie,值为当前时间戳// 默认有效期:浏览器关闭时失效// 默认路径:当前页面所在路径// 未设置Secure属性(允许HTTP传输)// 未设置HttpOnly属性(允许JavaScript访问)setcookie("dvwaSession", $cookie_value);
}
?>

(3)对比分析

low级别和Medium级别的区别如下所示。

对比项

Low级别

Medium级别

会话 ID 生成方式

基于会话计数器递增(初始值 0,每次请求 + 1

基于当前时间戳time()函数返回秒级时间戳

可预测性

高(攻击者可通过猜测递增规律预测会话 ID

中(短时间内可能重复,如同一秒内的请求)

唯一性

低(会话重置或服务器重启可能导致 ID 重复)

中(同一秒内的请求会生成相同 ID

安全性

低(会话固定攻击风险高,且 ID 易被枚举)

中(时间戳虽动态但粒度粗,仍有被预测风险)

(4)渗透思路

核心问题:具有弱会话 ID(Predictable Session ID)攻击可能性。

  • 会话 ID 可预测

    • 时间戳以秒为单位递增,攻击者可轻松计算未来 / 过去的会话 ID。
    • 示例:若当前时间戳为1630482000,攻击者可猜测下一个可能是1630482001。
  • 时间精度不足

    • 同一秒内的所有请求会生成相同的会话 ID,导致冲突。
    • 攻击者可通过并发请求碰撞有效会话。
  • 缺乏随机性

    • 完全依赖确定性的系统时间,无随机因子。
    • 攻击者无需破解,直接推算即可。
  • Cookie 安全缺失

    • 未设置Secure属性,Cookie 可通过 HTTP 明文传输。
    • 未设置HttpOnly属性,易受 XSS 攻击窃取。
    • 未设置有效期(默认会话 Cookie),用户关闭浏览器后需重新认证。

影响:攻击者可通过时间戳或枚举会话 ID 值,伪造合法用户会话,获取未授权访问权限。

三、渗透实战

1、点击生成会话ID

bp开启拦截功能,进入靶场的脆弱的session id关卡,点击生成会话id三次,如下所示。

2、bp抓包分析

第1个报文的session id为dvwaSession=1747368161,如下图所示。

1747368161 对应的 UTC 时间是 2024 12 16 13:22:41,可以通过如下函数进行转换,说明这个为时间戳转换,具体code如下所示。

from datetime import datetime
print(datetime.utcfromtimestamp(1747368161).strftime('%Y-%m-%d %H:%M:%S'))
# 输出:2024-12-16 13:22:41

2个报文的session iddvwaSession=17473683801747368380 对应的 UTC 时间是 2024 12 16 13:26:20),如下图所示。 

3、预测后续会话 ID

由于会话 ID 是简单通过时间戳转换,攻击者可通过如下方式进行预测。

  • 记录受害者登录时的时间戳(如1747368380
  • 预测后续会话 ID 范围(如17473683011747368360
  • 逐个尝试这些值,直到获取访问权限

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/88291.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/88291.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编辑器Vim的快速入门

如大家所了解的&#xff0c;Vim是一个很古老的编辑器&#xff0c;但是并没有随着时间的流逝消失在编辑器/IDE 的竞争中&#xff0c;Vim 独创的模式机制和 hjkl 移动光标方式使得使用者在编辑文件时可以双手不离开键盘&#xff0c;极大地提升了工作效率。由于 Vim 学习曲线极为陡…

深度学习核心:从基础到前沿的全面解析

&#x1f9e0; 深度学习核心&#xff1a;从基础到前沿的全面解析 &#x1f680; 探索深度学习的核心技术栈&#xff0c;从神经网络基础到最新的Transformer架构 &#x1f4cb; 目录 &#x1f52c; 神经网络基础&#xff1a;从感知机到多层网络&#x1f5bc;️ 卷积神经网络&am…

MySQL索引:数据库的超级目录

MySQL索引&#xff1a;数据库的「超级目录」 想象你有一本1000页的百科全书&#xff0c;要快速找到某个知识点&#xff08;如“光合作用”&#xff09;&#xff1a; ❌ 无索引&#xff1a;逐页翻找 → 全表扫描&#xff08;慢&#xff01;&#xff09;✅ 有索引&#xff1a;直接…

景观桥 涵洞 城门等遮挡物对汽车安全性的影响数学建模和计算方法,需要收集那些数据

对高速公路景观桥影响行车视距的安全问题进行数学建模&#xff0c;需要将物理几何、动力学、概率统计和交通流理论结合起来。以下是分步骤的建模思路和关键模型&#xff1a;一、 核心建模目标 量化视距&#xff08;Sight Distance, SD&#xff09;&#xff1a;计算实际可用视距…

Git 用户名和邮箱配置指南:全局与项目级设置

查看全局配置 git config --global user.name # 查看全局name配置 git config --global user.email # 查看全局email配置 git config --global --list # 查看所有全局配置查看当前项目配置 git config user.name # 查看当前项目name配置 git config user.email # 查看当前项目…

视频序列和射频信号多模态融合算法Fusion-Vital解读

视频序列和射频信号多模态融合算法Fusion-Vital解读概述模型整体流程视频帧时间差分归一化TSM模块视频序列特征融合模块跨模态特征融合模块概述 最近看了Fusion-Vital的视频-射频&#xff08;RGB-RF&#xff09;融合Transformer模型。记录一下&#xff0c;对于实际项目中的多模…

frp内网穿透下创建FTP(解决FTP“服务器回应不可路由的地址。使用服务器地址替代”错误)

使用宝塔面板&#xff0c;点击FTP&#xff0c;下载Pure-FTPd插件 点击Pure-FTPd插件&#xff0c;修改配置文件&#xff0c;找到PassivePortRange, 修改ftp被动端口范围为39000 39003&#xff0c;我们只需要4个被动端口即可&#xff0c;多了不好在内网穿透frp的配置文件中增加…

STM32控制四自由度机械臂(SG90舵机)(硬件篇)(简单易复刻)

1.前期硬件准备 2s锂电池一个&#xff08;用于供电&#xff09;&#xff0c;stm32f103c8t6最小系统板一个&#xff08;主控板&#xff09;&#xff0c;两个摇杆&#xff08;用于摇杆模式&#xff09;&#xff0c;四个电位器&#xff08;用于示教器模式&#xff09;&#xff0c…

华为OD机试_2025 B卷_最差产品奖(Python,100分)(附详细解题思路)

题目描述 A公司准备对他下面的N个产品评选最差奖&#xff0c; 评选的方式是首先对每个产品进行评分&#xff0c;然后根据评分区间计算相邻几个产品中最差的产品。 评选的标准是依次找到从当前产品开始前M个产品中最差的产品&#xff0c;请给出最差产品的评分序列。 输入描述 第…

飞算JavaAI:重塑Java开发效率的智能引擎

飞算JavaAI:重塑Java开发效率的智能引擎 一、飞算JavaAI核心价值 飞算JavaAI是全球首款专注Java语言的智能开发助手,由飞算数智科技(深圳)有限公司研发。它通过AI大模型技术实现: 全流程自动化:从需求分析→软件设计→代码生成一气呵成工程级代码输出:生成包含配置类、…

Java和Go各方面对比:现代编程语言的深度分析

Java和Go各方面对比&#xff1a;现代编程语言的深度分析 引言 在当今的软件开发领域&#xff0c;选择合适的编程语言对项目的成功至关重要。Java作为一门成熟的面向对象语言&#xff0c;已经在企业级开发中占据主导地位超过25年。而Go&#xff08;Golang&#xff09;作为Google…

CloudCanal:一款企业级实时数据同步、迁移工具

CloudCanal 是一款可视化的数据同步、迁移工具&#xff0c;可以帮助企业构建高质量数据管道&#xff0c;具备实时高效、精确互联、稳定可拓展、一站式、混合部署、复杂数据转换等优点。 应用场景 CloudCanal 可以帮助企业实现以下数据应用场景&#xff1a; 数据同步&#xff…

如何发现 Redis 中的 BigKey?

如何发现 Redis 中的 BigKey&#xff1f; Redis 因其出色的性能&#xff0c;常被用作缓存、消息队列和会话存储。然而&#xff0c;在 Redis 的使用过程中&#xff0c;BigKey 是一个不容忽视的问题。BigKey 指的是存储了大量数据或包含大量成员的键。它们不仅会占用大量内存&…

Golang读取ZIP压缩包并显示Gin静态html网站

Golang读取ZIP压缩包并显示Gin静态html网站Golang读取ZIP压缩包并显示Gin静态html网站1. 读取ZIP压缩包2. 解压并保存静态文件3. 设置Gin静态文件服务基本静态文件服务使用StaticFS更精细控制单个静态文件服务4. 完整实现示例5. 高级优化内存映射优化使用Gin-Static中间件6. 部…

参数列表分类法:基本参数与扩展参数的设计模式

摘要 本文提出了我设计的一种新的函数参数设计范式——参数列表分类法&#xff0c;将传统的"单一参数列表"扩展为"多参数列表协同"模式。通过引入"基本参数列表"和"扩展参数列表"的概念&#xff0c;为复杂对象构建提供了更灵活、更具表…

Ajax之核心语法详解

Ajax之核心语法详解一、Ajax的核心原理与优势1.1 什么是Ajax&#xff1f;1.2 Ajax的优势二、XMLHttpRequest&#xff1a;Ajax的核心对象2.1 XHR的基本使用流程2.2 核心属性与事件解析2.2.1 readyState&#xff1a;请求状态2.2.2 status&#xff1a;HTTP状态码2.2.3 响应数据属性…

ArcGIS 打开 nc 降雨量文件

1. 打开ArcToolbox&#xff0c;依次打开 多维工具 → 创建 NetCDF 栅格图层&#xff0c;将 nc 文件拖入 输入 NetCDF 文件输入框&#xff0c;确认 X维度&#xff08;经度&#xff09;、Y维度&#xff08;经度&#xff09; 的变量名是否正确&#xff0c;点击 确定。图 1 加载nc文…

01-elasticsearch-搭个简单的window服务-ik分词器-简单使用

1、elasticsearch下载地址 如果是其他版本可以尝试修改链接中的版本信息下载 https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.2-windows-x86_64.zip 2、ik分词器下载地址 ik分词器下载的所有版本地址&#xff1a;Index of: analysis-ik/stable/…

[数据结构与算法] 优先队列 | 最小堆 C++

下面是关于 C 中 std::priority_queue 的详细说明&#xff0c;包括初始化、用法和常见的应用场景。什么是 priority_queue&#xff1f; priority_queue&#xff08;优先队列&#xff09;是 C 标准库中的一个容器适配器。它和普通队列&#xff08;queue&#xff09;最大的不同在…

零基础入门物联网-远程门禁开关:硬件介绍

一、成品展示 远程门禁最终效果 二、项目介绍 整个项目主要是实际使用案例为主&#xff0c;根据自己日常生活中用到物联网作品为原型&#xff0c;通过项目实例快速理解。项目分为两部分&#xff1a;制作体验和深入学习。 制作体验部分 会提供所有项目资料及制作说明文档&a…