DVWA靶場通關筆記-CSRF(High級別)

目錄

一、CSRF Token

二、代碼審計(High級別)

1、滲透準備

2、源碼分析

三、滲透實戰

1、滲透準備

2、修改URL重放失敗

3、burpsuite嘗試重放失敗

4、安裝CSRF Token Tracker

5、安裝logger插件

6、配置CSRF Token Tracker

7、bp再次重放報文

8、查看CSRF Token Tracker效果


本系列為通過《DVWA靶場通關筆記》的CSRF關卡(low,medium,high,impossible共4關)滲透集合,通過對相應關卡源碼的代碼審計找到講解滲透原理并進行滲透實踐,本文為跨站請求偽造CSRF High關卡的滲透部分。

一、CSRF Token

CSRF(Cross-Site Request Forgery,跨站請求偽造)Token 是一種安全機制,用于防止惡意網站利用用戶已認證的會話來執行未經授權的操作,核心原理如下所示。

  • 服務器為每個會話或表單生成唯一的隨機令牌(Token)。

  • 令牌嵌入表單或HTTP請求頭中。

  • 服務器在處理請求時驗證令牌的有效性。

  • 令牌通常是一次性的或有時效性。

即使攻擊者誘使用戶訪問惡意頁面,由于無法獲取有效Token,偽造的請求會被服務器拒絕。這種機制有效阻斷了CSRF攻擊鏈,是目前最可靠的CSRF防護方案之一。

二、代碼審計(High級別)

1、滲透準備

配置security為中等High級別,如下圖所示。

進入到CSRF關卡High頁面,發現這是一個修改密碼的頁面,與Low關卡相似,沒有確認舊密碼的輸入框,只有新密碼和確認新密碼的輸入框,具體如下所示。

http://127.0.0.1/DVWA/vulnerabilities/csrf/

2、源碼分析

進入DVWA靶場源目錄,找到High.php源碼,如下所示。

打開源碼High.php,分析可知這段代碼實現了一個不安全的密碼修改功能:該代碼實現了用戶密碼修改的功能。當檢測到Change參數存在時,先驗證防 CSRF 令牌的有效性。若令牌驗證通過,獲取用戶輸入的新密碼和確認密碼,檢查兩者是否匹配。若匹配,對新密碼進行轉義及哈希處理,構建 SQL 語句更新數據庫中當前用戶的密碼,并向用戶反饋密碼修改成功;若不匹配,則反饋密碼不一致的信息。最后關閉數據庫連接,并生成新的防 CSRF 令牌。它通過以下步驟實現:

  1. 檢查請求參數:通過 isset($_GET['Change']) 檢查是否存在名為 Change 的 GET 參數,以確定是否處理密碼更改請求。
  2. 驗證 Anti-CSRF 令牌:調用 checkToken 函數,驗證用戶提交的 CSRF 令牌是否與會話中的令牌一致,防止 CSRF 攻擊。
  3. 獲取用戶輸入:從 $_GET 中獲取用戶輸入的新密碼和確認密碼。
  4. 驗證密碼一致性:檢查新密碼和確認密碼是否一致。
  5. 轉義和加密密碼:對新密碼進行轉義處理,防止 SQL 注入,然后使用 MD5 加密。
  6. 更新數據庫:將加密后的密碼更新到數據庫中。
  7. 反饋用戶:根據操作結果,給用戶相應的提示信息。
  8. 生成新的 CSRF 令牌:調用 generateSessionToken 函數,生成新的 CSRF 令牌,用于后續的表單提交。

本關卡相對于low級別增加了token驗證,相對于medium級別則是缺少refer字段校驗但是增加了token驗證。CSRF 令牌驗證是指使用checkToken函數驗證請求中的user_token與會話中的session_token是否匹配。這要求攻擊者必須獲取用戶的有效令牌,而這在跨站請求中是無法實現的。本關卡也實現了令牌刷新機制,在每次請求后調用generateSessionToken()生成新的令牌,確保每個令牌只能使用一次,增強了安全性。詳細注釋后的代碼如下所示

