couyoh’s old blog

移転先:https://couyoh.pages.dev/blog/

SECCON Beginners CTF 2018 Write-up

やや今更感がありますが,SECCON Beginners CTF 2018に,チームとして参加しました. 結果は46位でした.

既にwrite-upが複数公開されていますが,その中の「Find the messages」について,私が解いた方法がまだ挙がっていないようなので,ここに記しておきます.

Find the messagesにて配布される7zファイルを解凍すると,disk.imgが展開されます.

$ file disk.img
disk.img: DOS/MBR boot sector; partition 1 : ID=0x83, start-CHS (0x0,32,33), end-CHS (0x8,40,32), startsector 2048, 129024 sectors

この結果より,次のことが分かります.

  • disk.imgがディスクイメージであること
  • ブートセクタがついていること
  • パーティション1の開始セクタが2048セクタであること

ここで1セクタは512バイトと仮定しても良いのですが,一応1セクタが何バイトかを調べてみます.

$ fdisk -l disk.img
Disk disk.img: 64 MiB, 67108864 bytes, 131072 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xad4d4cf0

Device     Boot Start    End Sectors Size Id Type
disk.img1        2048 131071  129024  63M 83 Linux

1セクタが512バイトである事が分かりました.つまり,1つ目のパーティションは,2048 * 512 = 1048576バイトから始まるので,

sudo mount -o loop,offset=1048576 ./disk.img /mnt

でマウントすることができます.あとは,

$ cat /mnt/message1/message_1_of_3.txt| base64 -d
ctf4b{y0u_t0uched

message2/message_2_of_3.pngは他のPNGヘッダとXXXXXで隠された部分とを比較してコピペしました.

message3/message_3_0f_3.pdfはファイルが削除されたのか見えません. 調べてみたところ,PDFファイルは先頭と最後が決まっているようなので,file.imgからそれで囲まれる部分を取り出したらいけました.