NSS [SWPUCTF 2022 新生赛]funny_web
账号NSS
密码2122693401
私货不去细细研究了,直接看题。
num不等于12345,但是intval(num)等于12345
①intval():可以获取变量的整数值 intval()中有一个特性,其中若传入1e4,准确的值为10000,但是经过intval('1e4')后,输出的值为1 当1e4+1,值为10001,经过intval('1e4+1'),输出值为10001 能绕过if(intval($num) < 2020 && intval($num + 1) > 2021)的检测 ②int intval ( mixed $var [, int $base = 10 ] ) 参数说明: $var:要转换成 integer 的数量值。 $base:转化所使用的进制。 如果 base为空,通过检测 var 的格式来决定使用的进制: 如果字符串包括了 "0x" (或 "0X") 的前缀,使用 16 进制 (hex); 否则,如果字符串以 "0" 开始,使用 8 进制(octal); 否则,将使用 10 进制 (decimal)。 例子:intval($NSScTf, 0) === 114514 通过十六进制的0x1BF52以及八进制的0337522都可以绕过 ③intval() 函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。 intval() 不能用于 object,否则会产生 E_NOTICE 错误并返回 1 故此传入?num[]=1,产生错误返回1。 ④intval(4476e123,0)等于0 intval('4476.0')===4476 小数点 intval('+4476.0')===4476 正负号 intval('4476e0')===4476 科学计数法 intval('0x117c')===4476 16进制 :0X?? intval('010574')===4476 8进制 :0?? intval(' 010574')===4476 8进制+空格 intval('4476a')===4476
由于以上第四点,payload可以是
?num=12345a ?num=12345.1