[HCTF 2018]WarmUp WP
打开靶机以后是一个滑稽笑脸,然后查看一下页面源代码。
发现了source.php,这肯定要看一看的呀。
这个php文件是一大段代码
白名单有两个,打开另一个叫hint的,可以知道flag的文件名叫ffffllllaaaagggg。
一点一点来分析就行,最下面的一段是程序的全局代码(应该是这么叫的吧),得三个都满足才能得到文件,也就是要求这个file不为空,为字符串,还能通过上面的checkfile函数,才能得到文件。
再来分析一下这个checkfile文件
有四个if语句,第一个是return false,所以要保证第一个不满足,然后再剩下的三个return true的语句中,随意满足一个就可以。
然后再逐一分析一下每一个语句的意思:
- 首先是定义了一个白名单。
- 然后下面这个if的意思是,为零或不是字符串就返回false。
- 第二个if是检查你的page是不是白名单的内容,如果是就直接返回true。
- 如果page里面带有?,就截取?之前的值赋值给_page。
- 第三个if再检查是否在白名单里面。
- 再次给_page赋值,将其赋值为url解码后的page。
- 如果_page有?,则截取-page(URL解码后的page)两个?中间的值。
- 检测_page是否在whitelist中。
- 如果上面四个语句均未有返回值,则返回false。
不难看出,前三个if语句很难完成
第一个返回值不可用,第二个直接判断也不行,第三个是截断?之前的,也不行,只有通过第四个构造。
第四个因为在服务器会解码一次,然后checkfile函数又解码一次,所以要对?进行url编码两次,就是%253f。
直接放payload。
/index.php?file=source.php%253f../../../../../ffffllllaaaagggg