打开题目链接,出现一个计算器界面,随便输入一些东西尝试一下
经过一番尝试发现输入数字没有问题,但输入字符就会报错
然后我们查看页面源代码
注释部分提示他设置了WAF需要我们去绕过,但是源代码里并没有给出过滤的规则,继续分析看到图片里第二个红框框提到了calc.php文件,这个文件负责处理传进来的参数,所以我们访问它
http://node4.buuoj.cn:27288/calc.php
可以看出通过GET方法传参,过滤了给名单里的字符,所以构造payload如下
calc.php? num=2;var_dump(scandir(chr(47)))
在num前加一个空格,这样可以让WAF认为“ num”不是“num”,但是在绕过WAF之后进行php解析时就会省略那个空格。
var_dump()输出变量的相关信息
scandir()函数以数组形式返回指定目录中的目录和文件
chr()函数传入参数为0~255的整数,返回对应的ASCII字符
我们发现f1agg文件,然后读取它
calc.php? num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
file_get_contents()函数传入参数为文件路径,将整个文件读入一个字符串中
47、102、49、97、103、103分别是\f1agg的ASCII编码