代码编织梦想

在这里插入图片描述有一段注释说这题有WAF,那肯定思路就是如何绕过WAF拿到flag了
在这里插入图片描述进入题目是一个计算器,只能输入正常的数学计算式,字母什么的都输入不了,回显计算不出来,查看源码,发现是在calc.php里面计算的,而且提示说存在Waf,这些字母应该就是Waf过滤的,访问calc.php
在这里插入图片描述

<?php
error_reporting(0);
if(!isset($_GET['num'])){
    show_source(__FILE__);
}else{
        $str = $_GET['num'];
        $blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];//过滤了很多字符,num不能是字母
        foreach ($blacklist as $blackitem) {
                if (preg_match('/' . $blackitem . '/m', $str)) {
                        die("what are you want to do?");
                }
        }
        eval('echo '.$str.';');
}
?>

于是我们有了大概思路,传入num参数,再想办法绕过过滤,之后利用eval()函数即可
在这里插入图片描述这里可以利用PHP字符串解析特性Bypass
具体文章可以参考,讲的很不错

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

PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:
1.删除空白符
2.将某些字符转换为下划线(包括空格)
所以我们可以在num前加个空格绕过waf
在这里插入图片描述页面正常返回了abc,说明成功绕过了num参数限制
在这里插入图片描述这里要提到两个php函数
scandir():列出参数目录中的文件和目录
readfile():读取文件内容
利用scandir()找到flag在哪,再利用readfile()读取文件内容,从而得到flag
在这里插入图片描述chr(47) ==> /,绕过过滤。
47对于ASCII码就是 “/”,因为我们要从根目录开始找flag所在文件
在这里插入图片描述发现f1agg文件,于是进一步readfile()查看,一样还是要绕过过滤
在这里插入图片描述也可以使用file_get_contents()这个函数
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/weixin_44866139/article/details/106137555