代碼審計_數組返回NULL繞過
阿新 • • 發佈:2019-02-15
ref 繞過 lse alt .net 個數 字符集 類型 多次
題目鏈接:https://ctf.bugku.com/challenges
題解:
打開題目
其PHP代碼如下:
代碼相關知識點鏈接如下: isset函數:http://php.net/manual/zh/function.isset.php ereg函數:http://www.php.net/manual/zh/function.ereg.php strpos函數:http://www.w3school.com.cn/php/func_string_strpos.asp “[A-Za-z0-9]" 方括號表示字符集,[A-Za-z0-9]匹配大小寫字母和數字其中一個字符 "^[A-Za-z0-9]$" ^表示字符串開始,$表示字符串結束 ,這個匹配只有一個大小寫字母和數字字符的字符串 “^[A-Za-z0-9]+$" +號表示重復1到多次,匹配由多個數字大小字母組成的字符串
閱讀代碼,本題需要滿足的條件
必須以數字或者字母開頭(其實看到ereg就可以想到%00截斷);
必須在password參數中找到--。
所以得到 index.php?password=a%00--
但是:
ereg只能處理字符,而你是數組,所以返回的是null,三個等號的時候不會進行類型轉換。所以null不等於false。
strpos的參數同樣不能夠是數組,所以返回的依舊是null,null不等於false也是正確。
即:倘若函數的參數不符合其函數要求的時候返回的是null值
因此得到playload:
?password[]=0
得到flag
即flag:flag{ctf-bugku-ad-2131212}
代碼審計_數組返回NULL繞過