码迷,mamicode.com
首页 > 编程语言 > 详细

数组返回NULL绕过

时间:2018-03-31 20:37:18      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:div   自己   strpos   第一个   lock   pass   index.php   nbsp   span   

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绕过

标签:div   自己   strpos   第一个   lock   pass   index.php   nbsp   span   

原文地址:https://www.cnblogs.com/nul1/p/8683818.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!