# XXE La7 這題是考 XInclude 注入,這跟傳統 XXE 不同,因為: - 沒辦法定義 DOCTYPE 或 DTD 來插入實體 - 伺服器的 XML 解析器會解析 XInclude 指令,允許你包含其他檔案內容。 一樣進入網站並攔截請求。 ![image](https://hackmd.io/_uploads/Hk65Sr7Hgl.png) 並在送出的 XML 中插入: ``` <foo xmlns:xi="http://www.w3.org/2001/XInclude"> <xi:include parse="text" href="file:///etc/passwd"/> </foo> ``` - `xmlns:xi="http://www.w3.org/2001/XInclude"` 定義了 xi 命名空間。 - `<xi:include parse="text" href="file:///etc/passwd"/>` 表示「把 /etc/passwd 這個檔案當文字包含進來。 最後伺服器解析後會把 `/etc/passwd` 的內容直接放到回應裡。 簡單講,這段就是: 「拜託伺服器去讀它自己 `/etc/passwd` 這個檔案,然後把裡面的文字內容直接貼回給我。」 就像你請服務生去拿菜單出來,然後直接給你看。 XInclude 就是 XML 的「引用外部檔案」功能,你用他插入要偷看的檔案路徑,伺服器會照做。 ![image](https://hackmd.io/_uploads/BJiXUrQSee.png) ![image](https://hackmd.io/_uploads/HyLu8HXHxg.png) ---