<?php
if( isset( $_GET[ 'Change' ] ) ) {// 檢查Change參數是否存在,確認用戶提交了密碼修改請求// 驗證CSRF令牌:檢查請求中的user_token與會話中的session_token是否匹配// 第三個參數是驗證失敗時的跳轉頁面checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );// 從GET參數獲取新密碼和確認密碼$pass_new  = $_GET[ 'password_new' ];$pass_conf = $_GET[ 'password_conf' ];// 驗證兩次輸入的密碼是否一致if( $pass_new == $pass_conf ) {// 密碼匹配,準備更新數據庫// 使用mysqli_real_escape_string防止SQL注入// 注意:此函數僅對字符串中的特殊字符進行轉義$pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass_new ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));// 使用md5哈希密碼(注意:md5已不安全,建議使用更安全的哈希算法如password_hash)$pass_new = md5( $pass_new );// 構建SQL查詢更新用戶密碼// dvwaCurrentUser()函數獲取當前用戶名$insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";// 執行SQL查詢并處理可能的錯誤$result = mysqli_query($GLOBALS["___mysqli_ston"],  $insert ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );// 顯示密碼修改成功的消息$html .= "<pre>Password Changed.</pre>";}else {// 密碼不匹配,顯示錯誤消息$html .= "<pre>Passwords did not match.</pre>";}// 關閉數據庫連接((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}
// 生成新的CSRF令牌并存儲在會話中
// 用于下次請求時驗證
generateSessionToken();
?>

三、滲透實戰

1、滲透準備

進入DVWA靶場的CSRF關卡High級別,將密碼改為admin,如下所示。

bp開啟攔截功能,點擊change后,頁面URL變為如下所示,包含剛剛修改的密碼和確認密碼值,還包含了一個新的參數token值,這與我們之前代碼分析一致,本關卡還會驗證token值。

http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=mooyuan&password_conf=mooyuan&Change=Change&user_token=a6257416ef53bed0a1d1ad062a1d0465#

同時頁面信息也發生改變提示修改密碼成功(Password changed),如下圖紅框所示。

bp攔截報文后,在http history中找到這個報文,計劃右鍵將報文發送到repeater模塊,具體的效果如下所示。

將報文發送到repeater模塊,嘗試是否可以進行CSRF攻擊偽造,具體效果如下所示。

2、修改URL重放失敗

修改URL參數的密碼,將新密碼和確認密碼均修改為000000,完整的URL如下所示。

http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=000000&password_conf=000000&Change=Change&user_token=a6257416ef53bed0a1d1ad062a1d0465#

將URL輸入到hackbar的地址欄中并點擊執行后修改密碼失敗,提示“CSRF token is incorrect”,如下所示。

這是因為使用token驗證后,此時token發生變化校驗token失敗導致。

3burpsuite嘗試重放失敗

由于在地址欄直接修改失敗,我們使用bp的CSRF token Tracer來嘗試滲透。為了對比CSRF token Tracer的效果,首先展示沒有使用CSRF token Tracer的情況下修改密碼效果。

在第一步的bp repeater中修改密碼,將GET參數中的新密碼和確認密碼均修改為000000,修改后GET部分內容如下所示。

GET /dvwa/vulnerabilities/csrf/?password_new=000000&password_conf=000000&Change=Change&user_token=a6257416ef53bed0a1d1ad062a1d0465 HTTP/1.1

如下所示,這次http返回的狀態值為302,HTTP/1.1 302 Moved Temporarily。故而點擊follow redirection如下圖左上角的紅框所示。

點擊follow redirection后,重定向返回結果為CSRF token is incorrect,具體如下所示。

4、安裝CSRF Token Tracker

Burp Suite BApp Store 中直接安裝 CSRF Token Tracker 插件,如下所示。

CSRF Token Tracker 是一款用于滲透測試的 Burp Suite 插件,主要用于自動獲取和更新 CSRF Token,從而繞過網站的 CSRF 防護機制。CSRF Token 是一種常見的防御機制,通過在每個請求中添加一個唯一的令牌來驗證請求的合法性。CSRF Token Tracker的主要功能如下所示。

  1. 自動獲取 CSRF Token:插件能夠自動從服務器響應中提取 CSRF Token,并將其添加到后續的請求中。
  2. 自動更新 Token:在多次請求中,Token 會自動更新,確保每次請求都使用最新的 Token。
  3. 繞過 CSRF 防護:通過自動處理 Token,該插件可以幫助測試人員繞過網站的 CSRF 防護,進行諸如暴力破解、數據包重放等測試。

5、安裝logger插件

Logger++ 是 Burp Suite 中一款功能強大的日志記錄和分析插件,提供了比 Burp 自帶日志更強大的記錄、過濾和搜索功能,可以記錄所有經過 Burp 的 HTTP/HTTPS 流量,為查看repeater修改密碼后的報文,安裝logger插件,效果如下所示。

6、配置CSRF Token Tracker

當前訪問host為127.0.0.1,token參數名為user_token,把包中的user_token值復制到CSRF Token Tracker中實現自動識別token值。特別注意 sync requests based on the following rules部分的勾要選上,如下所示。

7bp再次重放報文

再次重放3.3部分的報文,為確保是csrf-token tracer自動獲取到token值,配置完成后,第一次重放需要點擊兩次send,第二次即可修改成功。在Logger中找到這個報文,查看token如下所示。

8、查看CSRF Token Tracker效果

查看CSRF Token Tracker自動識別到的user_token值,之后每次提交的重放都會自動識別并填充token值來實現繞過的目的。如下所示,user_token 已經更改為最新的token值。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/912927.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/912927.shtml
英文地址,請注明出處:http://en.pswp.cn/news/912927.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis實戰:數據安全與性能保障

數據安全 持久化策略 RDB持久化&#xff1a;通過創建快照將內存中的數據寫入到磁盤上的RDB文件中。可以在配置文件中設置save參數來指定在多少秒內有多少次寫操作時觸發快照保存。例如&#xff0c;save 900 1表示900秒內至少有1次寫操作時保存快照。 AOF持久化&#xff1a;將每…

人臉活體識別3:C/C++實現實時眨眼、張嘴、點頭、搖頭檢測

> 當AI能識破照片與真人的區別,我們才真正跨入生物識別安全時代 --- ### 一、活體檢測:數字世界的守門人 **傳統人臉識別的致命缺陷**: - 高清照片欺騙成功率 > 85% - 視頻回放攻擊成本 < $50 - 3D面具破解率高達72% **我們的解決方案**: ```mermaid graph …

【Linux】AlmaLinux 無法使用root用戶登錄cockpit控制臺問題解決

在虛擬機安裝AlmaLinux 9.6&#xff0c;安裝過程中需要允許使用root用戶和SSH協議登錄服務器。但是&#xff0c;在使用root用戶登錄cockpit管理后臺時&#xff0c;系統提示“權限被拒絕”。 經過查詢資料&#xff0c;可以通過下面的方法來解決此問題。 編輯 /etc/cockpit/disa…

【Java面試】講講HashMap的常用方法,以及底層實現?

1. 底層數據結構 數組鏈表紅黑樹&#xff08;JDK 1.8&#xff09;&#xff1a; 數組&#xff08;Node[] table&#xff09;存儲桶&#xff08;bucket&#xff09;&#xff0c;每個桶是鏈表或紅黑樹的頭節點。鏈表解決哈希沖突&#xff0c;當鏈表長度 ≥ 8 且數組容量 ≥ 64 時…

ToT:思維樹:借助大語言模型進行審慎的問題求解

摘要 語言模型正日益被部署于廣泛任務中的通用問題求解&#xff0c;但在推理階段仍受限于 token 級、從左到右的決策過程。這意味著在需要探索、戰略前瞻&#xff0c;或初始決策起關鍵作用的任務中&#xff0c;語言模型可能表現不佳。為克服這些挑戰&#xff0c;我們提出了一種…

Web3 + RWA 餐飲數字化解決方案白皮書(試點版)

一、背景&#xff1a;從“用戶”到“共創股東”&#xff0c;重構本地生活新邏輯 ? 項目愿景&#xff1a; “用一頓飯&#xff0c;鏈接一個社群&#xff1b;用一次消費&#xff0c;綁定一份權益”。 傳統商業以“交易”為中心&#xff0c;未來商業則以“關系 價值流轉”為核…

MCU的模擬輸入ADC引腳如何實現采樣時間與阻抗匹配

在MCU的模擬輸入ADC引腳中&#xff0c;實現采樣時間與阻抗匹配是關鍵的設計環節&#xff0c;直接影響采樣精度。以下是分步說明&#xff1a; 【】理解信號源阻抗與采樣時間的關系 ? 信號源阻抗&#xff08;Rs&#xff09;&#xff1a;外部信號源的輸出阻抗&#xff08;如傳感器…

等價矩陣 線性代數

所謂等價矩陣&#xff0c;就是說其秩相同的矩陣。 例題 A和B等價就是求A和B的秩&#xff0c;其實就是要求B的秩了&#xff0c;因為目標已經告訴你了A和B的秩是一樣的。那么怎么求B的秩呢&#xff1f;我們現在只有一種方法求其秩&#xff0c;就是通過把其經過初等變換之后符合標…

30.設計模式的優缺點

原文地址:設計模式的優缺點 更多內容請關注&#xff1a;智想天開 一、設計模式的優點 1. 提高代碼復用性與可維護性 復用性&#xff1a; 設計模式提供的是抽象的解決方案&#xff0c;可以在多個項目中重復應用&#xff0c;避免重復造輪子。例如&#xff0c;工廠模式封裝了對象…

Python 爬蟲實戰 | 國家醫保

一、國家醫保 1、目標網站 網址&#xff1a;https://fuwu.nhsa.gov.cn/nationalHallSt/#/search/drug-directory目標數據&#xff1a;獲取藥品信息 2、網站特點 服務端返回加密數據&#xff0c;客戶端發送請求攜帶的載荷也是加密的 3、定位解密入口 可以通過關鍵字encDa…

OpenCV CUDA模塊設備層----計算向量的平方根函數sqrt

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 OpenCV 的 CUDA 設備函數&#xff08;device function&#xff09;&#xff0c;用于在 GPU 上計算一個 uchar4 類型向量的平方根&#xff0c;并返…

鴻蒙應用開發:HTTP訪問網絡

一、HTTP概述 在許多場景下&#xff0c;我們的應用需要從服務端獲取數據&#xff0c;例如&#xff0c;天氣應用需要從天氣服務器獲取天氣數據。新聞應用需要從新聞服務器獲取最新的新聞咨詢&#xff0c;通過HTTP數據請求&#xff0c;我們可以將互聯網上的信息展示在應用中&…

【Elasticsearch】refresh與提交

在Elasticsearch中&#xff0c;Translog日志的提交確實涉及到與刷新&#xff08;Refresh&#xff09;時寫入Lucene段的數據進行合并&#xff0c;并最終寫入磁盤。以下是詳細的步驟和解釋&#xff1a; 一、Translog日志的提交過程 1. 刷新&#xff08;Refresh&#xff09;操作 …

服務器異常宕機或重啟導致 RabbitMQ 啟動失敗問題分析與解決方案

服務器異常宕機或重啟導致 RabbitMQ 啟動失敗問題分析與解決方案 一、深度故障診斷與解決方案1. 權限配置不當故障2. 端口占用故障3. 數據目錄殘留故障 二、故障類型對比與診斷矩陣三、完整恢復流程&#xff08;10步法&#xff09;四、風險規避與最佳實踐&#x1f6e1;? 數據保…

車載以太網都有什么協議?

目錄 一、物理層協議(Physical Layer)二、數據鏈路層協議(Data Link Layer)三、網絡層協議(Network Layer)四、傳輸層協議(Transport Layer)五、應用層協議(Application Layer)六、車載網絡融合協議七、標準化組織八、協議分層總結表九、趨勢與未來協議車載以太網涉及…

設計模式之外觀模式:簡化復雜系統的優雅之道

設計模式之外觀模式&#xff1a;簡化復雜系統的優雅之道 今天我們來深入探討設計模式中的外觀模式&#xff08;Facade Pattern&#xff09;。想象一下&#xff0c;你走進一家高檔餐廳&#xff0c;只需要告訴服務員"我要一份A套餐"&#xff0c;而不需要關心廚房里廚師…

《Python 架構之美:三大設計模式實戰指南》

《Python 架構之美:三大設計模式實戰指南》 在軟件世界中,設計模式是經驗的結晶,它為開發者提供了解決重復問題的通用模板。尤其在 Python 這種靈活而強大的語言中,設計模式并非“死規矩”,而更像“編程哲學”,為我們解構復雜系統、提升代碼可維護性提供了寶貴思路。 本…

力扣打卡第十八天 判定平衡二叉樹

110. 平衡二叉樹 給定一個二叉樹&#xff0c;判斷它是否是 平衡二叉樹 示例 1&#xff1a; 輸入&#xff1a;root [3,9,20,null,null,15,7] 輸出&#xff1a;true示例 2&#xff1a; 輸入&#xff1a;root [1,2,2,3,3,null,null,4,4] 輸出&#xff1a;false示例 3&#xf…

Python 物聯網(IoT)與邊緣計算開發實戰(1)

Python 物聯網(IoT)與邊緣計算開發實戰 https://www.python.org/static/community_logos/python-logo-master-v3-TM.png 物聯網基礎與硬件交互 Raspberry Pi GPIO控制 python import RPi.GPIO as GPIO import time # 設置GPIO模式 GPIO.setmode(GPIO.BCM) GPIO.setwarnings(F…

高通SG882G平臺(移遠):1、編譯腳本

文檔提供的編譯&#xff0c;有點問題。所以我重新整理了腳本。 build-lib.sh #!/bin/bashfunction prepare_build() {if [ ! -d download ]; thenmkdir downloadfilocal MODIFIED_DIRfile-replacelocal FILE_NAMEset_bb_env.shcp ${MODIFIED_DIR}/${FILE_NAME} \poky/qti-con…