由于不熟悉PHP的几个函数,我查了几个小时才弄明白后面讲的什么!!
我们首先要弄懂的几个php函数:in_array(), mb_substr(), mb_strpos(),

可以看到有注释source.php,访问后可以看到其源码
发现一个hint.php文件,先访问一下
我猜测flag就在这个ffffllllaaaagggg里面
现在我们就开始看看代码中讲的啥!!

这里的整个逻辑就是这里的三个判断,其中最后一个判断是利用函数,前面两个判断是很容易绕过的。
我们这里分析一下,这个函数里讲的啥!!!
这里就相当于创建一个python中的字典(当然这里是php)
然后第一个if条件就是判断这个变量是不是存在以及是不是字符串。
第二个if条件是判断我们传进来的这个参数是不是存在于前面创建的字典中
首先mb_strpos()返回的是?在
p
a
g
e
中
的
位
置
(
也
就
是
一
个
数
)
,
m
b
s
u
b
s
t
r
(
)
函
数
是
在
page中的位置(也就是一个数), mb_substr()函数是在
page中的位置(也就是一个数),mbsubstr()函数是在page字符串中截取从第二参数到第三个参数之间的字符串。
下面就接着判断这个$page是不是开始创建的字典中的值。
这里的代码和上面的代码差不多,唯一就是多了一个urldecode(),
urlencode()函数原理就是首先把中文字符转换为十六进制,然后在每个字符前面加一个标识符%。
urldecode()函数与urlencode()函数原理相反,用于解码已编码的 URL 字符串,其原理就是把十六进制字符串转换为中文字符
当我们这里传进去的是hint.php或者 source.php时,经过urldecode()是不会发生任何变化的。

http://111.198.29.45:58041/?file=hint.php?/././././ffffllllaaaagggg
或者
http://111.198.29.45:58041/?file=hint.php%253f/../../../../ffffllllaaaagggg
***%253f是 ? 的二次编码***因为这里的?第一次会在url中自动解码一次,函数中还有一次。
由此得到flag
至于这里为什么include()会执行成功!!
include函数:以字符‘/’分隔(而且不计个数),如果在前面的字符串所代表的文件无法被PHP找到,则PHP会自动包含‘/’后面的文件——注意是最后一个‘/’。
…/和./以及/的含义
不知道目标文件在几级目录,有几个“…/”,就向上多跳几级。

这篇博客主要探讨了PHP中的三个关键函数:in_array(), mb_substr(), mb_strpos(),并结合了一个CTF(warmup)挑战中的例子进行分析。作者指出,理解这些函数对于解决特定的编程问题至关重要。文章详细解释了每个函数的工作原理,并且通过代码示例展示了如何使用它们。最后,作者揭示了如何利用这些函数解决CTF挑战,从而获取flag。"
118484739,10535438,理解计算机视觉:特征描述符与图像匹配,"['计算机视觉', '图像处理', '特征检测', '图像匹配', 'OpenCV']
806

被折叠的 条评论
为什么被折叠?



