DTD實(shí)體聲明的幾個(gè)重要類別
1.內(nèi)置實(shí)體
作用:通過(guò)內(nèi)置實(shí)體能夠表達(dá)特殊字符
| 特殊字符 | 替代符號(hào) |
|---|---|
| 小于符號(hào)(<) | < |
| 大于符號(hào)(>) | > |
| and符號(hào)(&) | & |
| 雙引符號(hào)(") | " |
| 單引符號(hào)(’) | ' |
使用方式:
<?xml version="1.0" encoding="utf-8"?>
<test>
<to>
<script>document.write("Hello,World")</script>
</to>
</test>

使用實(shí)體,顯示Javascript代碼
2.字符實(shí)體
作用:通過(guò)字符不同進(jìn)制格式顯示Unicode字符
| 進(jìn)制 | 用法 | 顯示效果 |
|---|---|---|
| 十進(jìn)制 | © | ? |
| 十六進(jìn)制 | © | ? |
3.引用實(shí)體
可以參考:XML引用(4)-DTD應(yīng)用
對(duì)于引用實(shí)體可以進(jìn)行連續(xù)性拼接使用
特點(diǎn):不僅僅可以在xml內(nèi)部使用,而且可以在DTD部分使用,但是在引用實(shí)體前,應(yīng)當(dāng)先完成實(shí)體聲明。

引用實(shí)體的連續(xù)性使用
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE to [
<!ENTITY SSH "port:22">
<!ENTITY scan "&SSH; is opening">
]>
<root>
<to>
<ssh>&scan;</ssh>
</to>
</root>
通過(guò)多個(gè)實(shí)體的相關(guān)嵌套性使用可以進(jìn)行惡意拼接,就像是SQL Injection 攻擊手法
4.參數(shù)實(shí)體
關(guān)鍵符號(hào):%
特點(diǎn):只可以在DTD部分進(jìn)行使用。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE to [
<!ENTITY SSH "port:22">
<!ENTITY scan "&SSH; is opening">
<!ENTITY % ele "<!ELEMENT to (ssh)>">
%ele;
]>
<root>
<to>
<ssh>&scan;</ssh>
</to>
</root>
參數(shù)實(shí)體成功執(zhí)行

參數(shù)實(shí)體成功執(zhí)行
XXE基本利用思路介紹
對(duì)于上面的使用演示都是基于內(nèi)部嵌入式DTD限制,XXE攻擊就是基于外部DTD實(shí)體聲明導(dǎo)致
基本思想:通過(guò)外部DTD引入任意文件或URL來(lái)進(jìn)行漏洞利用,加載至xml進(jìn)行實(shí)體利用回顯
例如:
<! ENTITY b SYSTEM "file:///etc/passwd">
參考資料:
https://www.ibm.com/developerworks/cn/xml/x-entities/#l2
https://blog.csdn.net/janchin/article/details/46849209
第一篇:XML簡(jiǎn)介(1)--頭部聲明
第二篇:XML編寫(2)--語(yǔ)法要求
第三篇:XML規(guī)范(3)--DTD限制
第四篇:XML引用(4)--DTD應(yīng)用
第六篇:XXE利用(2)--漏洞實(shí)現(xiàn)
第七篇:XXE后記(3)--拋磚引玉