5.zip隱寫術
首先分析pcapng,來得到flag.
先亮出下載地址:http://ctf5.shiyanbar.com/misc/LOL/LOL.pcapng
由於這是.pcapng,需要下載 wireshark 來進行數據包的分析
我們查詢一下http協議流,應為http協議是超文本傳輸協議的縮寫,是用於從服務器傳輸超文本到本地瀏覽器的傳送協議
發現有兩個upload的上傳點,我們分別來分析一下數據流
發現有個LOL.zip文件,我們保存下來為.zip後綴名。(另一個為LOL.docx,裏面是一張圖片和一句話
這個文件是一個誤導,重點在zip文件,所以本文不在進行docx的分析,直接從zip開刀)
解壓發現是要密碼的,可能這裏很多人會認為解壓密碼隱藏在文檔裏面的圖片裏,然後去做圖片隱寫,
但是這並不是一個正確的方向。
看了別人的wp,用winhex分析壓縮源文件目錄區知道是偽加密,
第一種方法是:
直接用工具解密。得到四個文本文件。
第二種方法是:
把導出後的LOL.zip文件拉近winhex中來分析
分析前先聽我來科普一下....這個zip文件的構成:
一個 ZIP 文件由三個部分組成: 壓縮源文件數據區+壓縮源文件目錄區+壓縮源文件目錄結束標誌 壓縮源文件數據區: 50 4B 03 04:這是頭文件標記(0x04034b50) 14 00:解壓文件所需 pkware 版本 00 00:全局方式位標記(有無加密) 08 00:壓縮方式 5A 7E:最後修改文件時間 F7 46:最後修改文件日期 16 B5 80 14:CRC-32校驗(1480B516) 19 00 00 00:壓縮後尺寸(25) 17 00 00 00:未壓縮尺寸(23) 07 00:文件名長度 00 00:擴展記錄長度 6B65792E7478740BCECC750E71ABCE48CDC9C95728CECC2DC849AD284DAD0500
壓縮源文件目錄區:50 4B 01 02:目錄中文件文件頭標記(0x02014b50) 3F 00:壓縮使用的 pkware 版本 14 00:解壓文件所需 pkware 版本 00 00:全局方式位標記(有無加密,這個更改這裏進行偽加密,改為09 00打開就會提示有密碼了) 08 00:壓縮方式 5A 7E:最後修改文件時間 F7 46:最後修改文件日期 16 B5 80 14:CRC-32校驗(1480B516) 19 00 00 00:壓縮後尺寸(25) 17 00 00 00:未壓縮尺寸(23) 07 00:文件名長度 24 00:擴展字段長度 00 00:文件註釋長度 00 00:磁盤開始號 00 00:內部文件屬性 20 00 00 00:外部文件屬性 00 00 00 00:局部頭部偏移量 6B65792E7478740A00200000000000010018006558F04A1CC5D001BDEBDD3B1CC5D001BDEBDD3B1CC5D001
壓縮源文件目錄結束標誌:50 4B 05 06:目錄結束標記 00 00:當前磁盤編號 00 00:目錄區開始磁盤編號 01 00:本磁盤上紀錄總數 01 00:目錄區中紀錄總數 59 00 00 00:目錄區尺寸大小 3E 00 00 00:目錄區對第一張磁盤的偏移量 00 00:ZIP 文件註釋長度
綜上,也就是說,當壓縮源文件目錄區的全局方式位標記被更改,就會限制Zip文件的可讀性
所以,我們就會想到,修改後的話,就會改變Zip文件的可讀性了
從百度上找到的資料說,全局方式位標記如果第二位是偶數,那麽就不加密,反之,如果是奇數的話,就是加密的
那我們就可以通過WinHex將09 00 -->修改為--> 00 00,就能成功得到裏面的文件了。
修改完成後點擊保存,發現可以成功免密解壓
當我們先打開一個解壓後的文件11.txt ,發現文件是以 8950.... 開頭的文件夾,
果然是png圖片,這樣的話,我們推理應該是png圖片被hex16編碼
在這裏感謝是是s1ye老哥提供的python代碼,實現了hex16還原png圖片的操作
#-*- coding:utf8 -*-
import sys
import os
def conversion(hex):
cipher = hex
name = raw_input(‘input filename:‘)
open(name, "wb").write(cipher.decode("hex"))
print "file path:",os.path.abspath(name)
def usage():
print ‘[*] conversion for hex‘
print ‘[*] usage:‘
print ‘ hex.py hex‘
print ‘ hex.py filename.txt‘
print ‘[*] -*-by s1ye-*-‘
def main():
if len(sys.argv)<2:
usage()
else:
if sys.argv[1].split(‘.‘)[-1] == ‘txt‘:
with open(sys.argv[1]) as f:
data = f.read()
conversion(data)
else:
conversion(sys.argv[1])
if __name__ == ‘__main__‘:
main()
成功解的1.png圖片為
給人感覺就是二維碼,我們嘗試解開其他
當然還不能忘了掃一掃
5.zip隱寫術