CTF通关录-warmup
往常一样打开题目
得到一个这个

这个表情包,卧槽,好猥琐!!!!
当然我知道,这肯定是迷惑我们,源码看一波:

果然,有玄机,source.php 访问一下

好的,又是一波源码审计,还好不是js,不然头大得很
简单的描述一下,这又是一个文件包含的php文件,可以传入参数file
但是这个是白名单,可以看到白名单里有个hint.php
尝试搞一下咯

可恶!!!!,虽然不是flag,但是也给出了提示了flag在这个文件ffffllllaaaagggg
那么怎么才能绕过这个白名单嘞?
直接看checkFile这个类吧

整体逻辑至上而下就是先检查你这个page里面有没有值,是不是字符串
然后检查内容是否在白名单
然后再通过截取字符?前面的内容再来检测是否在白名单
然后关键点来了这里进行了url解码
然后重复上面步骤。
这里我有一个思路就是
include函数有个神奇的功能,就是如果第一个包含的文件找不到,它接着包含/后面的文件, 它这里值检测了?前面的内容是否在白名单里,我可以用?作为分隔后面再加上我要包含的文件,/前面的文件名字以及类型因为有个?肯定不会包含成功的,他就会包含我/后面指定的文件,看样子,思路很正确,是不是就试一下了
这里是引用
试了一下,成功的包含了hint.php这个文件
尝试着去包含ffffllllaaaagggg这个文件 这一层目录没有返回为空
尝试上层目录,尝试上层目录,尝试上层目录
我吐了,我这下终于知道它文件名为啥重写4次了 暗示四个…/
这里再用第二个思路,我把?二次url编码成%253f,把第一个截取?前面的截取字符这个语句绕过,让它截取不到,还是原传入的page内容,然后就让它解码,然后再截取?前面的字符,就能过了
如果有多种思路,建议都尝试一下!