打开靶机,可以看到是一个简单的计算功能
看一下源代码,发现了我看不懂的js代码
但是里面有说到一个calc.php,看一下里面有什么
soga,原来是waf,可以传入num参数,但是黑名单结合正则匹配过滤了不少字符,试了一下发现还不能是字母,最终可以通过eval函数执行命令。
没啥思路,去看一下别人的wp,原来可以用php字符串解析特性来绕过waf,就是可以在num前加个空格,变成“ num”,而不是“num”。但php在解析的时候,会先把空格给去掉,这样我们的代码还能正常运行,神奇
下面就可以通过这些函数来读取flag
var_dump():函数用于输出变量的相关信息
scandir():列出参数目录下的内容
readfile():读取文件内容
chr():将ascii码转换成字符(chr(47)-->'/')
利用scandir()找到flag在哪,再利用readfile()读取flag(这里我不知道为什么不可以用system函数,知道的大哥可以评论区留个言,万分感谢)
首先读取根目录下的文件
? num=var_dump(scandir(chr(47)))
可以看到有一个f1agg文件
? num=readfile(chr(47).f1agg)读出flag
当然,其他文件读取函数也是可以的