欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

BuuCTF难题详解| Misc | 我爱Linux

程序员文章站 2022-12-19 12:50:57
文章目录栏目介绍BuuCTF难题详解| Misc | 我爱Linux栏目介绍这个栏目是负责写,比较难的Misc,日常记录,如果有错误请及时指出。谢谢Python 3.7版本脚本临时学的可能没有那么完美,自己码出来还有很大问题,请见谅。BuuCTF难题详解| Misc | 我爱Linux这一题目研究的比较久,现在详细的说一下:本题要点就是python 序列化内容的存入。至于序列化是啥:Python中的Pickle模块实现了基本的数据序列与反序列化。 一、dump()方法 pickle.du...

栏目介绍

这个栏目是负责写,比较难的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

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

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()                    ''' 关闭文件 '''

BuuCTF难题详解| Misc | 我爱Linux
成功获得坐标代码,然后使用脚本跑一下

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

BuuCTF难题详解| Misc | 我爱Linux
描一下
BuuCTF难题详解| Misc | 我爱Linux

flag{a273fdedf3d746e97db9086ebbb195d6}

感谢大家浏览,要是有帮助点个赞呗~谢谢惹BuuCTF难题详解| Misc | 我爱Linux

本文地址:https://blog.csdn.net/pone2233/article/details/107392868

相关标签: CTF BUUCTF Misc