攻防世界-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

 

posted @ 2021-08-24 21:48  r1kka  阅读(306)  评论(0)    收藏  举报