picoCTF 2022 St3g0 writeup
コンテスト中に解けなかった問題の復習です。
問題文
Download this image and find the flag.
で、imageにリンクがついていて、画像が一枚与えられる。
ヒント
We know the end sequence of the message will be $t3g0.
解法1
foremostをかけてみたりしましたが、いまいち、どのツールもピント来ずに、解けませんでした。で、kusuwadaさんのwriteup picoCTF2022 [Forensics] writeup - 好奇心の足跡 を読む。なんと、画像に埋め込む系のツール一式が入ったやつがあるとのこと(全然知らなかったー)
とは言いつつ、今回は、そのstego toolkitの中にもある zsteg
というツールだけでも解けるらしい。
(rubyの)gemがインストールするのに必要になる。(私のCTF環境は、macOSでDockerを利用)
apt -y install ruby-full
で、rubyをインストールして、
gem install zsteg
をする。これで、 zsteg
が使えるようになった。
Usage: zsteg [options] filename.png [param_string] -c, --channels X channels (R/G/B/A) or any combination, comma separated valid values: r,g,b,a,rg,bgr,rgba,r3g2b3,... -l, --limit N limit bytes checked, 0 = no limit (default: 256) -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 --invert invert bits (XOR 0xff) -a, --all try all known methods -o, --order X pixel iteration order (default: 'auto') valid values: ALL,xy,yx,XY,YX,xY,Xy,bY,... -E, --extract NAME extract specified payload, NAME is like '1b,rgb,lsb' --[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) --shift N prepend N zero bits -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
なんかいろいろあるけれども、 -a
オプションが、tray all known methodsなので、最強そう。
# zsteg -a pico.flag.png b1,r,lsb,xy .. text: "~__B>VG?G@" b1,g,lsb,xy .. file: dBase III DBT, version number 0, next free block index 3549684369 b1,g,msb,xy .. file: dBase III DBT, version number 0, next free block index 3418965897 b1,b,lsb,xy .. file: dBase III DBT, version number 0, next free block index 2623130757 b1,rgb,lsb,xy .. text: "picoCTF{7h3r3_15_n0_5p00n_a9a181eb}$t3g0" b1,abgr,lsb,xy .. text: "E2A5q4E%uSA" b2,b,lsb,xy .. text: "AAPAAQTAAA" b2,b,msb,xy .. text: "HWUUUUUU" b3,r,lsb,xy .. file: gfxboot compiled html help file
結構、長い出力が現れる。最初の方に書いてあった。
解法2
せっかくなので、 stego-toolkit
を使ってみる。Usageの手順に従う。
Docker pullする(結構時間かかる)。
docker pull dominicbreuker/stego-toolkit
イメージを起動。
docker run -it --rm -v /loca/path/to/picoCTF2022/stage/data:/data dominicbreuker/stego-toolkit /bin/bash
実行する。
check_png.sh pico.flag.png
大量に出力が出てくるのですが、結局、zstegしか、ヒットしてなかった模様。