[HCTF 2018]WarmUp 1


一、涉及漏洞类型

文件包含漏洞

代码审计

二、解题思路

查看代码 =>打开提示文件 => 分析代码 => 另一提示文件 => 书写payload

payload

?file=hint.php?../../../../../ffffllllaaaagggg

所以需要考虑的就是如何绕过实现文件包含

思路就是满足前两个判断情况下,使checkFile返回true

在checkFile方法中首先是有3个true是可以返回的,但只有最后两个是可以的。

此时可以构造第一个payload在第一个地方返回

我们可以想象他传入checkFile函数要经历 第一次白名单验证 一次?过滤后他就是hint.php 再进行一次白名单验证 返回为真 则达成条件进行包含得到flag

三、知识点

1.is_string() 

is_string() 函数用于检测变量是否是字符串。

 2.php中的::

php中的::是调用类中的静态方法或者常量,属性的符号

3.mb_substr()

函数返回字符串的一部分

4.mb_strpos():

返回要查找的字符串在别一个字符串中首次出现的位置

5.&&

&& 如果两个操作数都非零,则条件为真;

四、参考

https://www.bilibili.com/video/BV1NU4y1J7si?p=1

https://www.cnblogs.com/xhds/p/12266072.html