ksnctf #18 USB flash drive


USB flash drive

https://ksnctf.sweetduet.info/problem/18
問題にはdrive.zipというファイルがあった。
ダウンロードして開いてみるとimgファイルがあった。

そのままでは中身が見れないのでThe Sleuth Kitというファイルシステムを解析するためのツールキットを使う。
このツールの中には、flsコマンドやicatコマンドがあり、ディスクイメージ内のファイル名、ディレクトリ名を出力したり、ファイルを取り出したりできる。

まずflsコマンドでdrive.imgの中身を見てみる。

┌──(kali㉿kali)-[~/Downloads]
└─$ fls drive.img
r/r 4-128-4:    $AttrDef
r/r 8-128-2:    $BadClus
r/r 8-128-1:    $BadClus:$Bad
r/r 6-128-4:    $Bitmap
r/r 7-128-1:    $Boot
d/d 11-144-4:   $Extend
r/r 2-128-1:    $LogFile
r/r 0-128-1:    $MFT
r/r 1-128-1:    $MFTMirr
r/r 9-128-8:    $Secure:$SDS
r/r 9-144-11:   $Secure:$SDH
r/r 9-144-5:    $Secure:$SII
r/r 10-128-1:   $UpCase
r/r 3-128-3:    $Volume
r/r 35-128-1:   Carl Larsson Brita as Iduna.jpg
r/r 37-128-1:   Mona Lisa.jpg
r/r 38-128-1:   The Great Wave off Kanagawa.jpg
-/r * 36-128-1: Liberty Leading the People.jpg
-/r * 36-128-4: Liberty Leading the People.jpg:00
-/r * 36-128-5: Liberty Leading the People.jpg:01
-/r * 36-128-6: Liberty Leading the People.jpg:02
-/r * 36-128-7: Liberty Leading the People.jpg:03
-/r * 36-128-8: Liberty Leading the People.jpg:04
-/r * 36-128-9: Liberty Leading the People.jpg:05
-/r * 36-128-10:        Liberty Leading the People.jpg:06
V/V 256:        $OrphanFiles

エントリ番号の35,37,38は.jpgで画像ファイルになっている。icatで35番のCarl Larsson Brita as Iduna.jpgと取り出してみる。

┌──(kali㉿kali)-[~/Downloads]
└─$ icat drive.img 35 > 35.jpg


こんな画像が得られた。
エントリ番号37,38も同様にすると以下のような画像が得られた。

flsコマンドの結果をみると、上の3つの画像以外に、エントリ番号が36番の画像があることがわかる。
この画像もicatコマンドで取り出してみる。

上の画像が得られた。
「flagはこのファイルにあるけど、この画像にはないとい」う文が書かれている。
よく分からないけど、とりあえずexif情報を見てみる。

┌──(kali㉿kali)-[~/Downloads]
└─$ exiftool 36.jpg  
ExifTool Version Number         : 12.09
File Name                       : 36.jpg
Directory                       : .
File Size                       : 169 kB
File Modification Date/Time     : 2021:09:17 03:22:42-04:00
File Access Date/Time           : 2021:09:17 03:22:42-04:00
File Inode Change Date/Time     : 2021:09:17 03:22:42-04:00
File Permissions                : rw-r--r--
File Type                       : JPEG
File Type Extension             : jpg
MIME Type                       : image/jpeg
Exif Byte Order                 : Little-endian (Intel, II)
Quality                         : 80%
DCT Encode Version              : 100
APP14 Flags 0                   : [14], Encoded with Blend=1 downsampling
APP14 Flags 1                   : (none)
Color Transform                 : YCbCr
Image Width                     : 757
Image Height                    : 631
Encoding Process                : Baseline DCT, Huffman coding
Bits Per Sample                 : 8
Color Components                : 3
Y Cb Cr Sub Sampling            : YCbCr4:4:4 (1 1)
Image Size                      : 757x631
Megapixels                      : 0.478

exif情報からはflagは得られなかった。
次に画像のバイナリデータからgrepでFLAGの文字列があるか調べてみる。

┌──(kali㉿kali)-[~/Downloads]
└─$ strings 36.jpg |grep FLAG                                                                                                                                                  

バイナリデータからはFLAG文字列は見つからなかった。
icatを使ってjpg形式で画像を取り出したが、flagはこの画像にはないという文から別の形式で取り出してみる。

icat drive.img 36
icat drive.img 36-128-1

上記の2つのエントリ番号の指定で取り出すと文字化した文字列がずらっと表示された。

┌──(kali㉿kali)-[~/Downloads]
└─$ icat drive.img 36-128-4
FLA

上記のようにエントリ番号を3-128-4で実行するとFLAという文字列が取り出せた。
同じように3-128-5を取り出してみるとG_qという文字列が取り出せた。

┌──(kali㉿kali)-[~/Downloads]
└─$ icat drive.img 36-128-5       
G_q

3-128-4〜3-128-10までの出力を並べるとflagが得られそう。

┌──(kali㉿kali)-[~/Downloads]
└─$ icat drive.img 36-128-4;icat drive.img 36-128-5;icat drive.img 36-128-6;icat drive.img 36-128-7;icat drive.img 36-128-8;icat drive.img 36-128-9;icat drive.img 36-128-10
FLAG_xxxxxxxxxxxxxxxx     

flagが得られた。

まとめ

imgファイルの中身を見てみた。
kalilinuxはctfに便利なコマンドが標準に入ってて便利。