<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    web安全101之如何理解XXE?

    VSole2021-12-07 06:50:51

    前置知識

    XXE如何理解?

    它是可擴展標記語言 ( XML) 用于存儲和傳輸數據。

    通常始于異步JavaScript和XML技術(ajax技術):網頁應用能夠快速地將增量更新呈現在用戶界面上,而不需要重載(刷新)整個頁面。

    目前JSON的使用比XML更加普遍JSON和XML都被用于在Ajax模型中的XML技術

    這種標記語言允許開發人員定義和表示任意數據結構的HTML。

    以下為定義屬性和值的Security Assertion Markup Language(SAML)語言

               # 定義屬性
                          # 定義值
          vickieli
        
      
    
    

    XML 格式廣泛用于 Web 應用程序的各種功能,包括身份驗證、文件傳輸和圖像上傳或者只是將 HTTP 數據從客戶端傳輸到服務器并返回。

    XML 文檔可以包含 文檔類型定義 ( DTD) 它定義了 XML 文檔的結構及其包含的數據。

    注意:&file; 是實體,而不是外部實體。

    這些DTD可以從外部加載或在文件本身的DOCTYPE標簽中聲明

    以下是一個DTD,它定義了一個名為file的XML實體

    ]>
    &file;       # &file; = Hello!
    

    我們可以將XML的實體,理解于類似編程語言中的變量:即,&file; = Hello!

    XML 文檔還可以使用外部實體通過 URL 訪問本地或遠程內容。

    當語法中使用SYSTEM 關鍵字時,則該實體是外部實體,其值將從URL加載

    URL可以從本地文件系統中加載,也可以從互聯網中加載

    ]>
    &file;
      
    ]>
    &file;
    

    實體與外部實體

    我們知道了,XML外部實體的由來,也能夠區分它們的一紙之隔(有沒有語法SYSTEM 關鍵字的定義)

    不管是什么實體(如果用戶可以控制 XML 實體或外部實體的值),則可以基于xml技術后的各種網站業務功能點(比如,實際網站在使用此技術上傳文件)或者此技術的解析引擎來產生各種漏洞。

    已知的威脅來自于兩點

    1.攻擊者可以控制實體的值。

    2.xml解析器錯誤的配置為從輸入的地方讀取xml文檔時解析和評估 DTD,攻擊者可以聲明自己的外部實體以實現惡意結果。

    此類攻擊稱為 XML 外部實體攻擊,或 XXEs。

    防御

    防止 XXE 就是限制 XML 解析器的功能。因為 XXE 攻擊需要 DTD 處理,應該盡可能禁用 XML 解析器上的 DTD 處理。

    如果無法完全禁用 DTD,您可以禁用外部實體、參數實體。

    為了防止基于 XXE 的 DoS,您可以限制 XML 解析器的解析時間和解析深度。您還可以完全禁用實體的擴展。

    禁用 DTD 處理和配置解析器行為的機制因使用的 XML 解析器而異。

    比如:PHP XML 解析器,需要設置 libxml_disable_entity_loader 為 TRUE來禁用外部實體。

    其他語言的最佳配置與實踐請參考owasp備忘單,以及各種官方文檔與靜態分析軟件的官網文檔

    https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.md

    甲骨文的最佳實踐建議

    靜態代碼分析sonarsource的最佳實踐建議

    https://rules.sonarsource.com/java?search=XXE


    另一條防御角度是輸入驗證,黑白名單等

    為了防止盲XXE,可以禁止出站的網絡流量。

    XXE的特征值

    在使用bp基于功能點的觀察與抓包時,

    還要注意base64編碼,LD94bWw,表示

    還可以強制應用程序解析 XML 數據。即,網站明確的表現為在收發json數據,那能不能將此數據交換強制置為xml技術?配置上的失誤與一些不安全的默認項,使其變為現實。

    修改content-type頭,強制輸入xml格式的數據

    Content-Type: text/xml
    Content-Type: application/xml
    

    意識中,遇到的每一個功能點都假設,思維中思考此處的數據,后臺可能會接收與處理xml格式的數據。

    經典的XXE測試手法

    顯注解析與其他注入類漏洞沒有什么本質上的區別,就是放置payload,響應包觀察;盲注與其他類型的漏洞也沒什么本質上的區別,使用第三方可控的服務器輔助觀察,比如dnslog,內網搭建測試服務器等,觀察訪問日志。

    測試SYSTEM的外部實體,是否能被解析;是否能從本地加載;是否能從外部URL加載。

      
    ]>
    &test;
    

    如果SYSTEM定義的外部實體都無法解析,那還是別亂懟了。人家在一開始就已經將DTD配置為最佳防御策略了。

      
    ]>
    &test;
    

    SYSTEM語法上的其他語法可選項,比如PUBLIC語法, "abc"是給解析器看的,與&test;關聯起來,將后面的值給它。

          # "abc" 為標識ID,給解析器看的。它將abc與&test;關聯起來,并將payload替換給&test;
    ]>
    &test;
    

    測試盲XXE

    通過讓目標服務器向攻擊者的服務器發出請求并使用泄露的信息來竊取數據。

    確認服務器是否可以出站,訪問到攻擊者的服務器

    關于dmz區域的防火墻流量的限制:80,443,53等基礎依賴端口先行測試。因為網站業務需求,它自己就很可能需要從其他地方讀取其他圖片,js,css等資源。防火墻把所有的都禁止了,資源還如何加載進來。

      
    ]>
    &test;
    

    在不同的文件類型中插入 XXE payload

    除了在 HTTP 請求正文上測試 XXE 之外,您還可以嘗試將包含 XXE payload的文件上傳到服務器。

    網站可能限制了可以上傳的文件類型,此時可以在不同的文件類型中插入 XXE payload

    這里僅示例幾個,其他文件類型可以自行搜一搜

    svg文件,記事本打開編輯

      
    ]>
    
      
      &test;
    
    

    辦公文件都是壓縮文件

    Microsoft Word 文檔( .docx 文件)、PowerPoint 演示文稿 ( .pptx ) 和 Excel 工作表 ( .xlxs )

    修改后綴名為zip,插入payload,打包還原

    可以簡單地將payload插入 /word/document.xml 、 /ppt/presentation.xml 或 /xl/workbook.xml 。最后,將檔案重新打包為 .docx 、 .pptx 或 .xlxs 格式。

    linux中的zip還原辦公文檔

    cd example
    zip -r new_example.docx *
    

    XInclude攻擊

    有時無法控制整個 XML 文檔或編輯 XML 文檔的 DTD。但是,如果目標應用程序接受用戶輸入并將其插入到后端的 XML 文檔中,仍然可以利用 XXE 漏洞。

    XInclude 是一個特殊的 XML 特性,它從名為 xi:include 的單個 XML 標記構建一個單獨的 XML 文檔。如果可以控制傳遞到 XML 文檔中的單個未經處理的數據,就可以在該值中放置 XInclude 攻擊。

    輸入點payload如下,響應包觀察特征值

    引用http://www.w3.org/2001/XInclude命名空間,以識別xi:include標簽的功能性特殊含義

         # 引用http://www.w3.org/2001/XInclude命名空間,以識別xi:include標簽的功能性
         
    
    

    使用參數實體拼湊多態性payload

    這種攻擊可能不起作用因為大多數解析器不允許外部實體包含在其他外部實體中。

    file包含在exfiltrate中,這種攻擊可能不起作用。

      
      
    ]>
    &exfiltrate;
    

    XML DTD 有一個稱為參數實體的特性。參數實體是只能在 DTD 內的其他地方引用的 XML 實體,它從外部加載DTD。用百分號 (%) 字符聲明和引用的。

    解析器遇到符號 %,才將解析方式理解為外部DTD的模式。內部還是外部的DTD,由%于解析器中觸發。

       
      ">  # %百分號的十六進制
      %ent;
      %exfiltrate;
    ]>
    

    根據 XML 規范,在內聯 DTD(在 DOCTYPE 標記內指定的 XML 文檔中的 DTD)和外部 DTD(在別處托管的單獨 DTD)中,參數實體的處理方式不同。在內聯 DTD 中,不能在標記中引用參數實體,因此該行不起作用:,而在外部 DTD 中,不存在這樣的限制。

    要通過盲XXE測試的話,需要在攻擊者服務器上準備好xxe.dtd文件。注意:這是直接盲測發給服務器的請求,引誘服務器加載http://attacker_server/xxe.dtd

      
      %xxe;
    ]>
    

    然后將payload編寫于xxe.dtd文件中,使用%或者不帶%等一切可行的payload來進行測試。注意:以下才是攻擊者服務器上面準備好的payload,具體危害是讀取

    file:///etc/shadow文件。

       
      ">  # %百分號的十六進制
      %ent;
      %exfiltrate;
    ]>
    

    將dtd文件payload部署于攻擊者服務器的示例





    關于返回數據的格式化問題

    如果您嘗試讀取特定格式的文件,則 XXE 數據泄露會變得更加復雜。

    例如尖括號 (<>)、引號 (" 或 ') 和與號 (&)等各種特殊符號,它們在返回數據的時候可能會被其他東西特殊對待與處理掉。

    在 XML 文件中,包裹在 CDATA(字符數據)標簽中的字符()不會被視為特殊字符。

     
    ">
    ">
    %ent;
    %exfiltrate;
    

    感謝師傅們很有耐心的閱讀到了這里。共勉。

    xml語言xml解析
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    XXE如何理解? 它是可擴展標記語言 ( XML) 用于存儲和傳輸數據。 通常始于異步JavaScript和XML技術(ajax技術):網頁應用能夠快速地將增量更新呈現在用戶界面上,而不需要重載(刷新)整個頁面。 目前JSON的使用比XML更加普遍JSON和XML都被用于在Ajax模型中的XML技術
    Web Service滲透測試總結
    2017 OWASP十大關鍵Web應用安全風險簡析 受越來越短的軟件項目生命周期影響,有些應用面臨損及金融、醫療、零售業和其他行業數字安全的風險。開發人員和經理必須了解這些最常見的風險,才能保護自己的應用。為此,開放網頁應用安全計劃(OWASP)定期發布十大最關鍵Web應用安全風險。 該計劃從專精應用安全的公司企業收集40多份數據,數據涵蓋數百家公司處收集的漏洞信息,涉及10萬個應用和API。 O
    淺析xml之xinclude & xslt
    2022-05-19 08:17:00
    最近依舊在研究xml及其相關安全問題,前一篇文章已經提及了較為大眾且CTF中常見的xml攻擊方式。
    近日,國家信息安全漏洞庫(CNNVD)收到關于微信支付SDK XXE(XML External Entity)漏洞(CNNVD-201807-083)情況的報送。成功利用該漏洞的攻擊者可以遠程讀取服務器文件,獲取商戶服務器上的隱私數據,甚至可以支付任意金額購買商品。
    XML外部實體注入
    2022-07-28 22:32:56
    0x01:簡單了解XMLXML 指可擴展標記語言XML的特點及作用:特點:1. xml與操作系統、編程語言的開發平臺都無關
    但是,在處理外部實體時,可以針對應用程序啟動許多攻擊。這些攻擊包括泄露本地系統文件,這些文件可能包含密碼和私人用戶數據等敏感數據,或利用各種方案的網絡訪問功能來操縱內部應用程序。通過將這些攻擊與其他實現缺陷相結合,這些攻擊的范圍可以擴展到客戶端內存損壞,任意代碼執行,甚至服務中斷,具體取決于這些攻擊的上下文。//這一行是 XML 文檔定義
    --第一行是XML聲明-->. --這是XML處理指令的例子。后的第一個單詞是處理指令名,在本例中是xml-->. --處理指令一定要頂格寫,前面不能有任何空白-->. XML文檔必須有且只有一個根元素。version特性表明這個文檔符合XML 1.0規范。0x02:實體實體叫ENTITY,實體的作用是避免重復輸入。0x03:處理指令PI處理指令用于XML解析器傳遞信息到應用程序。這些文本將被解析器檢查實體以及標記。
    禁用XXE處理漫談
    2023-03-13 10:52:32
    近期準備面試題時,XXE漏洞防范措施(或者說修復方式)在一些文章中比較簡略
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类