数组返回NULL绕过

Posted nul1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组返回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值

以上是关于数组返回NULL绕过的主要内容,如果未能解决你的问题,请参考以下文章

数组返回NULL绕过

bugku 代码审计

getActivity() 在片段上返回 null?

android片段getArguments()返回null

安卓。片段 getActivity() 有时返回 null

片段中的TextView在Android Studio中返回Null