转载自博客:https://www.yourhome.ren/index.php/sec/378.html
从安恒周练的一道题目中又学到了PHP的两种特性,详细如下:
题目很简洁,给出源码进行审计
<?php
highlight_file(__FILE__);
ini_set("display_error", false);
error_reporting(0);
$str = isset($_GET["A_A"])?$_GET["A_A"] : "A_A";
echo $str;
echo "<br>";
echo $_SERVER["QUERY_STRING"];
echo "<br>";
if (strpos($_SERVER["QUERY_STRING"], "A_A") !== false) {
echo "A_A,have fun";
}
elseif ($str<9999999999) {
echo "A_A,too smal l";
}
elseif ((string)$str>0) {
echo "A_A,too big";
}
else {
echo "you got it!";
}
?>
这里需要A_A传参,但是矛盾的是,又不能用A_A的参数名,于是引出了一个奇怪特性
当传入A.A、A[A或者A A时,PHP的$GET函数会自动将[.和空格转为
细节可以见此2014年在wooyun上的一篇文章:
https://wooyun.shuimugan.com/bug/view?bug_no=64792