2>/dev/null

ふぉれんじっくやさんになりたいです

【Forensics 1.0.1a】TamuCTF writeup

Z氏にはお世話になりっぱなしなので、どんな形でもお返しできるように精進したい。

レギュレーション:

フラグはもちろん欲しいが、the slueth kit等様々な道具と触れ合いフォレンジックの知識を深めることを最優先事項とする。


さて、今回解いた問題は以下の4問である。

  • ALCAPONE
  • Corrupted Disk
  • ZippityDoodah

ALCAPONE

problem.txt :

ALCAPONE

Eliot Ness is the lead on taking down Al Capone. He has gained access to Capone's personal computer but being the good detective he is, he got the disk image of the computer rather than look through the actual computer. Can you help Ness out and find any information to take down the mob boss?

(hint: Al Capone knew his computer was going to be taken soon, so he deleted all important data to ensure no one could see it. Little did he know that Ness was smarter than him.)

Direct Download link: https://tamuctf.com/themes/core/static/img/WindowsXP.img.xz

思考の過程:

Al Capone knew his computer was going to be taken soon, so he deleted all important data to ensure no one could see it. Little did he know that Ness was smarter than him.


上記のこの部分に、alcaponeがPCからデータを消去した。とあるので、まぁゴミ箱にフラグが入っているんだろうなぁとなり、

【検索】windowsXP ゴミ箱 場所
【検索】windowsXP structure
した


www.slideshare.net
support.hp.com

なんかrecyclerって場所にデータ置いてありそう……………

なので、これからslueth kitで目的データを取得する指針で問題に向き合うこととする。

  1. img_stat tamu2020-WindowsXP.img

IMAGE FILE INFORMATION

        • -

Image Type: raw

Size in bytes: 3221225472

img_stat でファイルシステムを特定して

  1. mmls tamu2020-WindowsXP.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 0000000062 0000000063 Unallocated
002: 000:000 0000000063 0006281855 0006281793 NTFS / exFAT (0x07)
003: ------- 0006281856 0006291455 0000009600 Unallocated

  1. fls -i raw -f ntfs -o 63 tamu2020-WindowsXP.img

r/r 4-128-4: $AttrDef
r/r 8-128-2: $BadClus
r/r 8-128-1: $BadClus:$Bad
r/r 6-128-1: $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-14: $Secure:$SII
r/r 10-128-1: $UpCase
r/r 3-128-3: $Volume
r/r 8006-128-1: AUTOEXEC.BAT
r/r 4364-128-3: boot.ini
r/r 8005-128-1: CONFIG.SYS
d/d 4371-144-6: Documents and Settings
r/r 8007-128-1: IO.SYS
r/r 8008-128-1: MSDOS.SYS
r/r 4167-128-3: NTDETECT.COM
r/r 4166-128-3: ntldr
r/r 27-128-1: pagefile.sys
d/d 4745-144-6: Program Files
d/d 4749-144-6: Program Files (x86)
d/d 8495-144-1: RECYCLER
d/d 4380-144-6: System Volume Information
d/d 28-144-5: WINDOWS
d/d 8672: $OrphanFiles

mmlsで割り当てファイルのオフセットを確認したら、flsでディスクイメージのファイル、ディレクトリ名を表示。
今回はrecyclerを取り出したいのでディレクトリごと抜き出す必要がある…

icatはファイルのみを対象としたもの(ホンマか?)なので、代わりにtsk_recoverを用いる。

www.kazamiya.net

  1. tsk_recover -i raw -f ntfs -o 63 tamu2020-WindowsXP.img 8496-144-6

