URL: https://score.beginners.seccon.jp/
今回 CTF 初挑戦だったので、やってたこと、考えてたことなどを雑にメモっていく場所。
マジで何もわかっていないで書いてるので、(これを見てしまった人向けに)正解にたどり着きたい人、参考情報を得たい人が見るような「資料」じゃないことを予め断っておく。
自分が何考えてたのかをある程度 dump したものであって、バックグラウンドを理解して書いてるものではない。
2023/06/03(土) 14:00 JST - 2023/06/04(日) 14:00 JST
Jeopardy形式
- 得点はチーム毎に集計します。集計にはダイナミックスコアリング方式(多くのチームが解いた問題ほど点数が低くなるような方式)を用います。
- 原則競技中には問題の追加を行いません。問題の設定ミスなどが発覚した場合には、例外的に修正版の問題が公開される場合があります。
- フラグのフォーマットは ctf4b{[\x20-\x7e]+} です。これと異なる形式を取る問題に関しては、別途問題文等でその旨を明示します。
- 誤った解答を短時間の内に何度も送信した場合は、当該チームからの回答を一定時間受け付けない状態(ロック状態)になる場合があります。またこの状態でさらに不正解を送信し続けた場合はロックされる時間がさらに延長される可能性があります。
- 他チームへの妨害行為
- 他チームの回答などをのぞき見する行為
- 他者への攻撃的な発言 (暴言 / 誹謗中傷 / 侮辱 / 脅迫 / ハラスメント行為など)
- 自チームのチーム登録者以外に問題・ヒント・解答を教えること
- 自チームのチーム登録者以外からヒント・解答を得ること(ただし運営者が全員に与えるものを除く)
- 設問によって攻撃が許可されているサーバ、ネットワーク以外への攻撃
- 競技ネットワーク・サーバなどの負荷を過度に高める行為(リモートから総当たりをしないと解けない問題はありません!)
- その他、運営を阻害する行為
不正行為が発見された場合、運営側の裁量によって減点・失格などのペナルティがチームに対して課せられます。大会後に発覚した場合も同様とします。
- 出題内容や開催中のアナウンスは原則日本語としますが、問題中で英語が用いられる場合があります。
- チーム人数に制限はありません。お一人でも、数十人でも、お好きな人数でチームを作成していただいて構いません。
- 本大会では上位チームへの賞金・賞状の授与等は行いません。
- SECCON CTF への出場権とは一切の関係がありませんので、ご注意ください。
ローカル変数とか引数が Stack に積まれるのはイメージついた。
他に何が積まれているのかは
__show_stack()
の内容がいったん全部出してくれてるものとして見ていく資料になりそうなスライドがあるのでこちらも見比べる。
https://www.slideshare.net/codeblue_jp/master-canary-forging-by-code-blue-2015#9
という解釈になりそう。これを canary を変更しないで(?) "ret addr" だけ
win()
のアドレスになるよう上書きしたい、というのがこの問題のやりたいことに見える。main
では 1 byte x 32 要素の buf に対して最大 256 byte まで入力を許しているので、十分に ret addr を書き換えるだけの入力を受け付けられるように見える。