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.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;可實時采集果園內的溫度、二氧…