點開網站:
抓包,修改屬性:
返回了這麼一串:
由於是$name==md5()
,由弱類型比較和md5想到了md5碰撞,由於PHP的弱比較造成它會將oe開頭的md5(字符)解析成科學計數法(數字),於是我們開始爆破。
值得注意的是,我們要將引號也包括進去,因爲在json編碼中,"0"
爲字符串,0
爲數字。
爆破完成,看到了
知道了文件名和位置之後,加上提示的xxe,接下來就是重頭戲了。
在參考了大佬的文章之後,我對XXE有了一點了解,這裏我們使用的是最簡單的一種。
關鍵在這裏,我們看到,實體被當作了一個變量來調用,我對<user>&xxe;</user>
的xxe
的理解是,它相當於函數的調用,而上面<!ELEMENT xxe "test">
相當於函數的定義。於是,我們可以改變“函數”內容來實現對於文件的操作。
這裏,我們不再是xxe
替換成test
,而是將file:///c:/test.dtd
當作系統命令執行,以此來讀取系統中的文件。
在這題裏,我只要把這裏的file協議替換一下就行了,這裏,我們使用php僞協議來讀取文件內容。
將base64解碼就是flag。
第一次認識了XXE,對json也有了一些瞭解,學到很多新知識。