过年给自己放假了两天。今天难得闲暇,整一题吧。先在这祝大家新年快乐呀!!!
来到界面
随便点点,发现是图片。然后web第一步,查看源码。似乎没什么发现。
观察url的参数传递,随意修改参数值。将woofers改为woofer。得到提示"仅仅包含两种动物"。
再次修改url值,将woofers修改为woofersu,得到提示使用了include函数
这里猜想,后台文件可能判断url参数里边是否包含了"woofers"这个单词。
根据"include"函数特性,可以利用跨目录包含读取flag文件。测试后需要跨越两级目录。
index.php?category=woofersu../../flag
没有报错,证明的确存在这个文件。但是并没有返回内容,既然是文件包含,伪协议肯定是必不可少的,尝试读取
index.php?category=php://filter/read=convert.base64-encode/resource=woofersu../../flag
将得到的内容进行base64解码即可。
PCEtLSBDYW4geW91IHJlYWQgdGhpcyBmbGFnPyAtLT4KPD9waHAKIC8vIGZsYWd7ZmIzZDMxMTgtMTJhZC00ZjIyLThmODEtZjVlZTkyYjJmMjc4fQo/Pgo=
最后,读取一下index的源码,来验证以下之前的猜想,是否匹配了woofers
index.php?category=php://filter/read=convert.base64-encode/resource=woofersu../../index
读取到后进行base64解码
源码读到,的确是判断了。而且include函数里边会自动补齐".php"后缀。这也解释了为什么只需要"flag","index"就可以读取了(其实报错信息也能观察到)。最要是将源码里的".php"换成其他后缀,那又怎么读取flag呢?就需要涉及到绕过了,这里就不做解释了。