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}
感谢大家浏览,要是有帮助点个赞呗~谢谢惹
本文地址:https://blog.csdn.net/pone2233/article/details/107392868