intval1


通关get传入num,num不能是字符串4476,但是把num转换为整数后必须等于4476

?num=0x117c //hex
?num=010574 //oct
?num=0b0001000101111100 //bin
?num=+4476 //正号
?num=4476.0 //float
任选其一即可get flag


intval2


相比上一题,这一题增加了正则替换和字符寻址
strops从$num中寻找0,如果没有->false,如果在第0位返回0=false,然后前面有逻辑非,就会成真
所以构造的payload要有0,并且不能在开头
?num=4476.0

initval3


这一关对数字进行了正则替换,$num不能存在0-9的数字,判断如果 \$num能成功转换成数字,输出flag
?num[]=
给数组任意赋值为非空数组


in_array

in_array()是判断是否在数组中,in_array(要查找的值, 数组, [是否开启严格模式]);

首先判断是否传入pass,传入pass后对比是否在$list中,如果不在,加上前面的逻辑非,返回真值,输出flag
?pass=


in_array2(strmcp)


strmcp是比较两个字符串是否一样的函数,如果一样返回0,>0就是字符串1>字符串2,如果传入数组,返回null,在若比较时,null==0
?pass[]=


md5比较


比较$name和\$pass的MD5必须一样,但是\$name和\$pass不能完全一样
数组绕过
?name[]=1&&pass[]=2


弱比较可以使用0e绕过,
原理:以 0e 开头、后面全是数字的字符串,会被解析成科学计数法
0e数字 等价于 0 × 10^数字,结果 = 0
QNKCDZO
240610708
s878926807
s155964296
s214587387
s214587387
s679824192
s849722504