BUUCTF-web类-第六题 [RoarCTF 2019]Easy Calc

BUUCTF-web类-第六题 [RoarCTF 2019]Easy Calc
BUUCTF-web类-第六题 [RoarCTF 2019]Easy Calc_第1张图片进入靶场,发现只有一个计算器的页面,
在这里插入图片描述输入1+2看看,返回了答案3
BUUCTF-web类-第六题 [RoarCTF 2019]Easy Calc_第2张图片常规想法,输入单引号试试,弹出了一个窗口
BUUCTF-web类-第六题 [RoarCTF 2019]Easy Calc_第3张图片
经过多个字符测试,发现都会导致弹窗,这时候我们看看F12看看,
在这里插入图片描述
有一段注释说这题有WAF,那肯定思路就是如何绕过WAF拿到flag了
注释下还有一段js代码,通过代码可以发现还有个calc.php页面,于是我们访问这个页面看看
BUUCTF-web类-第六题 [RoarCTF 2019]Easy Calc_第4张图片BUUCTF-web类-第六题 [RoarCTF 2019]Easy Calc_第5张图片
GET传入一个num参数,将这个参数赋值给$str,还创建了一个黑名单,如果传入的num参数中,有字符与黑名单中的字符匹配,则返回“what are you do?”,否则执行eval命令。
eval()函数会将括号内的php语句执行。
于是我们有了大概思路,传入num参数,再想办法绕过过滤,之后利用eval()函数即可。
于是我们开始测试,先给num传入123看看,正常回显123.
BUUCTF-web类-第六题 [RoarCTF 2019]Easy Calc_第6张图片
再传入abc试试,发现页面直接403了,这说明num限制了输入的类型,只能输入数字。
BUUCTF-web类-第六题 [RoarCTF 2019]Easy Calc_第7张图片想了半天怎么绕过,无果,只能去看看writeup了。
看了各writeup后才发现,前面都对了,技巧不会!
这里可以利用PHP字符串解析特性Bypass
具体文章可以参考,讲的很不错。

https://www.freebuf.com/articles/web/213359.html

PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:
1.删除空白符
2.将某些字符转换为下划线(包括空格)
所以我们可以在num前加个空格绕过waf

http://node3.buuoj.cn:28830/calc.php?%20num=abc

BUUCTF-web类-第六题 [RoarCTF 2019]Easy Calc_第8张图片页面正常返回了abc,说明成功绕过了num参数限制,接下来就是绕过过滤和利用eval()执行php命令了。
这里要提到两个php函数
scandir():列出参数目录中的文件和目录
readfile():读取文件内容
利用scandir()找到flag在哪,在利用readfile()读取文件内容,从而得到flag。
构造Payload:

calc.php?%20num=1;print_r(scandir(chr(47)))

chr(47) ==> /,绕过过滤。
47对于ASCII码就是 “/”, 因为我们要从根目录开始找flag所在文件。
在这里插入图片描述发现f1agg文件,于是进一步readfile()查看,一样还是要绕过过滤。

calc.php?%20num=1;print_r(readfile(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))

在这里插入图片描述
拿到flag。
又收获了许多新知识。

你可能感兴趣的:(BUUCTF-web类-第六题 [RoarCTF 2019]Easy Calc)