对php中end函数处理数组的进一步理解

发布于 2018-11-22  42 次阅读


昨天在某群看到有人在讨论网鼎杯的题目,然后丢了一个复现链接

这里有个问题让我产生了一个疑问,所以记录一下

原题:Upload Your Shell 复现链接:http://120.79.33.253:9002/

/*为了防止别人的复现关闭,我还是贴一下代码吧.*/

可以看到 本题目的是为了让用户上传一个木马,从而拿到flag

而check filename对文件名进行了限制

百思不得解啊!!(因为在我开始的思路上,$ext经过end($file)后拿到的值会过不了白名单)

找到一篇别的师傅的wp 链接:https://xz.aliyun.com/t/2614

看完我对解题中的思路产生了疑惑 即

在我印象中,end函数应该是返回php数组中最后一个才对,所以end($f)应该是222才对.....

所以我进行了本地验证

得到的确实是下边为1的php昂

我就开始怀疑人生了,这写的什么XX玩意......

直到我像那个写wp的师傅一样,先定义下标1,再定义下标0? 然后得到了和师傅一样的结果


接下来我发现php.net上确实有人证实了这一问题

链接:http://www.php.net/manual/zh/function.end.php

在这里的第一条评论处


总结:

end()函数会返回数组中最后一个函数的值,且把指针移到最后一个

但是end()函数是不会被下标影响的,纵然下标为0,一样也可以是数组中的最后一个元素的值

果然,php是世界上最好的语言。

Comments


请相信,你的指尖拥有改变世界的力量