XXE(XML External Entity Injection)即xml外部實體注入
  當程序在解析XML輸入時,允許引用外部實體,,導致能夠引用一個外部惡意文件,,可導致執(zhí)行系統(tǒng)命令、內(nèi)網(wǎng)端口探測,、文件讀取,,攻擊內(nèi)網(wǎng)服務(wù)、dos攻擊等,。以下用vwapp漏洞靶場進行讀取文件的演示,。
  要對XXE漏洞進行驗證,可以用BWAPP這款漏洞演示平臺,,buggy web Application是一個集成了web常見漏洞的開源web應(yīng)用程序,,目的是幫助安全愛好者及程序員研究安全漏洞,其中已經(jīng)包含了100多種web漏洞
下載及安裝教程:
[BWAPP:一款非常好用的漏洞演示平臺](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)
點擊any bugs? 使用burpsuite抓包,,在request中看到傳輸?shù)膞ml數(shù)據(jù):
![](/upload/attach/201801/201801131634_d2tcmduix0yaslj.jpg)
![](/upload/attach/201801/201801131634_klp5giwuxfq3si9.jpg)
xxe-1.php頁面在向xxe-2.php頁面?zhèn)鬏敂?shù)據(jù)過程中,其中的xml數(shù)據(jù)是可控的,,也就是說可以構(gòu)造惡意數(shù)據(jù)進行傳輸,,添加一個外部實體在XML數(shù)據(jù)中進行實體調(diào)用,從而進行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的修復與防御:
1,、使用開發(fā)語言提供的禁用外部實體的方法
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數(shù)據(jù)
過濾關(guān)鍵詞:<!DOCTYPE,,<!ENTITY,,SYSTEM,PUBLIC,。