先信息收集
源代码
目录扫描
也扫到了source.php
那现在就更改url进入source.php
发现了源代码,进行代码审计:
这一段看到了include看来是文件包含,我们需要上传file的值,同时通过checkfile函数检查
checkfile:
从上到下:
1.传进来的参数不能为空
2.传进来的参数必须包含source.php或者hint.php中一个
3.传进来的参数必须有?,同时在?之前必须是source.php或者hint.php其中一个
这里必须理解mb_substr函数的意思 菜鸟教程:
也必须理解in_array函数意思 W3school:
上面代码
就是新拼接一个_page对象,内容是从头开始到page里第一个?出现为止,然后拿_page这个新拼接的去跟whitelist对比,必须包含才能过
之后进行了一次url编码
知道代码原理后,那现在就可以构造绕过了
但现在还有一个问题,flag在哪里?
我们还有一个条件没看,hint.php
提示flag在这个目录下
那我们的payload已知格式:file=source.php?
现在后面得跟上flag路径,我们用目录穿越../../../../../../ffffllllaaaagggg
那么payload就是?file=source.php?../../../../../../ffffllllaaaagggg
成功得出flag