GDG Algiers CTF 2022 Writeup
Contents
URL: https://ctf.gdgalgiers.com/challenges
2022年の10月頃に参加したCTFです。復習をしたので、一個Writeupを残しておきます。
CTFTimeの履歴によると、70点を獲得し、最終順位は530位だったようです。
[Misc]: Intruder
Challenge
We heard a rumor that an intruder is in our GDG club and he’s providing our enemies sensitive data to knock us down. We got this image through the network. Your task is to figure out the way he transmitted the data.
Attachment:
- AK.png
Solution
これはイベント中には解けなかったやつです。
まず、以下がOfficial Writeupです。
https://github.com/GDGAlgiers/gdg-algiers-ctf-2022-writeups
Official Writeupでは、pngcheckを使ったあとに、IDATデータをなんらかして取り出しているようですが、自分はzstegで取り出しました。
まずは、zstegを実行したときの結果。
$ zsteg AK.png [?] 413 bytes of extra data after zlib stream extradata:0 .. file: zlib compressed data 00000000: 78 9c ed d3 41 6a c4 30 10 44 d1 2b 25 cc fd ef |x...Aj.0.D.+%...| 00000010: 96 6d c0 74 f1 d5 32 66 ac fe d4 c6 d8 4a ab 9e |.m.t..2f.....J..| 00000020: 32 fa fc 7c 8c 31 c6 18 63 8c 79 2e bf 38 d5 fa |2..|.1..c.y..8..| 00000030: eb fb ff 6f f2 5f f5 3a a8 9b a3 e3 6b 48 4f de |...o._.:....kHO.| 00000040: bc d7 41 dd 34 1d d9 bd 5a 5f 4d 5e d5 ed 9c 80 |..A.4...Z_M^....| 00000050: 3a 75 79 5f a2 de e9 a0 4e dd ea e4 6a c2 93 1d |:uy_....N...j...| 00000060: d4 9d a7 e3 bb 57 22 32 33 df bb 9d 9e ea ce d3 |.....W"23.......| 00000070: 91 64 e9 fe 33 ef a0 6e 82 ae 97 eb 5e bc 6d 35 |.d..3..n....^.m5| 00000080: e1 7b a2 ee 1b 74 d5 af 9a ff e6 f9 dd cc 2e 72 |.{...t.........r| 00000090: 3e ea d4 e5 6e 95 28 af 5f 55 e4 53 52 77 b6 8e |>...n.(._U.SRw..| 000000a0: 78 c9 09 e4 6e e4 ac c8 4a 75 73 74 55 b7 bc be |x...n...JustU...| 000000b0: e7 e2 0d ef ba 71 ea de ab db 99 9f 5d 57 7b f5 |.....q......]W{.| 000000c0: f5 de e6 ea ce d0 e5 7b b7 7a 13 7b 5f 73 78 13 |.......{.z.{_sx.| 000000d0: 75 27 e9 88 34 ab 79 37 f2 26 ef a2 6e a6 2e cf |u'..4.y7.&..n...| 000000e0: c9 fd 89 9d f7 cc 52 75 73 74 b9 43 be 65 3d 1d |......Rust.C.e=.| 000000f0: d9 f1 ae 7b a7 ee 8d 3a 22 22 cd 79 9f d5 09 f9 |...{...:"".y....| meta date:create .. text: "2013-03-24T23:31:44+00:00" meta date:modify .. [same as "meta date:create"] meta software .. text: "ImageMagick 6.6.9-7 2012-08-17 Q16 http://www.imagemagick.org" meta Thumb::Document::Pages.. 00000000: 31 |1 | meta Thumb::Image::height.. 00000000: 38 35 34 |854 | meta Thumb::Image::Width.. 00000000: 32 33 36 35 |2365 | meta Thumb::Mimetype.. text: "image/png" meta Thumb::MTime .. text: "1364167904" meta Thumb::Size .. text: "8.094MBB" meta Thumb::URI .. text: "file:///tmp/localcopy_5f9283566320-1.png" imagedata .. text: "YO[Sf$0&"
ここから、extradata:0 を取り出していきます。
$ zsteg -E "extradata:0" AK.png > extracted $ file extracted extracted: zlib compressed data $ zlib-flate -uncompress < extracted 3030303030303030303030303030303030303030...(snip)...03030303030313131313131313...(snip)...
30と31の2つの値が見られるので、30を1に、31を0に変換します。これは、テキストエディタ(emacs)でやりました。
イベント中では、ここでstuckして降参しました。。。
Official Writeupによると、このデータのサイズが12321 (111 x 111) であることから、QRコードであることが予想できる、とのこと。
Emacsでファイルを保存すると、どうしても最後に改行が入ってしまってサイズが12322になるので、ちょっと気づきにくいかもです。。。
$ ls -al aaa.txt | awk '{print $5, $9}' 12322 aaa.txt
ということで、echoを使ってファイルに保存します。
$ echo -n "00000000...(snip)..." | wc -c 12321 $ echo -n "00000000...(snip)..." > aaa.txt $ ls -al aaa.txt | awk '{print $5, $9}' 12321 aaa.txt
ちなみに、Terminalで出力して、ウィンドウサイズを調整すると、QRコードっぽいのがすでに確認できます。
この手のQRコードのデータは、ツールを使って解読できた記憶があって、自分のブログを遡って見てみたら以下でやってました。
ツールは以下です。ちなみに、Python2で動くツールです。
https://github.com/waidotto/strong-qr-decoder
まずは正方形にして、ファイルに保存します。
$ echo -n "00000000...(snip)..." | fold -111 > aaa.txt
$ python ./strong-qr-decoder/sqrd.py aaa.txt error: 辺の長さがおかしいです
どうやら、111 x 111 という正方形はQRコードとしては無効らしいです。
余分な箇所を削除して、89 x 89 で試してみましたが、それでもダメでした。。。
$ cat aaa.txt | head -n 100 | tail -n 89 > bbb.txt $ cat bbb.txt | cut -c 12-100 > ccc.txt $ python ./strong-qr-decoder/sqrd.py ccc.txt Traceback (most recent call last): File "./strong-qr-decoder/sqrd.py", line 1025, innum = int(data_bits[:10], 2) ValueError: invalid literal for int() with base 2: ''
Solutionとしては、やっぱり一度画像にしてからQRコードを読み取った方がいいみたいです。
これは、過去に以下のCTFで似たようなものをやっていたので、そのときのコードを流用しました。
aaa.txt は予め以下のように作成しておきます。
$ echo -n "00000000...(snip)..." | fold -111 > aaa.txt
書いたコード:
|
|
ちなみに、Official Writeup のコードの中で、MAX=25というのは間違いで、MAX=111が正解ですね。
Flag: CyberErudites{pN6_ChUnK5_4r3_N1c3_P14C3_70_H1d3}
Author CaptureAmerica @ CTF フラxxグゲット
LastMod 2023-01-17