前提條件
libxml2.9.1 及以後,預設不解析外部實體。
可使用phpinfo()檢視libxml的版本資訊。**後加phpinfo.php
xml文件
組成:xml宣告,dtd部分,xml部分
cross-domain-policy根節點,http://…dtd引用檔案位置
dtd(文件型別定義)
為xml文件定義語義約束,內部宣告,外部引用
dtd用法參考內容:
dtd知識
1、內部實體宣告
<?xml version="1.0" encoding="iso-8859-1"?>
xxe"test"
>
]>
定義元素為 any 說明接受任何元素,但是定義了乙個 xml 的實體,實體其實可以看成乙個變數,可以在 xml 中通過 & 符號進行引用
>
>
&xxe;
user
>
>
mypasspass
>
creds
>
使用 &xxe 對 上面定義的 xxe 實體進行了引用,到時候輸出的時候 &xxe 就會被 「test」 替換
注:&符號要進行url編碼,否則可能會當做連線符執行
2、外部實體宣告
外部引用可支援 http,file 等協議,不同的語言支援的協議不同,但存在一些通用
的協議
<?xml version="1.0" encoding="iso-8859-1"?>
]>
>
>
&xxe;
user
>
>
mypasspass
>
creds
>
實體可分為(通用實體、引數實體)
通用實體
用 &實體名; 引用的實體,在dtd 中定義,在 xml 文件中引用
引數實體
/
xx.dtd檔案
xx.xml檔案
%xxe;]>
>
&evil;
foo>
(1)使用% 實體名(這裡面空格不能少)在 dtd 中定義,並且只能在 dtd 中使用 %實體名; 引用
(2)只有在 dtd 檔案中,引數實體的宣告才能引用其他實體
(3)和通用實體一樣,引數實體也可以外部引用
xxe利用
xml中只能利用dtd部分
注入內容
<?xml version="1.0" encoding="utf-8"?>
]>
>
&xxe;
foo>
或者
注入內容
<?xml version="1.0" encoding="utf-8"?>
%xxe;]>
>
&xx;
foo>
外部xx.dtd內容
有回顯直接看回顯內容
無回顯使用外帶資料通道提取資料,先使用 php://filter 獲取目標檔案的內容,
然後將內容以 http 請求傳送到接受資料的伺服器(攻擊伺服器)***.***.***
注入內容
<?xml version="1.0" encoding="utf-8"?>
%remote;%int;%send;
]>
外部test.dtd 的內容,內部的%號要進行實體編碼成%
無回顯有報錯,直接將報錯內容解碼
無回顯無報錯,在錯誤日誌(access.log)中將內容解碼
錯誤日誌在**找?
這裡有坑,只能傳送一次,不能連續傳送,想試需要重新抓包
XXE(XML外部實體注入)學習
xml外部實體注入 xml external entity 簡稱 xxe 漏洞。xml是用於標記電子檔案使其具有結構性的標記語言,可以用來標記資料 定義資料型別,是一種允許使用者對自己的標記語言進行定義的源語言。xml 文件結構包括 xml 宣告 dtd文件型別定義 文件元素。dtd documen...
CTF中關於XXE XML外部實體注入 題目兩道
題目 unctf do you like xml?hint weak password 弱密碼 2 根據題目hint 嘗試登陸 賬號密碼統一admin 提示登陸成功 bp發現為xxe xml外部實體注入 3 構造一下xxe 進行base64解密 得到flag 解密結果如下 flag flag 題目 ...
Qt之呼叫外部DLL
宣告 事先我已經自己動手寫了乙個簡單的dll檔案 mydll.dll c版介面的。首先,從dll中匯出了導入庫 lib 檔案,dll中有兩個函式,原型如下 void helloworld 函式內部呼叫win32 api,功能是彈出乙個helloworld提示框 int add int a,int b...