BUUOJ-web-1 PHP的代码审计
进入网站后,看到一张滑稽的图片,打开网页的源代码,发现有一个被注释的source.php文件,所以我们就尝试着用php打开这个文件
打开文件后
注意这里不能在打开源代码的网页去打开source.PHP,必须在原网页中去打开
接着开始审计代码
这一段代码是主代码块,可以轻易看出,必须满足传入(request)的file满足if中的is-string以及checkfile函数才能exit。
这里有四个if和对应的返回值,
第一个if语句对变量进行检验,要求
p
a
g
e
为
字
符
串
,
否
则
返
回
f
a
l
s
e
第
二
个
i
f
语
句
判
断
page为字符串,否则返回false 第二个if语句判断
page为字符串,否则返回false第二个if语句判断page是否存在于
w
h
i
t
e
l
i
s
t
数
组
中
,
存
在
则
返
回
t
r
u
e
第
三
个
i
f
语
句
判
断
截
取
后
的
whitelist数组中,存在则返回true 第三个if语句判断截取后的
whitelist数组中,存在则返回true第三个if语句判断截取后的page是否存在于
w
h
i
t
e
l
i
s
t
数
组
中
,
截
取
whitelist数组中,截取
whitelist数组中,截取page中’?'前部分,存在则返回true
第四个if语句判断url解码并截取后的
p
a
g
e
是
否
存
在
于
page是否存在于
page是否存在于whitelist中,存在则返回true
若以上四个if语句均未返回值,则返回false
mb_substr(str1,start,[length][,[str2]]):是在str1从start开始length为长度截取字符串,str2是表示字符编码
mb_strpos(str1,str2):查找str2在str1中出现的位置
$_page . '?表示在page后拼接?,相当于这里在过滤问号即绕开函数检测,
这里的urldecode是将?转换为asci码,所以最后应传入的参数为source.php?file=source.php%253f…/…/…/…/…/ffffllllaaaagggg
其中…/表示上一级目录,到底几个…/。尝试就行了