AlpacaHackの次の回に向けて勉強していた。
Arkさんの問題を調べていて、以下の作問感想というのが面白かった。
https://blog.arkark.dev/2021/12/29/seccon-ja
https://blog.arkark.dev/2023/03/09/my-ctf-challs-2022
要はArkさんの問題を解けるようになるには、CTFに出て良質な問題に出会ってアイデアを貯めて、パズルが得意になって、Webの広い話題にアンテナを貼ると良さそう。それができたら苦労しねえ!
Arkさんの問題に限らず、AlpacaHackで出題されるような良いCTFの問題は「ジャンル知識 + パズル」で構成されているように感じた。パズルはひらめき要素みたいなものを指す。
CryptoやPwnはジャンル知識の比重が高い気がする。WebやMiscは比較的ジャンル知識が薄く、パズル要素が難易度に寄与している感じがする。
Arkさんの作問感想を読んだ感じ、ジャンル知識で新規性(かつ0-dayではないもの)を出されるとだいぶsolveが少なくて難しくなる。ただ、AlpacaHackは性質上ジャンル知識は簡単なものが出されているように感じる。
ただ一方で、僕はジャンル知識的には貧弱で、XSS, SQL Injectionといった基礎的なものはできるけどDOM Clobberingとかは知らない。
問題を解ける時間の中で、そういったCTFに慣れた人は当然知っている知識を学んでから解くのはパズル(ひらめきを得るために試行錯誤する時間)が削られるのであまり良くない。
というわけで、一旦基礎っぽいところからWebでよく出るものを調べていくことにした。ただ読むだけだと今までと変わらないので、攻撃が刺さる環境を作ってみるのもセットにする。
- 詳解セキュリティコンテスト
- 読んだことあるけど復習
- portswigger
- SatoooonさんのScrapbox
この辺を読んで、パズル要素なしでコードを書いていくことにする。
例えばOS Command Injectionだったら本当に http://localhost:3000/cmd?=ls
みたいなので攻撃できちゃうみたいな感じ。
あと、多分色々なありふれた題材に触ってパズルがないか頭を捻るやつをやった方がいいのだろうと感じた。例えばJavaScriptのreplace関数のようにRegexが使える環境とか、コマンドラインのようにGlobが使える環境とか。
前回の記録 と似た結論になっちゃった。