はじめに
ITスクールRareTECHで学習しているゆーせーです。先日RareTECHのオフラインイベントに参加しました!
そこでチーム対抗でCTFを行いました!
CTFとは?
CTFを初めて聞いたとい方もいると思います。しかし今回はメインテーマではないので、簡潔に説明します。
CTFとは、情報セキュリティの分野では、専門知識や技術を駆使して隠されているFlag(答え)を見つけ出し、時間内に獲得した合計点数を競うハッキングコンテストを指します。
そのCTFの問題で私が担当していた問題でどのチームも解くことが出来なかった問題を後日解きなおし、正解することができたので、どのように正解を導いたのかを私のアウトプットも含め記事にしたいと思いました。
最後までお付き合いいただけたらと思います。
What is binary
まず今回私が解いた問題が下記になります!
初めにflag.pdfをダウンロードしました。
その際に私が行ったこと。
1.普通にPDFとして開いてみる
これ以上何をすればいいのかわからなかったのでここでヒントです。
Base64とは?
データを文字列に変換する方法(エンコード方式)
このヒントから「あ、cat
で出力された中身をデコードすればいいんだ!」と思い、デコードを行いました。
デコードする前と変わらずわけがわからない文字列が出力されました。
ここでまたヒントです。
「それまだデコードできてないよ?」
と言われ再度デコードを行います。
次は文字化けしたものが出力されました。
ここまで来たら「あとは文字コードを変更すればいいんじゃないか!」と思い、下記の文字コードを試した。
1.UTF-8
2.Shift-JIS
3.EUC-JP
しかしなんの変化もなかったため、これはバイナリ形式の可能性がある(インターネット調べ)となりました。
バイナリファイルの可能性があることから先頭のバイト列(マジックナンバー)を調べました。
マジックナンバー例
ファイル形式 | マジックナンバー(16進数) |
---|---|
ZIP | 50 4B 03 04 |
PNG | 89 50 4E 47 0D 0A 1A 0A |
25 50 44 46 |
|
JPEG | FF D8 FF |
xxd -l 32 flag_decode2.pdf
・-l 32
は先頭32バイトのみ表示する指定
・出力結果:
00000000: 504b 0304 1400 0000 0800 2f79 fa5a 4bc0 PK......../y.ZK.
00000010: d19f 31ca 0000 736c 0100 0800 1c00 666c ..1...sl......fl
上記の先頭を見るとZIPファイルか、ZIPベースの形式である可能性が高くなりましたが、まだ確信はできなかったため、下記のコマンドを実行しました。
file
コマンドを実行すると:
file flag_decode2.pdf
出力がこうなりました:
Zip archiva data, ....
上記2つの情報から「このファイルはZIP形式」と判断できました。
続いて行った対応
1.ファイル名を.zip
に変更
mv flag_decode2.pdf flag_decode2.zip
2.zipファイルとして展開できるか確認
unzip flag_decode2.zip -d decode/
4.展開したフォルダの中に入っていたファイルを確認
・ファイル形式を確認:
file flag.pdf
・出力結果:
flag.pdf: PNG image data, 3304 x 861, 8-bit/color RGBA, non-interlaced
上記の出力結果からPNG形式だと判明し、flag.pdf
のファイル形式を変更
・PNG形式に変更:
mv flag.pdf flag.png
このPNGファイルをエクスプローラーから開くと:
(同じイベントに参加された方のために答えは伏せます)
まとめ
今回初めてCTFに参加させていただいて、時間があっという間に過ぎてしまうほど楽しませていただきました。1問解くだけでたくさんのことを学ぶことが出来ました!
正解したときの脳汁は半端ないです笑
今回を機にCTFの問題にも少しづつ挑戦していきたいなと思いました!
最後までお付き合いいただきありがとうございました