藍鯨安全CTF打卡題——第一期隱寫術
前言
渣渣一枚,萌新一個,會划水,會喊六六
上一篇文章: ofollow,noindex" target="_blank">藍鯨安全CTF打卡題——第一期密碼學
個人部落格: https://www.cnblogs.com/lxz-1263030049/
本文首發先知社群: 藍鯨安全CTF打卡題——第一期隱寫術
i春秋: 藍鯨安全CTF打卡題——第一期隱寫術
再過幾天就是中秋節了,我打算儘自己最大的能力把藍鯨安全平臺上面的打卡題目的 writeup
整理出來。
有什麼錯誤的地方 希望各位大佬指正(謝謝Orz)
一:雨中龍貓
知識點
圖片原始碼隱寫、base64編碼
解題思路
使用普通的記事本打卡圖片就可以了,這一題感覺有點坑(MISC不按常規套路出牌),使用常規的方法沒有想出來,後來看了塔主的解題視訊(5分鐘的) 裡面說了一下關於 base64
的內容,所以想到了方法(HHHH)
由於題目中提示有答案的格式,所以先對 whalectf
進行 base64
加密( base64加解密平臺 )
在記事本中搜索內容 d2hhbGVjd
(一次一次的嘗試,每一次嘗試就減少幾個字元)
我們能夠看到最後提供的提示是: py
,同樣的操作,我們進行 base64
操作
我們繼續剛剛的操作就會得到
合併兩次得到的結果就會得到: d2hhbGVjdGZ7TG9uZ19tYW9faXNfaGFwcHl9
base64
解密之後得到:
最後得到答案: whalectf{Long_mao_is_happy}
二:追加資料
知識點
檔案繫結、 word
隱藏
檔案繫結的方法
在cmd中
copy /b 1.jpg+2.txt 3.jpg
解題思路
拿到圖片,在 kali
裡面使用 binwalk
工具進行分析
使用命令:
binwalk whalediary.jpg
可以看到一個 zip
壓縮包隱藏在裡面,使用 foremost
命令
使用命令: foremost whalediary.jpg
使用 word
,開啟 docx
檔案就會得到(由於我事先把 word
中的隱藏關閉了,所以開啟的文件可能和沒有關閉的人的不同)
我們只需要注意每一段後面的字母就好,把他們組合起來就是答案(可是我沒有讀懂QAQ)
三:追加資料
知識點
PNG
檔案格式、 zlib
壓縮資料、二維碼識別
解題思路
首先使用 pngcheck
工具檢查圖片的 IDAT
位
使用的命令為: pngcheck.exe -v whalectf.png
可以看到一個IDAT位為0x17345,長度為193 用winhex開啟圖片,找到IDTA塊對應的位置 如圖所示擷取:
這裡不需要擷取長度標誌位 C1
和 IDA
T影象資料塊和最後四位的 CRC
冗餘校驗碼,使用如下指令碼進行分析即可:
# python2 #! /usr/bin/env python import zlib import binascii IDAT='789CA552B911C3300C5B09D87FB99C65E2A11A17915328FC8487C0C7E17BCEF57CCFAFA27CAB749B8A8E3E754C4C15EF25F934CDFF9DD7C0D413EB7D9E18D16F15D2EB0B2BF1D44C6AE6CAB1664F11933436A9D0D8AA6B5A2D09BA785E58EC8AB264111C0330A148170B90DA0E582CF388073676D2022C50CA86B63175A3FD26AE1ECDF2C658D148E0391591C9916A795432FBDDF27F6D2B71476C6C361C052FAA846A91B22C76A25878681B7EA904A950E28887562FDBC59AF6DFF901E0DBC1AB'.decode('hex') result = binascii.hexlify(zlib.decompress(IDAT)) bin = result.decode('hex') print bin print '\r\n' print len(bin)
就會得到如下所示:
一串 0和1
的資料 長度為 1024
是一個正方形 可以想到是要生成一個二維碼,把生成的0和1放在 result.txt
裡面,用如下指令碼生成二維碼
# python2 #! /usr/bin/env python importImage MAX = 32 pic = Image.new('RGB',(MAX*9,MAX*9)) f = open('result.txt','r') str = f.read() i = 0 for y in range(0,MAX*9,9): for x in range(0,MAX*9,9): if(str[i] == '1'): for n in range(9): for j in range(9): pic.putpixel([x+j,y+n],(0,0,0)) else: for k in range(9): for l in range(9): pic.putpixel([x+l,y+k],(255,255,255)) i = i+1 pic.show() pic.save("flag.png") f.close()
得到二維碼:
使用 QR_Research
或者其它工具也是可以的,掃描後就出現 flag
最後得到答案: whale{QR_code_and_png}
四:破碎的心
知識點
條形碼
解題思路
我們把圖片下載下來之後會發現這是一個不完整的條形碼
我們選擇其中的條形碼還原即可 在畫圖裡,先用矩形框選擇一些連續的條紋,按住 ctrl
,按上下鍵不斷還原即可
最後用 BcTester
開啟即可得到 flag
最後得到答案: whale{BarC0d3_Pick}
五:我們不一樣
知識點
雙圖對比 compare
命令的使用
解題思路
首先使用 Linux
中的 binwalk
命令
我們可以看到有兩張圖 使用compare命令
看到圖片左下角有一個非常小的變化,使用 python
指令碼打印出來
# python2 #coding:utf-8 import Image import random img1 = Image.open("1.png") im1 = img1.load() img2 = Image.open("2.png") im2 = img2.load() a='' i=0 s='' for y in range(img1.size[1]): for x in range(img1.size[0]): if(im1[x,y]!=im2[x,y]): print im1[x,y],im2[x,y] if i == 8:#以8個為一組 打印出字串 s=s+chr(int(a,2)) a='' i=0 a=a+str(im2[x,y][2]) i=i+1 s=s+'}' print s
執行之後就會得到:
我們可以看到它的藍色通道不一樣,它是把藍色畫素轉換成為 0和1 , 8 個位一組轉換成字元,當然 flag 也是在
最後的答案: whale{w3_ar3_d1ffe2en7}
六:黑白打字機
知識點
二維碼、 steganography
、五筆編碼
解題思路
把圖片下載之後發現,不是正確的二維碼,需要使用光影魔術手進行反色處理,再使用 QR_Research
就可以得到:
提示我'你會五筆嗎'
圖片的名字 yhpargonagets
反過來是 steganography
,
百度得到這個工具(下載需要積分,不過我有)我們使用這個工具解密,勾選 Decode
和 Decrypt
,發現需要密碼
之前提示我們的話,我們針對每個字都進行五筆解密查詢(一定要86版五筆)
最終得到一串字元 wqiywfcugghgttfnkcg
,以此當密碼輸入,就會得到:
最後得到答案: venusctf{V3nus_St3gan0graph1_1s_g00d}
參考資料:
Image Steganography: https://download.csdn.net/download/qq_41187256/10682803
CTF Wiki: https://ctf-wiki.github.io/ctf-wiki/misc/introduction/