[RoarCTF 2019]Easy Calc 1
阅读原文时间:2023年07月08日阅读: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值分别为4647

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()显示数组详细信息

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章