關於圖片類型的Forensic 如果出現在 CTF 上,我都覺得是通靈題
所以只要遇到圖片的 forensic 題,我都會盡可能找可以無腦砸下去就可以解出來的工具,因此今天要來介紹幾個我覺得好用的圖片鑑識工具。
下載連結:https://github.com/zed-0xff/zsteg
專門針對 PNG 跟 BMP 做 steganography 探測。例如偵測 LSB 隱寫、ZLIB 壓縮後的隱藏資料、OpenStego、Camouflage 等格式。用於 CTF 隱藏資料快速找訊息
$ zsteg -h
Usage: zsteg [options] filename.png [param_string]
-a, --all try all known methods
-E, --extract NAME extract specified payload, NAME is like '1b,rgb,lsb'
Iteration/extraction params:
-o, --order X pixel iteration order (default: 'auto')
valid values: ALL,xy,yx,XY,YX,xY,Xy,bY,...
-c, --channels X channels (R/G/B/A) or any combination, comma separated
valid values: r,g,b,a,rg,bgr,rgba,r3g2b3,...
-b, --bits N number of bits, single int value or '1,3,5' or range '1-8'
advanced: specify individual bits like '00001110' or '0x88'
--lsb least significant bit comes first
--msb most significant bit comes first
-P, --prime analyze/extract only prime bytes/pixels
--shift N prepend N zero bits
--invert invert bits (XOR 0xff)
--pixel-align pixel-align hidden data
Analysis params:
-l, --limit N limit bytes checked, 0 = no limit (default: 256)
--[no-]file use 'file' command to detect data type (default: YES)
--no-strings disable ASCII strings finding (default: enabled)
-s, --strings X ASCII strings find mode: first, all, longest, none
(default: first)
-n, --min-str-len X minimum string length (default: 8)
-v, --verbose Run verbosely (can be used multiple times)
-q, --quiet Silent any warnings (can be used multiple times)
-C, --[no-]color Force (or disable) color output (default: auto)
PARAMS SHORTCUT
zsteg fname.png 2b,b,lsb,xy ==> --bits 2 --channel b --lsb --order xy
直接把圖片用zsteg分析
$ zsteg pico.flag.png
b1,r,lsb,xy .. text: "~__B>wV_G@"
b1,rgb,lsb,xy .. text: "picoCTF{7h3r3_15_n0_5p00n_96ae0ac1}$t3g0"
b1,abgr,lsb,xy .. text: "E2A5q4E%uSA"
b2,b,lsb,xy .. text: "AAPAAQTAAA"
b2,b,msb,xy .. text: "HWUUUUUU"
b2,a,lsb,xy .. file: Matlab v4 mat-file (little endian) ><�P, numeric, rows 0, columns 0
b2,a,msb,xy .. file: Matlab v4 mat-file (little endian) | <�, numeric, rows 0, columns 0
b3,r,lsb,xy .. file: gfxboot compiled html help file
b4,r,lsb,xy .. file: Targa image data (16-273) 65536 x 4097 x 1 +4352 +4369 - 1-bit alpha - right ""
b4,g,lsb,xy .. file: 0420 Alliant virtual executable not stripped
b4,b,lsb,xy .. file: Targa image data - Map 272 x 17 x 16 +257 +272 - 1-bit alpha ""
b4,bgr,lsb,xy .. file: Targa image data - Map 273 x 272 x 16 +1 +4113 - 1-bit alpha ""
b4,rgba,lsb,xy .. file: Novell LANalyzer capture file
b4,rgba,msb,xy .. file: Applesoft BASIC program data, first line number 8
b4,abgr,lsb,xy .. file: Novell LANalyzer capture file
就直接得到了flag
下載連結:https://github.com/ReFirmLabs/binwalk
他可以分析圖片是否有隱藏的檔案,並將隱藏檔案塊挖出來。對於圖片裡面被 embed 的檔案或壓縮段非常方便。
例子:picoctf 2021 Matryoshka doll
這題下載後可以用binwalk 看看
$ binwalk dolls.jpg
/Users/yunshiuan/lab/dolls.jpg
--------------------------------------------------------------------------------------------------------------------------------------------------
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------------------------------------------------------------------------
0 0x0 PNG image, total size: 272492 bytes
272492 0x4286C ZIP archive, file count: 1, total size: 379130 bytes
--------------------------------------------------------------------------------------------------------------------------------------------------
Analyzed 1 file for 85 file signatures (187 magic patterns) in 6.0 milliseconds
發現他裡面有zip 檔 可以把它extra 出來
$ binwalk -e dolls.jpg
/Users/yunshiuan/lab/extractions/dolls.jpg
--------------------------------------------------------------------------------------------------------------------------------------------------
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------------------------------------------------------------------------
0 0x0 PNG image, total size: 272492 bytes
272492 0x4286C ZIP archive, file count: 1, total size: 379130 bytes
--------------------------------------------------------------------------------------------------------------------------------------------------
[#] Extraction of png data at offset 0x0 declined
[+] Extraction of zip data at offset 0x4286C completed successfully
他會在現在的所在位置創建一個 extractions 資料夾,進入之後裡面後又有一個jpg,就跟他的圖片一樣一層一層的用 binwalk 解。最後就會拿到flag
下載連結:https://www.kali.org/tools/foremost/
foremost 跟 binwalk 類似,也是在分離隱寫的檔案,foremost 也可以拿來恢復資料。
剛剛 binwalk 那題也可以用 foremost 解
$ foremost dolls.jpg -T
foremost: /opt/homebrew/etc/foremost.conf: No such file or directory
Processing: dolls.jpg
|foundat=base_images/2_c.jpgUT
下載連結:https://github.com/Giotino/stegsolve
網頁版:https://georgeom.net/StegOnline/upload
GUI 工具,可視化地查看圖片像素 / RGB / alpha 通道 /做 XOR /顏色通道切割,適合人工探索圖片裡的變化/隱寫的痕跡,這個工具也可以解LSB。
這題下載後是一個png 檔,丟進 stegsolve 看一下
下面會有左右箭頭都按按看
在 Red plane 0 的情況下出現 QRcode ,掃了就會是 flag
除了看每個通道外還可以去Analyse 功能中可以看 File format 以及提出LSB 資料...等等
下載連結:https://imhex.werwolv.net/
十六進位/二進位編輯器,可用來檢查圖片的 header、檔案結構、metadata 有沒有被動過或有異常,介面還不錯看。
下載連結:https://www.libpng.org/pub/png/apps/pngcheck.html
檢查 PNG 檔案的結構正確性,檢測 chunk 是否完整、CRC 是否正確。若隱寫工具改動了部分 chunk,檔案可能破壞或檢查出錯。
下載連結:https://github.com/flawwan/modsize
一款專門調整圖片尺寸 metadata 的工具,或檢查圖片尺寸/metadata 跟真實圖像的 mismatch(我自己找的這個 library 可以用來看 image metadata 裡頭尺寸標記會不會被偽造)。
以他github 的X-MAS CTF 2018 的題目測試
可以成功修改 height
有這些工具之後還蠻大程度幫助我在遇到圖片鑑識時可以很快就解決,或很快直接放棄,如果有什麼其他好用的圖鑑鑑識工具也歡迎跟我說。