📑

Writeup|picoCTF DISKO 1

に公開

ディスクイメージ解析の基本

1. ファイルシステム構造を確認

  • file コマンドでファイル種別を調べる

    file disk.img
    
  • binwalk(バイナリファイルの中に何があるかを解析する)

    • バイナリファイルとは:コンピュータが読める“0と1のデータのかたまり”のこと(↔︎テキストファイル)
      • .img, .dd(ディスクイメージ)
      • .exe, .bin(実行ファイル)
    binwalk file.img        # 構造を調べる
    binwalk -e file.img     # 埋め込みファイルを自動抽出(extract(抽出))
    
  • fdisk -l(パーティションの確認)

    • 各パーティションにOSやデータを入れられる
    fdisk -l disk.img
    

2. マウントして中身を確認(ディスク(imgファイル)をOSが読める形にする操作)

  • ループデバイスを使ってマウント
    (ファイルを“仮想のディスク”として扱うための仕組み)

    mkdir mnt
    sudo mount -o loop disk.img mnt
    ls mnt
    
  • マウントできない場合はオフセット(読み始めるスタート地点)指定:

    • fdisk -lを使って出てきたセクタ番号×セクタサイズ
    sudo mount -o loop,offset=OFFSET disk.img mnt
    

    オフセットは fdisk or binwalk で確認


3. 中のファイルを調査

  • .bash_history.zshrcflag.txthidden ディレクトリを探す

  • ファイルの拡張子がなくても中身をチェック

    strings ファイル名
    file ファイル名
    

4. 削除済みファイルの復元

  • foremosttestdisk, photorec でファイルを復元

    foremost -i disk.img -o out/
    

5. マウントせず直接バイナリ解析

  • strings コマンドで平文を探す(flag埋め込み対策)

    strings disk.img | grep -i picoCTF
    
  • hexdump -C でバイナリの中身を16進+ASCIIで確認する

    • ファイルの先頭にあるマジックバイトや埋め込み文字列を探せる
    hexdump -C file.img
    

よく使うツールまとめ

ツール 用途
file ファイルタイプの確認
binwalk ファイルの中の構造確認
fdisk パーティション構造を見る
mount イメージを仮想ディスクとしてマウント
strings テキスト抽出
foremost 削除ファイルの復元
hexdump バイナリの中身を16進+ASCIIで表示

解法

💡ヒント:「stringsコマンドを使えば見つかるかも?」というニュアンスあり

  1. ファイルをダウンロードして、ヒントにある通りにStringsコマンドでpicoの文字を探して終了
strings ~/Downloads/disko-1.dd | grep -i pico
# -i :大文字・小文字を区別しない検索

→picoCTF{…}の文字列あり

Discussion