~/Home/Downloads/CTF/tamuCTF/ALCAPONE/8496-144-6/Documents and Settings/Administrator/Local Settings/Temp/Temporary Directory 1 for flag5.zip$ ls
flag.txt flag13.txt flag17.txt flag20.txt flag24.txt flag28.txt flag31.txt flag35.txt flag39.txt flag6.txt
flag10.txt flag14.txt flag18.txt flag21.txt flag25.txt flag29.txt flag32.txt flag36.txt flag4.txt flag7.txt
flag11.txt flag15.txt flag19.txt flag22.txt flag26.txt flag3.txt flag33.txt flag37.txt flag40.txt flag8.txt
flag12.txt flag16.txt flag2.txt flag23.txt flag27.txt flag30.txt flag34.txt flag38.txt flag5.txt flag9.txt

  • iでファイルタイプ、-oでオフセット、-fでファイルシステムの指定。inodeのところは任意でokです。
  1. cat ./* | grep "gigem{"

oigigem{Ch4Nn3l_1Nn3R_3l10t_N3$$}khsutrghsiserg

見っけた

Corrupted Disk

problem.txt

Corrupted Disk

We've recovered this disk image but it seems to be damaged. Can you recover any useful information from it?

File: tamu2020-recovered_disk.img

思考の過程:

corrupted fileとあるから、まぁファイルシステムとか壊れて見れないんだろうなと思い、破損したimgファイルから情報を得る手段を考える。

slueth kitには破損ファイルを直すコマンドがない(※いや、絶対ありそう。勉強不足です)ので、binwalk使います。

github.com

strings 任意.img | grep flag*でflag.pngが見つかった

DECIMAL HEXADECIMAL DESCRIPTION

                                                                                                                                                              • -

76464 0x12AB0 PDF document, version: "1.4"
76535 0x12AF7 Zlib compressed data, default compression
76774 0x12BE6 Zlib compressed data, default compression
87650 0x15662 Unix path: /Type/FontDescriptor/FontName/BAAAAA+Arial-BoldMT
87882 0x1574A Zlib compressed data, default compression
88183 0x15877 Unix path: /Type/Font/Subtype/TrueType/BaseFont/BAAAAA+Arial-BoldMT
88541 0x159DD Unix path: /S/Transparency/CS/DeviceRGB/I true>>/Contents 2 0 R>>
92848 0x16AB0 PNG image, 329 x 17, 8-bit grayscale, non-interlaced
273072 0x42AB0 Zip archive data, at least v2.0 to extract, name: _rels/.rels
273346 0x42BC2 Zip archive data, at least v2.0 to extract, name: word/settings.xml
273595 0x42CBB Zip archive data, at least v2.0 to extract, name: word/_rels/document.xml.rels
273971 0x42E33 Zip archive data, at least v2.0 to extract, name: word/fontTable.xml
274385 0x42FD1 Zip archive data, at least v2.0 to extract, name: word/numbering.xml
275259 0x4333B Zip archive data, at least v2.0 to extract, name: word/media/image1.jpeg
375699 0x5BB93 Zip archive data, at least v2.0 to extract, name: word/charts/chart1.xml
376594 0x5BF12 Zip archive data, at least v2.0 to extract, name: word/styles.xml
377822 0x5C3DE Zip archive data, at least v2.0 to extract, name: word/document.xml
382592 0x5D680 Zip archive data, at least v2.0 to extract, name: docProps/app.xml
382823 0x5D767 Zip archive data, at least v2.0 to extract, name: docProps/core.xml
383169 0x5D8C1 Zip archive data, at least v2.0 to extract, name: [Content_Types].xml
384353 0x5DD61 End of Zip archive
387760 0x5EAB0 JPEG image data, EXIF standard
387772 0x5EABC TIFF image data, little-endian offset of first image directory: 8
486064 0x76AB0 PNG image, 1068 x 966, 8-bit/color RGBA, non-interlaced
486128 0x76AF0 Zlib compressed data, best compression
500566 0x7A356 Zlib compressed data, default compression
1829552 0x1BEAB0 JPEG image data, JFIF standard 1.01
1829582 0x1BEACE TIFF image data, little-endian offset of first image directory: 8
1829844 0x1BEBD4 JPEG image data, JFIF standard 1.01

binwalkでファイル構成が分かったら、修復にとりかかる。

ツールはforemostで脳死でやるか、ddコマンドでシグネチャ通りにコピーして抽出。
foremostは引数にファイル名入れるだけなので、今回はddを採用しました。

www.atmarkit.co.jp


dd if=tamu2020-recovered_disk.img of=flag2.png bs=1 count=180224 skip=92848
dd if=tamu2020-recovered_disk.img of=flag1.png bs=1 count=64 skip=486064

ifに任意のファイル名を読み込み、ofで任意のファイル名で出力。bsで一度に読み書きするブロックサイズを指定。(デフォルトでは1byte) countで何ブロック分コピーするか決める。skipで目的の場所に飛ぶ。

f:id:taikohaijin44:20200429021325p:plain
flag


あった

INSTAGRAM

problem.txt

紛失しました。

思考の過程:

渡されたphoto.pngが開けないので、画像が壊れてる→バイナリを書き換える
と連想し、バイナリ調査に踏み込みます。

バイナリを読むときに必要な前提知識がある。ファイルフォーマットです。

www.setsuki.com

各有名なマーカー値を抑えておきましょう。

file photo.pngするとjpgと出るので、jpgとして足りないマーカー値とかないか確認します。

これが普通の画像のヘッダー
00000000: ffd8 ffe0 0010 4a46 4946 0001 0100 0001 ......JFIF......

これが問題のヘッダー
00000000: ffd8 ffe0 0010 0001 0100 0048 0048 0000 ...........H.H..

JFIFが抜け落ちていますね…これを補完してあげれば直りそう(これのみを直せば解決すると断言できないのが苦しい。。。)

方針としては、photo.pngJFIF前6byteを別ファイルに抜き出して、分離したファイルの頭にJFIFをつけてあげるれば良い?

つまり

  1. ddコマンドで6byte前、後のファイルを作り出す。
  2. バイナリエディタ他で前ファイルにJFIFを付け加える
  3. 後ファイルを前ファイルに出力してやる

をすればよい (これはバイナリツールを知らないので取った手段です。よいこはbviを使いましょう。)

dd if=photo.png of=split1.jpg bs=1 count=6

↑skip指定せずに、countで6byte指定すると頭から6byteコピーしてくれる
ちなみに16進数の場合、一文字は4bitなので2文字で1byte。だから6byte指定。

dd if=photo.png of=split2.jpg bs=1 skip=6

同様にして6byte以降のファイルも生成する

echo -en "\x4a\x46\x49\x46" >> split1.jpg

6byteまで分けたら、分けたファイルの末尾にJFIFのバイナリを挿入する。
しかし、解いている最中にはバイナリを直接書き換えて保存できるエディタを確認することができなかった…(絶対ある)

なので、echoのオプションを利用してファイルを書き換えることにした。
eng-entrance.com

改行を表示したいから-eオプションでエスケープを無視。

cat split2.jpg >> split1.jpg

これでバイナリがsplit1の末尾にキレイに追加される

f:id:taikohaijin44:20200503013212j:plain
flag

ZippityDoodah

problem.txt

ZippityDoodah

Lorelei, a nuclear engineer, is practicing how to create folders to organize her notes. She works closely with POTUS to secure our nuclear missiles. In order for her to send the nuclear codes to the correct authorities, she needs to zip all the files and make the data hard to find. Your mission, should you choose to accept it, is to intercept and find the codes (the flag).

思考の過程:

問題の意味はよくわからないけど、まあzipファイルを渡されたのでおとなしく解凍していく。

f:id:taikohaijin44:20200503014038p:plain
なんか出てきた

steganoかな?zstegかけとこ

b1,rgb,lsb,xy .. text: "gigem{z1pT4st1c__$kiLl$$$}"
b2,r,msb,xy .. text: "_UUUUUUUUU"
b2,g,msb,xy .. text: "@UUUUUUU"
b2,b,msb,xy .. text: "PUUUUUUUU"
b2,rgb,msb,xy .. text: "EQUUUUUU"
b2,rgba,lsb,xy .. text: ["+" repeated 10 times]
b2,abgr,msb,xy .. text: "SSSSGGGGGSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS"
b4,r,lsb,xy .. text: "2EV#\"\"TEB#2EUUUd33E\"\"\"3\"#3\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\" "
b4,r,msb,xy .. text: ["D" repeated 19 times]
b4,g,lsb,xy .. text: "$T2#232#\"#UTTDU3\"\"3#2\"\"#2\"\""
b4,g,msb,xy .. text: "@DDDDDDDDDDDDDDD"
b4,b,lsb,xy .. text: "#3\"#32%GfEEEEUEEEggvfvDETUDDDUEDDD\"\"$DDDDDDDDDDDDDDB\"\"\"\"\"\"\"\"\"fffffDfdD$D\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"DD\"\"DDDD\"$DDDDDDDDDDDDDDDDDDDB$DDDDDfDFfDFffDffDdDDFffffDDDDDDffDDDffdDDDfffffffffffffffffff"
b4,b,msb,xy .. text: "\"\"\"DD$\"\"\"\"\"\"\"\"\"\"\"\"\"\"BDDDDDDDDDfffff\"f&\"$\"DDDDDDDDDDDDDDDDD\"\"DD\"\"\"\"D$\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"B$\"\"\"\"\"f\"bf\"bff\"ff\"&\"\"bffff\"\"\"\"\"\"ff\"\"\"ff&\"\"\"fffffffffffffffffff"
b4,rgb,lsb,xy .. text: "0\"5BEGUfF#C%\"B5#B%SD5CU%BB5\"C%2B5EeWUeGUuFTeFetV3C42C%BU$#R5\"B4#B$2C$\"R%\"C53C$\"B$\"B$ \""
b4,rgb,msb,xy .. text: "D$DB$DB$DB$DB$DB$DB$DB$DB$DB$DB$DB$DB$DB$DB$D"
b4,bgr,lsb,xy .. text: " 52BGEeVFC%#B%2C%\"CU4SE%BE2B%#B52eGUeWEuVEdVEufTC43B5#RD%S%2B$2C$\"B4#R%\"B%3C4#B$\"B$\" \""
b4,bgr,msb,xy .. text: "$DB$DB$DB$DB$DB$DB$DB$DB$DB$DB$DB$DB$DB$DB$DBD"
b4,rgba,lsb,xy .. text: "?!/1/1/0?"
b4,abgr,msb,xy .. text: "L/D/L/L/D/"

………………………………………………うーん

いや、自分なりに理解する努力をしよう。

spotless.tech

公式writeupさんはデコードツールを使ったみたい

blog.applibot.co.jp

LSB法?かな

総評・改善

bashでバイナリをいじるトレーニングが必要だと感じた。
あとステガノグラフィの最低限の知識