1. 程式人生 > 其它 >基本漏洞原理及防禦(5)-XXE

基本漏洞原理及防禦(5)-XXE

XXE:XML External Entity(XML外部實體)

XML:xml是一種標記語言,用來標記電子檔案,從而使得電子檔案具有一定的格式和結構性,是一種使用者可以自己定義的標記語言。

XML文件包括:XML宣告,DTD文件型別定義,文件元素

1.漏洞產生原理:當允許對XML外部實體進行引用時,未對外部實體進行嚴格的審查過濾,從而導致惡意內容上傳。

2.漏洞利用原理:攻擊者利用外部實體的引用,向引用位置構造惡意內容或者指令碼,從而在此處執行惡意操作。例如插入查詢的語句,就可以查詢系統檔案。

或者將惡意內容以DTD的格式傳入引用,可以達成任意檔案讀取。

3.回顯問題:有些返回的情況是由php格式攜帶資訊,而由於php程式碼會因為瀏覽器的解析原因而無法顯示,這時候用base64編碼一次,就可以顯示出返回資訊。

4.漏洞危害:任意檔案讀取

5.漏洞防禦:

(1)使用開發語言提供的禁用外部實體的方法

PHP:
libxml_disable_entity_loader(true);

JAVA:
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);

Python:
from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

(2)過濾使用者提交的XML資料

關鍵詞:<!DOCTYPE和<!ENTITY,或者,SYSTEM和PUBLIC。