1.web89
不能输入0到9
intval函数是获取变量的整数值,失败时返回 0, 空的 array 返回 0,非空的 array 返回 1
payload:
num[]=1
2.web90
不能直接传入4476,会直接退出,利用的是php弱类型比较,在比较时会进行数据类型转换
int intval ( mixed $var [, int $base = 10 ] )
如果 base 是 0,通过检测 var的格式来决定使用的进制: 如果字符串包括了 “0x” (或 “0X”) 的前缀,使用 16 进制 (hex);否则,如果字符串以 "0"开始,使用 8 进制(octal);否则, 将使用 10 进制 (decimal)。
payload:
4476a 随便一个字符
4476.0 小数点
+4476.0 正负号
4476e0 科学计数法
0x117c 16进制
010574 8进制
010574 8进制+空格
3.web91
必须以php开头,才能进入到第一个if匹配语句,第二个if匹配语句,是不能以php开头
m的意思是开启多行匹配,可以利用换行符进行绕过,第一个if开启了多行匹配,可以在第二行以php开头,而第二个if没有开启多行匹配,所以只要第一个传入的不是php即可绕过
payload:
a%0aphp
4.web92
传入的num值首先做了一个不完全比较,在这个地方会进行弱类型比较,这题在传入4476a之类的字符就不行了,intval(num,0),第二个字符为0时会根据传入的num变量值来决定使用什么进制,所以这题可以用进制绕过
payload:
0x117c 16进制
010574 8进制
010574 8进制+空格
5.web93
和上题相比,就是不能使用a-z,所以可以用八进制绕过
payload:
010574 8进制
010574 8进制+空格
参考文章:
ctfshow web89-93