1. 程式人生 > 其它 >攻防世界-warmup

攻防世界-warmup

題目開啟是一張滑稽的圖片

按照慣例開啟原始碼,發現存在檔案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