[RoarCTF 2019]Easy Calc 1
进入主页面是一个计算器,可以计算
右键源代码发现提示信息,javascript
脚本,其中还有calc.php
文件
注释说明了这里引入了waf
尝试访问calc.php
是一道命令执行,尝试输入phpinfo();
进行命令执行
提示Forbidden
,被拒绝了,应该是被waf拦截了,经过多次尝试发现
数字可以传入,字符和特殊字符不可以传入
这里也就无了方法,参考了大佬的做法,如果绕过waf,使用了php的特性
PHP在接收URL传入的内容时,会将空格去除,将一些特殊字符转换为下划线(转换对象也包含空格)。
这里在num
传参和?
之后加入一个空格就可以绕过waf
/calc.php?%20num=1
%20就是空格
绕过之后,需要读取flag,本来我想用system()
函数读取,可以这里禁用了单引号
可以使用php
内置函数scandir()
来读取当前目录下的文件;
这里正则匹配也将/
给禁用了,所以只能使用chr()
函数将ascii值转换为字符串进行拼接得到当前目录下的文件。
.
和/
的ascii值分别为46
和47
payload
/calc.php?%20num=var_dump(scandir(chr(46).chr(47)))
scandir() 获取指定目录下的文件,返回数组
数组需要var_dump()或者print_r()函数进行打印
chr()将ascii值转换为字符串
当前目录下并没有想要的flag
文件,可能在根目录
查看根目录下的文件
/calc.php?%20num=var_dump(scandir(chr(47)))
可以看到在根目录下有一个f1agg
的文件,注意这里是1
查看该文件
/calc.php?%20num=file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))
得到flag
收获:
PHP在接收url传入时,会将空格去除,特殊字符转换为下划线,可以利用绕过waf
例如a.php?空格id=1
chr()函数可以将ascii值转换为字符串
scandir()获取指定目录下的文件返回一个数组
file_get_contents()获取指定文件的内容
var_dump()显示数组详细信息