攻防世界-warmup
阿新 • • 發佈:2021-08-24
題目開啟是一張滑稽的圖片
按照慣例開啟原始碼,發現存在檔案source.php
進入source.php檔案後,可檢視其原始碼
在原始碼中又發現一個hint.php檔案,進去檢視
可以看出flag就在檔案ffffllllaaaagggg中,然後對source.php的原始碼進行審計,發現其想要通過include去構造包含檔案的話,必須先滿足三個條件:
1.變數file必須非空;
2.變數file必須是個字串;
3.變數file必須通過checkFile函式的驗證
此時便可以進行構造payload了,因為所構造的payload肯定滿足前兩個條件,我們只需要將重心放在第三個條件也就是checkFile函式上
函式定義了一個白名單whitelist,出現了4個if語句:
1.如果$page不是字串,則返回false;
2.如果$page在whilelist中,則返回true;
3.擷取傳進引數中?之前的部分,若該部分在whitelist中,則返回true
4.先對構造的payload進行url解碼,再擷取傳進引數中?之前的部分,若該部分在whitelist中,則返回true
針對第三個條件進行payload構造,此時根據include的函式特性可知
也就是說,如果引數中包含../這樣的路徑,解析器則會忽略../之前的字串而去在當前目錄的父目錄下尋找檔案,由檔案ffffllllaaaagggg可猜測,應該在四重父目錄下去尋找該檔案
綜上,我們可以構造payload:?source.php?/../../../../ffffllllaaaagggg