BUUCTF之[RoarCTF 2019]Easy Calc

1.题
BUUCTF之[RoarCTF 2019]Easy Calc
2.题样
BUUCTF之[RoarCTF 2019]Easy Calc
3.测试,数字,字母:
BUUCTF之[RoarCTF 2019]Easy Calc
字母都不能计算:
BUUCTF之[RoarCTF 2019]Easy Calc
查看源码,说有WAF,看到提示有一个calc.php文件,访问试试:
![](https://img-blog.csdnimg.cn/20200717120212511.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMTQ3MzA5,size_16,color_FFFFFF,t_70)
访问结果,传参为num,并且有黑名单,过滤了字母t,r,[,]等,基本上一句话是不管用了,数据库查询语句也不香了,select,databases:
BUUCTF之[RoarCTF 2019]Easy Calc
有eval()函数,说不定有代码执行漏洞:eval()代码执行漏洞,1,2
num传参测试:
数字:
BUUCTF之[RoarCTF 2019]Easy Calc
字母:
BUUCTF之[RoarCTF 2019]Easy Calc
查询语句:
BUUCTF之[RoarCTF 2019]Easy Calc
很明显字母都被WAF拦截,利用PHP的字符串解析特性绕过waf,PHP字符串解析特性。由于php在解析url中的参数时,保存前会把num前面的空格去掉再解析,所以在num前加空格可绕过WAF,在num前加个空格,弹出之前代码中的提示,只要在黑名单中,都会提示what are you want to do?:
BUUCTF之[RoarCTF 2019]Easy Calc
试试phpinfo():
BUUCTF之[RoarCTF 2019]Easy Calc
成功执行,PHP函数:
????scandir():以数组形式返回指定目录中的文件和目录
  ????var_dump():输出变量的相关信息。
  ????var_dump():显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
  ????file_get_contents():把整个文件读入一个字符串中。
/在黑名单中,用chr()函数绕过’/'字符,chr(47)
scandir():
BUUCTF之[RoarCTF 2019]Easy Calc
BUUCTF之[RoarCTF 2019]Easy Calc
var_dump():
BUUCTF之[RoarCTF 2019]Easy Calc
var_dump(scandir(chr(47))):
BUUCTF之[RoarCTF 2019]Easy Calc
var_dump(file_get_contents(chr(47).f1agg):
BUUCTF之[RoarCTF 2019]Easy Calc
var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))):
BUUCTF之[RoarCTF 2019]Easy Calc
BUUCTF之[RoarCTF 2019]Easy Calc