本文共 681 字,大约阅读时间需要 2 分钟。
WarmUp
打开网页一个滑稽,看源码,发现注释有source.php
搜索此目录下的source.php文件,发现php代码。
最开始的类emmm就放在哪里,在后面才会调用里面的函数。接着往下看
传参file不为空,并且是字符串,并且经过了emmm::checkFile函数处理后结果都为true,才会把flag引入。
checkFile会截取file中?之前的部分,看是否在白名单里面;第二次会进行urldecode,再次检查。所以有两种。
构造payload ?file=source.php?/../../../../../../ffffllllaaaagggg
或者 ?file=source.php%253f/../../../../../../ffffllllaaaagggg
%253f是?两次urlencod的结果,因为服务器会自动解一次码变成%3f,在函数中解码一次变成?
至于为什么那么多的上级目录,现在还不知道,有哪位大佬知道麻烦告知一下。
mb_strpos 查找字符串在另一个字符串中首次出现的位置。如果没有找到,它将返回false。
mb_strpos($_page . '?', '?')
效果是如果page里面没有?,则返回page最后的位置。如果有的话,返回第一个
mb_substr获取部分字符串.(下标从0开始)
$_page = mb_substr($page, 0, mb_strpos($page . '?', '?') );
效果就是$_page= $ page?前面的东西
in_array 检查数组中是否存在某个值
转载地址:http://vvnh.baihongyu.com/