BuuCTF难题详解| Misc | 我爱Linux

栏目介绍

这个栏目是负责写,比较难的Misc,日常记录,如果有错误请及时指出。谢谢
Python 3.7版本
脚本临时学的可能没有那么完美,自己码出来还有很大问题,请见谅。

BuuCTF难题详解| Misc | 我爱Linux

这一题目研究的比较久,现在详细的说一下:
本题要点就是python 序列化内容的存入。
至于序列化是啥:

Python中的Pickle模块实现了基本的数据序列与反序列化。 一、dump()方法 pickle.dump(obj, file,
[,protocol])
注释:序列化对象,将对象obj保存到文件file中去。参数protocol是序列化模式,默认是0(ASCII协议,表示以文本的形式进行序列化),protocol的值还可以是1和2(1和2表示以二进制的形式进行序列化。其中,1是老式的二进制协议;2是新二进制协议)。file表示保存到的类文件对象,file必须有write()接口,file可以是一个以’w’打开的文件或者是一个StringIO对象,也可以是任何可以实现write()接口的对象。
二、load()方法 pickle.load(file)
注释:反序列化对象,将文件中的数据解析为一个python对象。file中有read()接口和readline()接口

转自:https://blog.csdn.net/Yangxing_ch/article/details/105492762

只要明白,他把序列话存进去,我们现在要把它提取出来,所以我们先进行第一部操作,寻找图片中的序列化
在这里插入图片描述
当中我们找到jpg的结尾FFD9
在这里插入图片描述
大概能知道,后门都是序列化文件了。我们把他复制出来全部粘贴出来
在这里插入图片描述
就会是一堆看不懂的序列化文件,我们通过脚本转换一下

import pickle  

fp = open("2.txt","rb+")      ''' 打开序列化文件 '''
fw = open('pickle.txt', 'w')  ''' 打开保存文件 '''
a=pickle.load(fp)             ''' 反序列化文件编译 '''
pickle=str(a)                 ''' 转换成字符串要不然不能保存 '''
fw.write( pickle )            ''' 写入文件 '''
fw.close()                    ''' 关闭文件 '''
fp.close()                    ''' 关闭文件 '''

  

在这里插入图片描述
成功获得坐标代码,然后使用脚本跑一下

fw = open("pickle.txt","r")
text=fw.read( )
i=0
a=0


while i<len(text)+1:
    if(text[i]==']'):
       print('\n')
       a=0
    elif(text[i]=='('):
        if(text[i+2]==','):
            b=text[i+1]
            d=text[i+1]
            b=int(b)-int(a)
            c=1
            while c<b:
                print(" ", end="")
                c += 1
            print(text[i+5], end="")
            a=int(d)
        else:
            b=text[i+1]+text[i+2]
            d=text[i+1]+text[i+2]
            b=int(b)-int(a)
            c=1
            while c<b:
                print(" ", end="")
                c += 1
            print(text[i+6], end="")
            a=int(d)
    i +=1

  

在这里插入图片描述

描一下
在这里插入图片描述

flag{a273fdedf3d746e97db9086ebbb195d6}

感谢大家浏览,要是有帮助点个赞呗~谢谢惹在这里插入图片描述

posted @ 2020-07-16 20:35  水星sur  阅读(966)  评论(2编辑  收藏  举报