1. 程式人生 > >代碼審計_數組返回NULL繞過

代碼審計_數組返回NULL繞過

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繞過