记录一下BUUCTF做题,打开靶机
非常好,一个笑脸,查看一下源代码
嗯,有一条注释,source.php,直接访问看看
注意REQUEST方法传的参数“file”,经过重重判断最后生效的是“include”这句
经过empty()、is_string()、chechFile()三个判断
全都通过后被include执行,利用的是include的一个漏洞,这个我真不知道
首先看看include
这有一个漏洞(现在好像被修复了)
就是include file=hint.php?../../../../../../../../../flag,会包含到后面的字符串
先看checkFile函数吧:
前两个判断肯定为真,重点看第三个checkFile函数
首先有个白名单,如果page(file)参数是属于白名单的话 ,直接为true
然后判断是否是白名单,是的话返回true
接下来看mb_strpos()和mb_substr()这个函数
作用就是截取问号之前的字符串
所以,构造的file文件应当以“source.php”或者“hint.php”开头,由hint.php文件可知flag就在ffffllllaaaagggg文件中
构造file=hint.php?../../../../../../ffffllllaaaagggg就可以得到flag