array_search()的不严格检测问题
来源:互联网 发布:知英日剧 编辑:程序博客网 时间:2024/04/28 00:36
原题:
<?php show_source(__FILE__); $a=0; $b=0; $c=0; if (isset($_GET['x1'])) { $x1 = $_GET['x1']; $x1=="1"?die("ha?"):NULL; switch ($x1) { case 0: case 1: $a=1; break; } } $x2=(array)json_decode(@$_GET['x2']); if(is_array($x2)){ is_numeric(@$x2["x21"])?die("ha?"):NULL; if(@$x2["x21"]){ ($x2["x21"]>2017)?$b=1:NULL; } if(is_array(@$x2["x22"])){ if(count($x2["x22"])!==2 OR !is_array($x2["x22"][0])) die("ha?"); $p = array_search("XIPU", $x2["x22"]); $p===false?die("ha?"):NULL; foreach($x2["x22"] as $key=>$val){ $val==="XIPU"?die("ha?"):NULL; } $c=1; } } if($a && $b && $c ){ echo 'you get flag!'; }else{echo 'try again!';}?>
题目最终flag要求是a,b,c都为1,第一个a为1很简单,只要x1不为1就好了,接下来是b为1和c为1的条件
根据源码可知x2应该是一个json格式的字符串,经过解析后应该是一个数组,b=1的条件是键值对“x21"对应的值不能是纯数字而且要大于2017,这个就好说话了,如果是数字加字符的话很明显is_numeric()判断会不成功,字符串与数字进行大小比较,php会把字符串把前面能转换的字符转换成数字进行比较,如"2018a”>2017会把"2018a“转换成2018后与2017进行比较,这样就可以绕过第二个判断了
再来看第三个c=1的过程,首先x2的json语句中键值x22对应的值应该是一个长度为2的祝,而且数组下标为0的值所对应的值也应该是一个数组,关键就在于array_search()这里
array_search()是有第三个缺省参数的,默认为false,如果设置为true就是严格检测,默认为false的情况下就是不严格检测,不严格检测的话问题就相当于不进行类型比较而进行值的比较,就是类似于===和==
那么是0==”xxx",进行0和任意字符串的比较,php会把字符串转换成数值0,值比较,OK!
那么结果也就出来了:
阅读全文
0 0
- array_search()的不严格检测问题
- array_search()
- php的array_search函数说明
- 删数问题-注意贪心策略-不严格
- 关于in_array() foreach array_search() 的性能对比
- snprintf参数类型不严格匹配导致的天大的坑“(null)”------这次不说core dump问题了
- Pascal 定理的严格证明问题
- linux严格区分大小写导致的问题
- 【js学习笔记-080】-----不严格的同源策略
- 你不知道的JavaScript--Item1 严格模式
- error LNK2038: 检测到“_MSC_VER”的不匹配项问题
- error LNK2038: 检测到“_MSC_VER”的不匹配项问题
- array_search使用
- linux环境mysql的sql语句严格区分大小写问题
- canny边缘检测不连续问题
- 严格模式 便于检测线程性能
- 关于自己写linux c++的网络服务的tps上限的一次不严格的测试
- 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项, Vs2010连接的问题
- docfx 做一个和微软一样的文档平台
- 解决项目报错出现Access restriction: The type BASE64Encoder is not accessible due to restriction
- 金蝶K3对特定单据表体数据进行列锁定
- SpringMVC数据验证
- bzoj3339: Rmq Problem
- array_search()的不严格检测问题
- FAST特征点检测&&KeyPoint类
- 计算天数差的函数,通用
- [LC] 66. Plus One
- Opencv 基本操作
- python学习---第八天
- virtualbox 与vmware 之为什么我放弃了virualbox
- jquery操作select下拉框的多种方法(选中,取值,赋值等)
- redis4.0、codis、阿里云redis 3种redis集群对比分析