iT邦幫忙

2026 iThome 鐵人賽

DAY 10
0
Security

CTF 菜鳥修練日誌系列 第 10 篇

Day 10:【Forensics】圖片裡還有圖片?Steganography 隱寫術入門

  • 分享至 

  • xImage
  •  

前言

在上集 Day 09 中,我們學習了如何透過 file 檢查 Magic Bytes 與使用 exiftool 尋找藏在 Metadata 中的秘密。但如果出題者把 Flag 或另一個壓縮檔直接「嵌入」到圖片的像素或檔案尾端,表面上看起來只是一張普通照片,這時該怎麼辦呢?

這就是 Steganography(隱寫術) 的領域!隱寫術的精髓在於「隱藏資訊的存在本身」。今天我們將探討隱寫術的核心技術原理,並學習如何使用 Linux 鑑識工具把隱藏在裡面的檔案一層層剝出來。


本日目標

透過概念解析與工具操作,掌握以下 Steganography 核心技能:

  1. 理解隱寫術常見的隱藏手法(檔案尾端附加 File Append、LSB 最低有效位元)。
  2. 熟練掌握 binwalk、zsteg 與 steghide 等數位鑑識工具的使用。
  3. 學習如何從圖片中萃取(Extract)出隱藏的嵌入檔案(如 Zip、Tar 或純文字)。

預備觀念一:隱寫術常見藏匿方式

1. 檔案尾端附加(File Append / Polyglot)

  • 原理:許多圖片格式(如 JPEG 的 FF D9 或 PNG 的 IEND)有明確的結束標記(EOF)。作業系統的圖片檢視器讀到結束標記後就會停止讀取,但如果我們在結束標記後面附加一個 .zip 檔,圖片依然能正常開啟,而附加的檔案則隱藏在資料尾端!
  • 偵測與萃取:可使用 binwalk 掃描,或用 foremost 進行檔案切開(Carving)。

2. LSB(Least Significant Bit)最低有效位元隱寫

  • 原理:在 RGB 圖片中,每個像素點由紅、綠、藍三原色組成(各佔 8 bits,值為 0~255)。如果我們改變數值中的「最低有效位元」(例如將 254 改為 255),人類肉眼根本無法察覺顏色的些微變化,但這個 bit 卻可以用來記錄 0 與 1 的秘密訊息!
  • 偵測與萃取:常出現在 PNG 或 BMP 等無損壓縮圖片,可使用 zsteg 或 StegSolve 工具進行分析。

3. 密碼保護型隱寫(Steghide)

  • 原理:將秘密文字或檔案透過密碼加密後,嵌入到 JPEG、BMP、WAV 或 AU 等媒體檔案中。
  • 偵測與萃取:需使用 steghide 工具,並搭配正確的 Passphrase(或爆破密碼)才能解出。

常用實戰工具與指令清單

工具名稱 適用檔案類型 核心功能與常用指令
binwalk 所有檔案 掃描檔案內是否嵌入其他檔案:binwalk target.png自動萃取嵌入檔:binwalk -e target.png
zsteg PNG / BMP 檢測 LSB 隱寫與隱藏通道:zsteg -a target.png
steghide JPEG / WAV / BMP 萃取密碼保護的隱寫檔案:steghide extract -sf target.jpg
strings 所有檔案 快速搜尋檔案中的可讀字串:strings target.jpg | grep -i "pico"

實戰題目:PicoCTF - Matryoshka doll (Steganography 實戰演練)

  • 題目分類: Forensics
  • 題目敘述: 題目給予一張俄羅斯套娃照片 dolls.jpg,提示我們照片內部可能層層嵌套了其他檔案。
    https://ithelp.ithome.com.tw/upload/images/20260924/20184211WrBuvabHNU.png

解題步驟記錄:俄羅斯套娃式的層層解密

步驟一:驗證檔案與初始 binwalk 掃描

在 WSL 環境中使用 file 與 binwalk 確認 dolls.jpg 的真實內容:

file dolls.jpg
# 輸出:dolls.jpg: PNG image data, 594 x 1104, 8-bit/color RGBA

binwalk dolls.jpg

** 掃描結果:**
在位址272492 (0x4286C)發現了Zip archive data,內部包含 base_images/2_c.jpg!
https://ithelp.ithome.com.tw/upload/images/20260924/20184211zsASH8XpPS.png

步驟二:層層剝開套娃(Extract & Unzip Loop)

由於這題構造如同「俄羅斯套娃」,我們必須重複執行binwalk -e萃取與unzip解壓縮:

** 第一層萃取 (dolls.jpg → 2_c.jpg):**

binwalk -e dolls.jpg
cd _dolls.jpg.extracted
unzip 4286C.zip

https://ithelp.ithome.com.tw/upload/images/20260924/20184211sKoFkqyr2s.png

** 二層萃取 (2_c.jpg → 3_c.jpg):**

binwalk -e base_images/2_c.jpg
cd base_images/_2_c.jpg.extracted
unzip 2DD3B.zip

https://ithelp.ithome.com.tw/upload/images/20260924/20184211uhXmppM1Up.png

第三層萃取 (3_c.jpg → 4_c.jpg):

binwalk -e base_images/3_c.jpg
cd base_images/_3_c.jpg.extracted
unzip 1E2D6.zip

https://ithelp.ithome.com.tw/upload/images/20260924/20184211IlnoDd5IV4.png

第四層萃取 (4_c.jpg → flag.txt):

binwalk -e base_images/4_c.jpg
cd base_images/_4_c.jpg.extracted
unzip *.zip

步驟三:取得最終 Flag

進到最內層資料夾後,讀取flag.txt:

cat flag.txt

Flag 輸出:
picoCTF{LL9lb1dR4QbGe4l4iWCvGq9pdtwt7392}
https://ithelp.ithome.com.tw/upload/images/20260924/20184211Idk1QbtzVa.png


上一篇
Day 09:【Forensics】檔案藏身術:ExifTool 詮釋資料與 Magic Bytes
系列文
CTF 菜鳥修練日誌 共 10 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言