第8回詳解セキュリティコンテスト輪読会の記録
今回は p.189 - p.203 が範囲。内容はSSTI。dockerでスッと環境が立ち上がるのであまり詰まりポイントや疑問ポイントがなかった。
10章
MRO Method Resolution Order
Pythonのメソッド呼び出しは親を探しに行く。解決の仕方は C3線型化というアルゴリズムが使われている。 参考: 論文から学ぶC3 Linearization
hitchhike
p.197の python3 globals-example.py
の結果を見るとファイル名も入っていることが分かる( codes/SSTI/globals-example.py
の部分)
この挙動を一部題材とした問題がSECCON ctf4b 2022で出題されている 参考: ctf4b_2022_satoki_writeups
今回の挙動とは関係ないが、PythonのPAGER関連でhitchhike4bの元ネタになったhitchhikeという問題がSECCON CTF 2021で出題されている 参考: hitchhike
参考になりそう
CTFのWebセキュリティにおけるSSTIまとめ はまやんさんいつもありがとうございますという気持ちに
特に話題になった点
- flaskでconfigに環境変数を仕込んでgolfができる 参考: SSTI golf
config.update(key = value)
でconfig にデータを永続化できる
- 最近はGoが多い気がする?
- Client-Side Template Injectionの話
- どうやってエスケープしたらいいのだろう?実務ではフレームワークを使うのでDOMPurifyみたいなのを使ってXSS対策をする機会はまず訪れない。
_dangerouslysetinnerhtml
がReactでは有名。zennのCLIもこれ使ってMarkdownの内容を出力していたはずなので、Zennで見つけたXSSとmarkdown-it が刺さったのかな?(本番環境で dangerously… を使っているかは不明)
- flaskってエスケープどうやるの
render_template
もrender_template_string
もXSS対策のエスケープをデフォルトで行うが、{{ }}
に関しては何もしないので普通にレンダリングされてしまう。これをやめたい時はどうすれば…?(分からなかったので未解決)
curlのオプション
なんと vvv
オプションがある 参考: StackOverflow