XXE原理利用防御
XML外部實體(XXE)
1.何為XXE?
XXE是xml外部實體注入.
說到這里簡單介紹下什么是xml,xml是用于標記電子文件使其具有結構性的標記語言,可以用來標記數據、定義數據類型,是一種允許用戶對自己的標記語言進行定義的源語言.xml文檔結構包括xml聲明、DTD文檔類型定義(可選)、文檔元素.
所有的XML文檔均有以下簡單的構建模塊組成:
·元素(元素是XML以及HTML文檔的主要構成模塊,元素可包含文本、其他元素或者是空的)
·屬性(屬性可提供有關元素的額外信息)
·實體(實體是用來定義普通文本的變量。實體引用是對實體的的引用,這里的引用就可以為我們提供xxe攻擊)
·PCDATA(會被解析器解析的文本。這些文本將被解析器檢查實體以及標記)
·CDATA(字符數據,不會被解析器解析的文本)
DTD(文檔類型定義)
DTD的作用是定義XML文檔的合法構建模塊
DTD可以在XML文檔內聲明,也可以外部引用
內部聲明:
外部聲明:
DTD實體
DTD實體是用于定義引用普通文本或特殊字符的快捷方式的變量,可以內部聲明或外部引用。
實體分為一般實體和參數實體
1. 一般實體的聲明語法:
怎么構建外部實體注入?
方式一:直接通過DTD外部實體聲明
<?xml version="1.0"?> <!DOCTYPE a [<!ENTITY b SYSTEM "file:///etc/passwd"> ]> <c>&b;</c>方式二:通過DTD文檔引入外部DTD文檔,再引入外部實體聲明
xml內容:
DTD內容:
<!ENTITY b SYSTEM "file:///etc/passwd" ]方式三:通過DTD外部實體聲明引入外部實體聲明
先寫一個外部實體聲明,然后引用的是在攻擊者服務器上面的外部實體聲明
xml內容:
dtd文件內容:
<!ENTITY b SYSTEM "file:///etc/passwd">產生的危害
xxe危害1:讀取任意文件
xxe危害2: 執行系統命令
xxe危害3:探測內網端口
xxe危害4:攻擊內網網站
xxe危害5: 導致DOS攻擊(著名的’billion laughs’)
簡單介紹下billion laughs
該攻擊通過創建一項遞歸的xml定義,在內存中生成是十億個“Ha!”字符串,從而導致DOS攻擊。
原理:構造惡意的XML實體文件耗盡可用內存,因為許多xml解析器在解析XML文檔時傾向于將它的整個結構保留在內存中,解析非常慢,從而造成拒絕服務攻擊。
如何防御xxe攻擊
由于導致問題的原因是XML解析器解析了用戶發送的不可信數據。我們去校驗DTD中SYSTEM標識符定義的數據,并不容易,也不大可能,所以,最好的解決方法就是配置XML處理器去使用本地靜態的DTD,不允許XML中含有任何自己聲明的DTD。
方式1: 使用開發語言提供的禁用外部實體的方法
方式2: 過濾用戶提交的XML數據
關鍵詞:
總結
- 上一篇: win service 2003 和 w
- 下一篇: 内网端口转发-LCX基本使用