XXE(XML External Entity Injection)即xml外部實(shí)體注入
  當(dāng)程序在解析XML輸入時(shí),允許引用外部實(shí)體,導(dǎo)致能夠引用一個(gè)外部惡意文件,可導(dǎo)致執(zhí)行系統(tǒng)命令、內(nèi)網(wǎng)端口探測(cè)、文件讀取,攻擊內(nèi)網(wǎng)服務(wù)、dos攻擊等。以下用vwapp漏洞靶場(chǎng)進(jìn)行讀取文件的演示。
  要對(duì)XXE漏洞進(jìn)行驗(yàn)證,可以用BWAPP這款漏洞演示平臺(tái),buggy web Application是一個(gè)集成了web常見(jiàn)漏洞的開(kāi)源web應(yīng)用程序,目的是幫助安全愛(ài)好者及程序員研究安全漏洞,其中已經(jīng)包含了100多種web漏洞
下載及安裝教程:
[BWAPP:一款非常好用的漏洞演示平臺(tái)](http://www.freebuf.com/sectool/76885.html)
安裝好之后,Choose your bug 選擇 XML External Entity Attacks (XXE)
![](/upload/attach/201801/201801131634_xxmoc512cdudrwl.jpg)
Set your security level: 選擇low
![](/upload/attach/201801/201801131634_jngceerw5kpqc5w.jpg)
點(diǎn)擊any bugs? 使用burpsuite抓包,在request中看到傳輸?shù)膞ml數(shù)據(jù):
![](/upload/attach/201801/201801131634_d2tcmduix0yaslj.jpg)
![](/upload/attach/201801/201801131634_klp5giwuxfq3si9.jpg)
xxe-1.php頁(yè)面在向xxe-2.php頁(yè)面?zhèn)鬏敂?shù)據(jù)過(guò)程中,其中的xml數(shù)據(jù)是可控的,也就是說(shuō)可以構(gòu)造惡意數(shù)據(jù)進(jìn)行傳輸,添加一個(gè)外部實(shí)體在XML數(shù)據(jù)中進(jìn)行實(shí)體調(diào)用,從而進(jìn)行XXE攻擊。
payload:
```
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE copyright [
<!ENTITY attack SYSTEM "file:///etc/passwd">
]>
<reset>
<login>&attack;</login>
<secret>xxx</secret>
</reset>
```
![](/upload/attach/201801/201801131635_4q3q9eln5zo8q7x.jpg)
xxe的修復(fù)與防御:
1、使用開(kāi)發(fā)語(yǔ)言提供的禁用外部實(shí)體的方法
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、過(guò)濾用戶提交的XML數(shù)據(jù)
過(guò)濾關(guān)鍵詞:<!DOCTYPE,<!ENTITY,SYSTEM,PUBLIC。