車輪の再開発ブログ

Python & CTF Beginner!

picoCTF 2022 Sleuthkit Apprentice writeup

コンテスト中に解けなかった問題の復習です。

問題文

Download this disk image and find the flag.
Note: if you are using the webshell, download and extract the disk image into /tmp not your home directory.
* Download compressed disk image

disk image (disk.flag.img)がダウンロードできます。

ヒント

なし

解法

まず、問題のタイトルである「Sleuthkit Apprentice」ですが、「Sleuth kit」という、オープンソースファイルシステムフォレンジックツールだよというヒントになっているとのことです。

ということで、インストール方法は、

apt install sleuthkit

で入ります。いろいろコマンドが入るようです。

参考サイト:デジタルフォレンジック Sleuth Kit sleuthkitのインストール

で、このコマンドで、何ができるようになるかがよくわからないのですが、ディスクイメージの中身をいろいろ確認できるツールらしい。

# mmls disk.flag.img 
DOS Partition Table
Offset Sector: 0
Units are in 512-byte sectors

      Slot      Start        End          Length       Description
000:  Meta      0000000000   0000000000   0000000001   Primary Table (#0)
001:  -------   0000000000   0000002047   0000002048   Unallocated
002:  000:000   0000002048   0000206847   0000204800   Linux (0x83)
003:  000:001   0000206848   0000360447   0000153600   Linux Swap / Solaris x86 (0x82)
004:  000:002   0000360448   0000614399   0000253952   Linux (0x83)

スタートの数字を読み取って、 -o につけるだけで、flsとかで中身のディレクトリがわかったりする模様。

# fls -o 0000360448 disk.flag.img 
d/d 11: lost+found
d/d 12: boot
d/d 1985:   etc
d/d 1986:   proc
d/d 1987:   dev
d/d 1988:   tmp
d/d 1989:   lib
d/d 1990:   var
d/d 3969:   usr
d/d 3970:   bin
d/d 1991:   sbin
d/d 451:    home
d/d 1992:   media
d/d 1993:   mnt
d/d 1994:   opt
d/d 1995:   root
d/d 1996:   run
d/d 1997:   srv
d/d 1998:   sys
d/d 2358:   swap
V/V 31745:  $OrphanFiles

tak_recover をやってみると、

# tsk_recover -o 0000360448 disk.flag.img ./output
Files Recovered: 1170

となり、1170個のファイルが出来上がる。findして、flagみたいなファイルがないか確認する。

# find output | grep flag
output/root/my_folder/flag.txt

root/my_folder/flag.txt がヒットした。これが答えかなと思ったら、

# fcat -o 0000360448 root/my_folder/flag.txt disk.flag.img 
            3.449677            13.056403

となり、答えじゃなかった。

わからないので、kusuwada先生の picoCTF2022 [Forensics] writeup - 好奇心の足跡 の解説を読む。同じディレクトリに違うあった。tsk_recoverだと出力されていなかった模様(なぜ??)。

で、順番に辿って行くには、 fls した後の、数字を後ろにつけていけばよいらしい。つまり、 上のflsの出力で、rootは、1995なので、

# fls -o 0000360448 disk.flag.img 1995
r/r 2363:   .ash_history
d/d 3981:   my_folder

とすると、普段 ls /root みたいなことと同じ感じの結果が見れるらしい。ということで、my_folderは3981なので、

# fls -o 0000360448 disk.flag.img 3981
r/r * 2082(realloc):    flag.txt
r/r 2371:   flag.uni.txt

中身を見るには、fcat コマンドを使って、

# fcat -o 0000360448 /root/my_folder/flag.uni.txt disk.flag.img 
picoCTF{by73_5urf3r_2f22df38}

とする模様。フラグゲット。