【picoCTF】[DISKO 3] Writeup
問題概要
- Category: Forensics
Description:
Can you find the flag in this disk image? This time, its not as plain as you think it is!
Download the disk image here.
日本語訳:
このディスクイメージの中からフラグを見つけられますか?今回は思ったより簡単にはいきませんよ。
ディスクイメージはこちらからダウンロードしてください。
解法のプロセス(アプローチ)
1. ファイルの確認とツールの準備
まずはダウンロードしたファイル(disko-3.dd.gz)を解凍します。
gunzip disko-3.dd.gz
解凍して disko-3.dd を得ることが出来ました。
今回も The Sleuth Kit (TSK) の fls という機能を用いてディスクイメージの内部を解析していきます。
2. ディスクイメージ内のファイル一覧抽出(fls)
まずは fls コマンドを使って、ディスクイメージの中にあるファイルやフォルダの一覧(リスト)を抽出します。
fls -r disko-3.dd > output.txt
-
-r: フォルダの中身も再帰的にすべてリストアップする指示。
次に、出力されたこのリストの中から、フラグが隠されていないかを確認します。安直ではありますが、まずはシンプルに flag という文字列で検索してみます。
grep "flag" output.txt
実行結果:
+ r/r 522628: flag.gz
ビンゴですね! flag.gz という怪しい圧縮ファイルがヒットしました。
3. ファイルの抽出とフラグの獲得(icat)
ログの該当行を見ると、flag.gz のiノード番号(データの実体を指し示す番号)が 522628 であることに気づきます。
The Sleuth Kit の icat コマンドを使うと、このiノード番号を指定してファイルの中身を直接抽出することができます。
icat disko-3.dd 522628 > flag.gz
💡 コラム:なぜ > flag.gz が必要なのか?
icat コマンドは、指定したデータの中身をそのままターミナル画面上に出力しようとします。しかし、今回は .gz(圧縮データ=バイナリデータ)であるため、そのまま画面に出すと解読不能な記号が大量に表示され、ターミナルがバグってしまうことがあります。そのため、>(リダイレクト)を使って、データを画面に出さずにそのまま別のファイルとして保存しています。
無事に flag.gz として取り出せたので、解凍して中身を確認しましょう。
gunzip flag.gz
解凍してできた flag ファイルの中身を strings コマンド(または cat コマンド)で覗いてみます。
strings flag
実行結果:
Here is your flag
picoCTF{n3v3r_z1p_2_h1d3_654235e0}
フラグが見つかりました!!
Flag:
picoCTF{n3v3r_z1p_2_h1d3_654235e0}
お疲れさまでした!