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

转载于:https://www.cnblogs.com/nul1/p/8683818.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
in_array绕过是指通过一些技巧或漏洞绕过in_array函数的检查,使其无法准确判断一个值是否在数组中存在。在引用中提到了一个例子,即通过强制类型转换来绕过in_array函数的检查。具体来说,如果使用强制类型转换将传入的值转换为与数组元素类型不匹配的类型,就可以绕过in_array函数的检查。例如,将字符串类型的值转换为数字或者将数字类型的值转换为字符串。这样即使实际上这个值并不存在于数组中,in_array函数也会返回true。在引用中给出了具体的绕过方法,分别是字符类型绕过和数字类型绕过。对于字符类型绕过,可以通过在数组中包含一个字符串类型的元素,然后传入一个与该元素类型不匹配的字符串进行绕过。对于数字类型绕过,可以在数组中包含数字类型的元素,然后传入一个与该元素类型不匹配的字符串或者符号进行绕过。这样就可以利用强制类型转换绕过in_array函数的检查。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [PHP-Audit-Labs Day1:in_array函数缺陷](https://blog.csdn.net/weixin_43872099/article/details/106927502)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [php安全特性函数以及绕过方法](https://blog.csdn.net/qq_33942040/article/details/109958431)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值