1. 程式人生 > >5.zip隱寫術

5.zip隱寫術

light 發現 改變 res tex 數據流 多人 從服務器 文本文件

首先分析pcapng,來得到flag.

先亮出下載地址:http://ctf5.shiyanbar.com/misc/LOL/LOL.pcapng

由於這是.pcapng,需要下載 wireshark 來進行數據包的分析

我們查詢一下http協議流,應為http協議是超文本傳輸協議的縮寫,是用於從服務器傳輸超文本到本地瀏覽器的傳送協議

技術分享圖片

發現有兩個upload的上傳點,我們分別來分析一下數據流

技術分享圖片

技術分享圖片

發現有個LOL.zip文件,我們保存下來.zip後綴名。(另一個為LOL.docx,裏面是一張圖片和一句話

這個文件是一個誤導,重點在zip文件,所以本文不在進行docx的分析,直接從zip開刀)

技術分享圖片

解壓發現是要密碼的,可能這裏很多人會認為解壓密碼隱藏在文檔裏面的圖片裏,然後去做圖片隱寫,

但是這並不是一個正確的方向。

技術分享圖片

看了別人的wpwinhex分析壓縮源文件目錄區知道是偽加密,

第一種方法是:

直接用工具解密。得到四個文本文件。

技術分享圖片

第二種方法是:

把導出後的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隱寫術