目录

一、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.pswp.cn/bicheng/95356.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95356.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/95356.shtml

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

相关文章

SyncBack 备份同步软件: 使用 FTPS、SFTP 和 HTTPS 安全加密传输文件

传输加密是使用安全连接在网络中传输数据&#xff08;例如文件&#xff09;的过程。TLS&#xff08;传输层安全&#xff09;、SSL&#xff08;安全套接字层&#xff09;、SSH&#xff08;安全套接字外壳&#xff09;、HTTPS&#xff08;基于 SSL/TLS 的超文本传输协议&#xff…

保健品跨境电商:如何筑牢产品质量与安全防线?

保健品跨境电商&#xff1a;如何筑牢产品质量与安全防线&#xff1f;在保健品跨境电商领域&#xff0c;“质量与安全”是消费者信任的基石&#xff0c;也是品牌长期发展的生命线。从海外工厂生产到国内消费者手中&#xff0c;产品需经历“跨国运输、清关核验、仓储配送”多环节…

手把手教你搭建 UDP 多人聊天室(附完整源码)

一、项目介绍 本文将分享一个基于 UDP 协议的简易多人聊天室项目&#xff0c;包含服务器端和客户端的完整实现。该聊天室支持多客户端同时连接&#xff0c;能实现消息群发、用户加入 / 退出通知等核心功能&#xff0c;适合作为网络编程入门实践案例。项目采用 C 语言开发…

Vue基础知识-使用监视属性watch和计算属性computed实现列表过滤+排序

一、完整源码<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><script src…

自动化运维-ansible中的管理机密

自动化运维-ansible中的管理机密 一、Ansible Vault 在自动化配置管理中&#xff0c;直接以纯文本形式存储密码、API密钥、证书等敏感信息是极大的安全漏洞。Ansible Vault 正是为了解决这一问题而设计的核心功能 Ansible Vault 是 Ansible 的一个核心功能&#xff0c;它允许用…

UFUNCTION C++ 的再次理解

一.UFUNCTION 格式和属性也比较像&#xff0c;两部分 函数说明符&#xff0c;和元数据说明符UFUNCTION不仅能 控制对蓝图公开&#xff0c;还能与 绑定委托&#xff0c;用户输入,网络回调功能相关联&#xff0c;而且还能创建自己控制带命令二.函数说明符控制 &#xff0c;函数在…

《论文阅读》从心到词:通过综合比喻语言和语义上下文信号产生同理心反应 2025 ACL findings

《论文阅读》从心到词:通过综合比喻语言和语义上下文信号产生同理心反应 2025 ACL findings 前言 创新点 形象语言 (Figurative Language) 语义上下文信号(Semantic Context Signals) 模型架构 情绪原因标注 形象语言元数据获取 共情回复生成 实验结果 总结 趋势 前言 亲…

MySQL内置的各种单行函数

精选专栏链接 &#x1f517; MySQL技术笔记专栏Redis技术笔记专栏大模型搭建专栏Python学习笔记专栏深度学习算法专栏 欢迎订阅&#xff0c;点赞&#xff0b;关注&#xff0c;每日精进1%&#xff0c;与百万开发者共攀技术珠峰 更多内容持续更新中&#xff01;希望能给大家带来…

Python OpenCV图像处理与深度学习:Python OpenCV视频处理入门

视频处理基础&#xff1a;掌握OpenCV视频操作 学习目标 通过本课程&#xff0c;学员们将学习如何使用Python和OpenCV库来处理视频文件&#xff0c;包括读取视频、捕获摄像头视频流、处理视频帧以及保存处理后的视频&#xff0c;同时&#xff0c;能够独立完成基本的视频处理任务…

AI 赋能 Java 开发效率:全流程痛点解决与实践案例(四)

文档与注释自动化&#xff1a;从 “手动撰写” 到 “实时同步”&#xff0c;降低维护成本 &#x1f4c4; Java 开发强调 “文档先行”&#xff0c;Javadoc 注释、架构文档、接口文档是项目维护的重要资产。但手动撰写文档存在两大痛点&#xff1a;一是耗时&#xff08;开发者平…

