OWASP之XXE(XML外部實體注入)

2021-10-09 02:19:04 字數 2414 閱讀 5422

前提條件

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...