<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>

    研究總結|xxe漏洞的學習與利用總結

    VSole2021-11-06 08:04:27

    前言

    對于xxe漏洞的認識一直都不是很清楚,而在我為期不長的挖洞生涯中也沒有遇到過,所以就想著總結一下,撰寫此文以作為記錄,加深自己對xxe漏洞的認識。

    xml基礎知識

    要了解xxe漏洞,那么一定得先明白基礎知識,了解xml文檔的基礎組成。

    XML用于標記電子文件使其具有結構性的標記語言,可以用來標記數據、定義數據類型,是一種允許用戶對自己的標記語言進行定義的源語言。XML文檔結構包括XML聲明、DTD文檔類型定義(可選)、文檔元素

    xml文檔的構建模塊

    所有的 XML 文檔(以及 HTML 文檔)均由以下簡單的構建模塊構成:

    • 元素
    • 屬性
    • 實體
    • PCDATA
    • CDATA

    下面是每個構建模塊的簡要描述。

    1,元素

    元素是 XML 以及 HTML 文檔的主要構建模塊,元素可包含文本、其他元素或者是空的。

    實例:


    <body>body text in betweenbody>
    <message>some message in betweenmessage>
    

    空的 HTML 元素的例子是 "hr"、"br" 以及 "img"。

    2,屬性

    屬性可提供有關元素的額外信息

    實例:


    <img src="computer.gif" />
    

    3,實體

    實體是用來定義普通文本的變量。實體引用是對實體的引用。

    4,PCDATA

    PCDATA 的意思是被解析的字符數據(parsed character data)。

    PCDATA 是會被解析器解析的文本。這些文本將被解析器檢查實體以及標記。

    5,CDATA

    CDATA 的意思是字符數據(character data)。

    CDATA 是不會被解析器解析的文本。

    DTD(文檔類型定義)

    DTD(文檔類型定義)的作用是定義 XML 文檔的合法構建模塊。

    DTD 可以在 XML 文檔內聲明,也可以外部引用。

    1,內部聲明:ex: 

    完整實例:

      
      
      
      
      
    ]>
    <note>
      <to>Georgeto>
      <from>Johnfrom>
      <heading>Reminderheading>
      <body>Don't forget the meeting!body>
    note>
    

    2,外部聲明(引用外部DTD): 

    ex:

    完整實例:

    <note>
    <to>Georgeto>
    <from>Johnfrom>
    <heading>Reminderheading>
    <body>Don't forget the meeting!body>
    note>
     
    

    而note.dtd的內容為:

    from
    ,heading,body)>#PCDATA)>
    from
     (
    #PCDATA)>
    #PCDATA)>
    #PCDATA)>
    

    DTD實體

    DTD實體是用于定義引用普通文本或特殊字符的快捷方式的變量,可以內部聲明或外部引用。


    實體又分為一般實體和參數實體

    1,一般實體的聲明語法:

    引用實體的方式:&實體名;

    2,參數實體只能在DTD中使用,參數實體的聲明格式:

    引用實體的方式:%實體名;


    1,內部實體聲明: ex:

    完整實例:


    ]>
    <test>&writer;?right;test>
    

    2,外部實體聲明:

    完整實例:

    ]>
    <author>&writer;?right;author>
    

    在了解了基礎知識后,下面開始了解xml外部實體注入引發的問題。

    XXE的攻擊與危害(XML External Entity)

    1,何為XXE?

    答:xxe也就是xml外部實體注入。也就是上文中加粗的那一部分。

    2,怎樣構建外部實體注入?

    方式一:直接通過DTD外部實體聲明

    XML內容

    方式二:通過DTD文檔引入外部DTD文檔,再引入外部實體聲明

    XML內容:

    DTD文件內容:

    方式三:通過DTD外部實體聲明引入外部實體聲明

    好像有點拗口,其實意思就是先寫一個外部實體聲明,然后引用的是在攻擊者服務器上面的外部實體聲明

    具體看例子,XML內容

    dtd文件內容:

    3,支持的協議有哪些?

    不同程序支持的協議如下圖:

    其中php支持的協議會更多一些,但需要一定的擴展支持。

    4,產生哪些危害?

    XXE危害1:讀取任意文件

    該CASE是讀取/etc/passwd,有些XML解析庫支持列目錄,攻擊者通過列目錄、讀文件,獲取帳號密碼后進一步攻擊,如讀取tomcat-users.xml得到帳號密碼后登錄tomcat的manager部署webshell。

    另外,數據不回顯就沒有問題了嗎?如下圖,

    不,可以把數據發送到遠程服務器,

    遠程evil.dtd文件內容如下:

    觸發XXE攻擊后,服務器會把文件內容發送到攻擊者網站

    XXE危害2:執行系統命令

    該CASE是在安裝expect擴展的PHP環境里執行系統命令,其他協議也有可能可以執行系統命令。

    XXE危害3:探測內網端口

    該CASE是探測192.168.1.1的80、81端口,通過返回的“Connection refused”可以知道該81端口是closed的,而80端口是open的。

    XXE危害4:攻擊內網網站

    該CASE是攻擊內網struts2網站,遠程執行系統命令。

    如何防御xxe攻擊

    方案一、使用開發語言提供的禁用外部實體的方法


    PHP:
    libxml_disable_entity_loader(true);
    JAVA:
    DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
    dbf.setExpandEntityReferences(false);
    Python:
    from lxml import etree
    xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
    

    方案二、過濾用戶提交的XML數據

    關鍵詞:

    最后

    通過本次對XXE的總結,認真了解了XML基礎知識,XXE的攻擊方式與及防御方案。

    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
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类