第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_templaterender_template_string もXSS対策のエスケープをデフォルトで行うが、 {{ }} に関しては何もしないので普通にレンダリングされてしまう。これをやめたい時はどうすれば…?(分からなかったので未解決)

curlのオプション

なんと vvv オプションがある 参考: StackOverflow