この大会は2020/6/28 15:00(JST)~2020/6/30 15:00(JST)に開催されました。
今回もチームで参戦。結果は500点で124チーム中42位でした。
自分で解けた問題をWriteupとして書いておきます。
TheTarget (Misc 100)
$ file TheTarget TheTarget: Extensible storage engine DataBase, version 0x620, checksum 0xbb95e8e9, page size 8192, Windows version 6.3
ESEDatabaseViewで開いてみる。databaseテーブルをHTML出力してみる。"BSides"で検索すると、何か所かあるが、その中からフラグが見つかった。
BSIDESTLV2020{ThisGoesDeeper}
Check yourself so you won't wreck yourself (Forensics 100)
FTK Imagerで開き、Basic data partitionを見る。[root]-[$Recycle.Bin]-[S-1-5-21-3498983559-1615527653-2205644034-1001]配下にたくさんのファイルがある。この中にtxtファイル($R0K6T9B.txt)があり、フラグが書いてあった。
BSIDESTLV{ICanSeeYouUnlessYouCleanUpAfterYourself}
MoreWithLess (Forensics 200)
Autopsyで開き、ウェブ検索を見ると、フラグが見つかった。
BSIDESTLV2020{HideYourNeedleInTheHayStack}
Basis32 (Crypto 100)
ヘブライ語でbase32エンコードらしきものが書いてある。問題文のソースを見るとUnicodeが書いてあるので、書きだす。
\u05d8\u05d9\u05d9\u05e6\u05e2\u05e9\u05d3\u05d5\u05de\u05dd\u05da\u05d4\u05e8\u05e5\u05e1\u05e2\u05d6\u05d0\u05e9\u05d3\u05d06\u05ea\u05de\u05dd53\u05e56\u05e2\u05da7\u05da\u05e5\u05e7\u05d6\u05d8\u05e9\u05db\u05e2\u05de\u05dd\u05ea\u05d6\u05d23\u05e3\u05d4\u05db5\u05d4\u05d665\u05ea7\u05d8\u05d9\u05e0\u05e7\u05d6\u05e9\u05d9\u05e3\u05d6\u05d9\u05df\u05e4\u05d23\u05d3\u05d7\u05dd5\u05e9\u05d6\u05e25\u05d3\u05d8\u05dd\u05e5\u05df\u05e5\u05de33\u05e2\u05dd\u05dd\u05e9\u05e7\u05ea===
フラグは"BSidesTLV"から始まるので、base32エンコードを見てみる。
>>> import base64 >>> base64.b32encode('BSidesTLV') 'IJJWSZDFONKEYVQ=
このことからコードで\u05d0を起点にアルファベットを割り当てる。インデックス26は数値の始まりである'2'を割り当てる。あとはbase32デコードを行う。
#!/usr/bin/env python3 import base64 import string chars = string.ascii_uppercase + '2' ct = '\u05d8\u05d9\u05d9\u05e6\u05e2\u05e9\u05d3\u05d5\u05de\u05dd\u05da\u05d4\u05e8\u05e5\u05e1\u05e2\u05d6\u05d0\u05e9\u05d3\u05d06\u05ea\u05de\u05dd53\u05e56\u05e2\u05da7\u05da\u05e5\u05e7\u05d6\u05d8\u05e9\u05db\u05e2\u05de\u05dd\u05ea\u05d6\u05d23\u05e3\u05d4\u05db5\u05d4\u05d665\u05ea7\u05d8\u05d9\u05e0\u05e7\u05d6\u05e9\u05d9\u05e3\u05d6\u05d9\u05df\u05e4\u05d23\u05d3\u05d7\u05dd5\u05e9\u05d6\u05e25\u05d3\u05d8\u05dd\u05e5\u05df\u05e5\u05de33\u05e2\u05dd\u05dd\u05e9\u05e7\u05ea===' b32 = '' for c in ct: code = ord(c) if code >= 0x05d0: index = code - 0x05d0 b32 += chars[index] else: b32 += c print(b32) pt = base64.b32decode(b32) print(pt)
実行結果は以下の通り。
IJJWSZDFONKEYVRSGAZDA62ON53V6SK7KVXGIZLSON2GC3TEL5EG6527IJQXGZJTGJPUC3DHN5ZGS5DINVPVO33SNNZX2=== b'BSidesTLV2020{Now_I_Understand_How_Base32_Algorithm_Works}'
BSidesTLV2020{Now_I_Understand_How_Base32_Algorithm_Works}