【机器学习学习笔记】pandas基础

零基础入门 Pandas&#xff1a;数据处理的 "万能工具"如果你是刚接触数据分析的小白&#xff0c;一定听过 "Pandas" 这个名字。简单说&#xff0c;Pandas 是 Python 中专门用来处理数据的工具库&#xff0c;就像 Excel 的 "高级版"—— 能更快、…

(Mysql)MVCC、Redo Log 与 Undo Log

1. MVCC&#xff08;多版本并发控制&#xff09;概念 MVCC&#xff08;Multi-Version Concurrency Control&#xff09;是一种数据库并发控制机制&#xff0c;用于解决 读写冲突&#xff0c;提高数据库并发性能。MySQL InnoDB 存储引擎使用 MVCC 来实现 非阻塞读&#xff08;即…

OpenCV-Python Tutorial : A Candy from Official Main Page(五)

4.5FAST Algorithm for Corner Detection 4.5.1FAST算法 我们已了解多种特征检测器&#xff0c;其中许多效果出色。但从实时应用的角度来看&#xff0c;它们的速度仍不够快。一个典型例子是计算资源有限的SLAM&#xff08;同步定位与建图&#xff09;移动机器人。 为解决此问…

LINUX 91 SHELL:删除空文件夹 计数

问题 [rootweb ~]# find -type f -exec echo "file:{}" $path; find: 遗漏“-exec”的参数 您在 /var/spool/mail/root 中有邮件[rootweb ~]# $path/root -bash: /root: 没有那个文件或目录 您在 /var/spool/mail/root 中有新邮件 [rootweb ~]# path/root [rootweb ~…

视频软解码技术详解:原理、应用与未来发展

视频软解码的基本原理 概念解析&#xff1a;CPU主导的通用解码方式 视频软解码是一种完全依赖通用CPU执行解码算法的视频还原技术&#xff0c;其核心特征在于不依赖任何专用硬件模块&#xff0c;而是通过软件程序调用CPU的通用计算能力完成压缩视频数据的解码过程[1][2]。与硬…

线性回归中梯度下降与正规方程以及拟合问题与正则化

线性回归实战指南&#xff1a;从理论到实践 目录 线性回归理论基础机器学习项目开发流程波士顿房价预测实战梯度下降与正规方程模型评估指标拟合问题与正则化总结与展望 1. 线性回归理论基础 1.1 什么是线性回归&#xff1f; 线性回归是一种监督学习算法&#xff0c;用于预…

为什么46.1k程序员都在用这个AI绘画神器?我体验一周后终于明白了

大家好&#xff0c;我是顾北&#xff0c;一名AI应用探索者&#xff0c;也是GitHub开源项目收集者。说起AI绘画这事儿&#xff0c;我之前真的是又爱又恨。上个月想给朋友搞张生日贺图&#xff0c;结果在Stable Diffusion WebUI里折腾了大半天。采样步数&#xff1f;CFG比例&…

Java基础第8天总结(map遍历、Stream流)

选中一部分代码&#xff0c;然后CTRLALTT&#xff0c;可以在外面套上while循环,try..catch之类的小案例&#xff1a;电影信息管理模块&#xff1a;用户可以上架、查询、下架、下架某个主演参演的电影package Demo;import lombok.AllArgsConstructor; import lombok.Data; impor…

总线矩阵的原理

总线矩阵&#xff08;Bus Matrix&#xff09;是多主设备共享多从设备的智能连接与仲裁核心&#xff0c;本质是一个“灵活的交叉开关阵列”&#xff0c;用于解决多个主设备&#xff08;如CPU、DMA、GPU&#xff09;同时访问多个从设备&#xff08;如内存、外设、存储芯片&#x…

硬件开发_基于Zigee组网的果园养殖监控系统

一.系统概述 果园环境监控系统功能如下&#xff1a; 核心控制器&#xff1a;以STM32为核心控制器&#xff0c;承担整体的数据采集、处理及控制任务。环境参数监测&#xff1a;集成温度传感器、CO₂传感器、光照传感器和土壤湿度传感器&#xff0c;可实时采集果园内的温度、二氧…