攻防世界-warmup
题目打开是一张滑稽的图片
按照惯例打开源码,发现存在文件source.php
进入source.php文件后,可查看其源码
在源码中又发现一个hint.php文件,进去查看
可以看出flag就在文件ffffllllaaaagggg中,然后对source.php的源码进行审计,发现其想要通过include去构造包含文件的话,必须先满足三个条件:
1.变量file必须非空;
2.变量file必须是个字符串;
3.变量file必须通过checkFile函数的验证
此时便可以进行构造payload了,因为所构造的payload肯定满足前两个条件,我们只需要将重心放在第三个条件也就是checkFile函数上
函数定义了一个白名单whitelist,出现了4个if语句:
1.如果$page不是字符串,则返回false;
2.如果$page在whilelist中,则返回true;
3.截取传进参数中?之前的部分,若该部分在whitelist中,则返回true
4.先对构造的payload进行url解码,再截取传进参数中?之前的部分,若该部分在whitelist中,则返回true
针对第三个条件进行payload构造,此时根据include的函数特性可知
也就是说,如果参数中包含../这样的路径,解析器则会忽略../之前的字符串而去在当前目录的父目录下寻找文件,由文件ffffllllaaaagggg可猜测,应该在四重父目录下去寻找该文件
综上,我们可以构造payload:?source.php?/../../../../ffffllllaaaagggg