數組返回NULL繞過


BUGKU:http://120.24.86.145:9009/19.php

還沒看完源碼,我就直接加了一個password[]=1結果就拿到flag了。然后再看源碼我自己都搞不懂為什么可以得到源碼。真的,不信你看。

 1 <?php
 2 $flag = "flag";
 3 
 4 if (isset ($_GET['password'])) {
 5 if (ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE)
 6 echo 'You password must be alphanumeric';
 7 else if (strpos ($_GET['password'], '--') !== FALSE)
 8 die('Flag: ' . $flag);
 9 else
10 echo 'Invalid password';
11 }
12 ?>

先來談論一下標准的答案:

第一個條件:

    必須以數字或者字母開頭(其實看到ereg就可以想到%00截斷)

第二個條件:

    必須在password參數中找到--。

所以得出以下正解:

index.php?password=a%00--

那么話又說回來了,為什么直接password[]=a就可以繞過呢?

1.ereg只能處理字符,而你是數組,所以返回的是null,三個等號的時候不會進行類型轉換。所以null不等於false。

2.strpos的參數同樣不能夠是數組,所以返回的依舊是null,null不等於false也是正確。

所以可以拿到flag

小結:

  1.倘若函數的參數不符合其函數要求的時候返回的是null值


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM