0x00 題目分析
瀏覽一遍頁(yè)面栽连,在about頁(yè)面,獲得如下信息
訪問(wèn) .git/ 凡辱,頁(yè)面存在戒职。
使用githack扒下來(lái)。得到源碼透乾,進(jìn)行代碼審計(jì)洪燥。
分析得到:
1.flag在flag頁(yè)面磕秤,要看源碼才能看到。
2. 參數(shù)過(guò)濾了 ../ 也就是限定了只能在本目錄
3. exists函數(shù) 對(duì)文件的存在進(jìn)行判定捧韵。
0X01 解題思路
理清思路市咆,要看源碼,有哪幾種方法再来。
1.系統(tǒng)命令執(zhí)行蒙兰,cat 等函數(shù)
2.函數(shù)執(zhí)行,show_source 等
3.將文件打包 芒篷,下載下來(lái)搜变。
這里最有可能的就是函數(shù)執(zhí)行了,雖然下面有一個(gè)? “require_once” 但是由于上面兩個(gè)語(yǔ)句的限制针炉,不存在遠(yuǎn)程包含挠他。
將代碼扔進(jìn)軟件自動(dòng)審計(jì)。
很顯然篡帕,關(guān)鍵就在assert函數(shù)殖侵,網(wǎng)上查找相關(guān)資料。
函數(shù)介紹參考以下頁(yè)面:
https://www.douban.com/note/217557007/
對(duì)這個(gè)函數(shù)的理解就是赂苗,這個(gè)函數(shù)會(huì)執(zhí)行括號(hào)里面的語(yǔ)句愉耙,括號(hào)里面的句子的布爾真值不是true時(shí)候,就會(huì)提示warning拌滋。
下面是對(duì)這個(gè)函數(shù)的測(cè)試朴沿。
當(dāng)為true的時(shí)候就沒(méi)有提示。
所以败砂,這一題赌渣。
注意閉合前后單引號(hào),括號(hào)等昌犹〖嵛撸可得參數(shù)應(yīng)為?
page=1' ) == (show_source('templates/flag.php')) ;//
網(wǎng)上找到一種這樣的:
page=' and? die(highlight_file('templates/flag.php')) or '
這種寫(xiě)法的是利用第二個(gè)assert,最后的句子為:
執(zhí)行了三個(gè)語(yǔ)句斜姥,里面那個(gè) “or” 也可替換為“and”
0x02 小結(jié)
神奇的php函數(shù):assert ,這個(gè)函數(shù)可以用來(lái)寫(xiě)馬過(guò)狗鸿竖,但一句話(huà)過(guò)狗太簡(jiǎn)單了。
有什么問(wèn)題不先問(wèn)問(wèn)神奇的海螺呢铸敏?
繼續(xù)學(xué)習(xí)~~