1. 程式人生 > 實用技巧 >BuuCTF難題詳解| Misc | 我愛Linux

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}

感謝大家瀏覽,要是有幫助點個讚唄~謝謝惹