• 数组返回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值

  • 相关阅读:
    WAMP Apache 2.5 配置虚拟主机
    DOM对象
    BOM对象
    JS内置对象
    CSS定位
    CSS浮动和清除
    浏览器兼容性
    垂直居中
    水平居中总结
    长度值
  • 原文地址:https://www.cnblogs.com/nul1/p/8683818.html
Copyright © 2020-2023  润新知