はまやんはまやんはまやん

hamayanhamayan's blog

vsCTF (2022?) Writeups

2336点で65位/635。
んー、Web問…

[Web] Sanity Check

  • Burpで与えられたURLを開いてソースを眺めると、フラグが書いてある
  • curl https://challs.viewsource.me/sanity-check/ | grep vsctf

Web何も分からなかった…

[Forensic] Portal Savior

  • 一行目で検索すると、PortalのAIFファイルという形式と分かる
  • http://portalwiki.asshatter.org/index.php/Aperture_Image_Format.html っぽい
    • ここの「Method 1 (Precompiled)」を使えば開けそう
    • DATAというフォルダにあるAPERTURE.APFとかを見ると似たような形式になっていることが分かる
  • ちょっとファイル形式がおかしいので、フォーマット形式を見ながら修正する
    • (c) Doug Rattman 1985 All Rights Reserved!は要らないので消す
    • 改行回りがおかしいので、APERTURE.APFを見ながら改行を調整
  • 修正できたら、DATAフォルダのAPERTURE.APFを修正後のmaydayに置き換えると、隠された文字列が表示されてくる

[Forensic] Roblox 1

  • adファイルが2つ与えられる。FTK Imagerで開く
  • Robloxとはゲームっぽいので、とりあえずAppData回りを探してみるとRoblox関連のフォルダがあるのでダンプしてくる \\Users\adminbot6000\AppData\Local\Roblox
  • vscodeで開いて、nameで検索して適当に眺めているとftcsvisgreatという名前が出てくる。フラグフォーマットにくるんで提出すると通る

[Forensic] Roblox 2

  • ftcsvisgreatで検索して周辺を探っていくと、IDは3635455297であると分かる
  • logsフォルダを見ればよさそうなので、フォルダを限定してuserで検索する。大量に結果が出てくるので3635455297に関連するものを削除すると、もう一つユーザーが見つかる
  • 0.531.0.5310423_20220620T033202Z_Player_9BB0E_last.logにてamazingmaltというユーザーを見つけることができる
  • [FLog::GameJoinUtil]でそのログを見てみると、番号っぽいものが得られるのでrobloxでゲームが探せる画面を探して調べると、69184822という番号でゲームが見つかる
  • vsctf{themeparktycoon2}でフラグ獲得

[Crypto] Recovery

  • validate関数を読み込んでいく
  • passwordは49文字で、偶奇の文字は判定方法が異なる
  • 奇数番目の文字は前半部分のreturn Falseらへんまでで判定
    • for a, b in enumerate(zip(gate, key), 1):という感じでlen(b[1]) != 3 * (b[0] + 7 * a) // aを判定している
    • b[1]はその上のkey = ...で作っているが、passwordの奇数番目を後ろから1個飛ばしで取ってきたもののascii個数分7vs8vs9vs...みたいにくっつけている。
    • key, gateの宣言の下で
      • for a, b in enumerate(zip(gate, key), 1):
        • print(chr((3 * (b[0] + 7 * a) // a - 2) // 3 + 1))みたいにすれば奇数番目が逆順で手に入る
  • 偶数番目の文字は後半部分で判定している
    • hammer = {str(a): password[a] + password[a + len(password) // 2] for a in range(1, len(password) // 2, 2)}を読み解くことになる
    • まあ、入力を適当に入れて、print(hammer)をして中身を見てみるのが手っ取り早い
    • 偶数番目だけ持ってきて、半分に分割して前半と後半の2つにしたら、[前半の先頭][後半の先頭]1として先頭をどっちも取り除いて、ドットつけて、[前半の先頭][後半の先頭]3...みたいにして文字列を作っている
    • blockの中身をbase64デコードして、ルールに従ってばらせばフラグ完成
  • vsctf{Th353_FL4G5_w3r3_inside_YOU_th3_WH0L3_T1M3}

[Misc] Hexahue Hate!

  • hexahueでデコードされた画像が渡されるので、ただただデコードするだけ
  • 多分普通にやっていたらマジでhateだったと思うが、調べるとkusuwadaさんの素晴らしいデコーダーがある kusuwada/hexahue: Hexahue decoder and encoder
  • hexahue_decodeメソッド内部を位置調整する感じでリライトするとデコードできる
  • デコード文章をジーっと見つめるとTHE MESSAGE YOU SEEK IS IHATEHEXAHUESOMUCHPLEASEHELPとあるので、vsctfにくるんで提出