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
```
![Carl Larsson Brita as Iduna.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1182752/d7f19884-8834-696c-6664-2cea8021671e.jpeg)
こんな画像が得られた。
エントリ番号37,38も同様にすると以下のような画像が得られた。
![Mona Lisa.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1182752/b2246b42-781d-96ed-ab80-0a42243eeb29.jpeg)
![The Great Wave off Kanagawa.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1182752/2e79dacf-f45e-7764-d070-26fc083dffc5.jpeg)

flsコマンドの結果をみると、上の３つの画像以外に、エントリ番号が36番の画像があることがわかる。
この画像もicatコマンドで取り出してみる。
![36.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1182752/07c6171d-a728-d683-11a1-0a1a374373b0.jpeg)
上の画像が得られた。
「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
```
上記の２つのエントリ番号の指定で取り出すと文字化した文字列がずらっと表示された。

```
┌──(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に便利なコマンドが標準に入ってて便利。