Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

coinsLT#0 tkbctf3 miocatができるまで

884 views

Published on

coinsLT#0で発表したもの。tkbctf3においてWeb250として出題された"miocat"に関する発表。
.NET Frameworkでの文字列比較におけるロケールの扱いの仕様を題材にしたものだったが、実装の甘さや.NET/Monoの挙動の違いにより非常に簡単な問題になってしまった。その原因などを紹介する。

Published in: Technology
  • Be the first to comment

coinsLT#0 tkbctf3 miocatができるまで

  1. 1. ! tkbctf3 miocatができるまで あるいは.NET FrameworkがWindows向けであることを(今更)確信するに至るまで Mei Akizuru (@maytheplic)
  2. 2. もくじ • 自己紹介 • そもそもCTFってなに • “miocat”の概略 • “miocat”では何が起きたのか そしてどうなったのか • まとめ 自己紹介
  3. 3. もくじ • 自己紹介 • そもそもCTF • “miocat” • “miocat”では何が起きたのか そしてどうなったのか • まとめ 自己紹介
  4. 4. • 秋弦めい (Mei Akizuru) ↓家族です • @maytheplic / @autchord • coins11AC • RubyとかC#とか触ります • 最近F#とかやりたい機運 • 自然言語処理(したい)マン • ☂小傘ちゃんかわいい☂ ここになにかあった
  5. 5. • 秋弦めい (Mei Akizuru) ↓家族です • @maytheplic / @autchord • coins11AC • RubyとかC#とか触ります • 最近F#とかやりたい機運 • 自然言語処理(したい)マン • ☂小傘ちゃんかわいい☂
  6. 6. • 秋弦めい (Mei Akizuru) • @maytheplic / @autchord • coins11AC • RubyとかC#とか触ります • 最近F#とかやりたい機運 • 自然言語処理(したい)マン • ☂小傘ちゃんかわいい☂ ↓小傘です ここに小傘ちゃんがいた
  7. 7. もくじ • 自己紹介 • そもそもCTFってなに • “miocat”の概略 • “miocat”では何が起きたのか そしてどうなったのか • まとめ そもそもCTFってなに?
  8. 8. もくじ • 自己紹介 • そもそもCTF • “miocat” • “miocat”では何が起きたのか そしてどうなったのか • まとめ そもそもCTFってなに?
  9. 9. 弟です 嘘です
  10. 10. CTF: Capture The Flag
  11. 11. CTF: Capture The Flag • コンピュータセキュリティに関する技術を競う • バイナリと(解析的な意味で)お友達になったり パケットと(解析的な意味で)お友達になったり SQLと(インジェクション的な意味で)お友達になれます (※あくまで一例です) • 攻撃の手法を知ることで防御の仕方を学ぶ
  12. 12. もくじ • 自己紹介 • そもそもCTFってなに • “miocat”の概略 • “miocat”では何が起きたのか そしてどうなったのか • まとめ “miocat”の概略
  13. 13. もくじ • 自己紹介 • そもそもCTF • “miocat” • “miocat”では何が起きたのか そしてどうなったのか • まとめ “miocat”の概略
  14. 14. miocat • 「みおきゃっと」と読みます •        のWeb 250点問題 • 某筑波大生が生み出した伝説の 授業支援アプリケーションにちなんで命名 • けいおんキャラの中では澪ちゃんがいいです 黒髪ロングは正義だよ、いいね? ちなみに元ネタ、githubで公開されててビビった
  15. 15. どんな問題? (1) • 指示されたURLを見に行くと謎のフォームがある • 謎のフォームにURLを入れると そのURLの内容を取得して表示する • localeというパラメータを受け付ける • localeを指定すると そのlocaleの元で指定されたURLの内容を取得
  16. 16. どんな問題? (2) • フォームに”file://hoge/…”とか入れても弾かれる • 内部で”FILE:”で始まるかチェックしている このチェックがロケール依存 • “locale=tr-TR”として”file://...“とすると アクセスが通る(!) • あとは/etc/passwdとか読んでください
  17. 17. もくじ • 自己紹介 • そもそもCTFってなに • “miocat”の概略 • “miocat”では何が起きたのか そしてどうなったのか • まとめ “miocat”では何が起きたのか そしてどうなったのか
  18. 18. もくじ • 自己紹介 • そもそもCTF • “miocat” • “miocat”では何が起きたのか そしてどうなったのか • まとめ “miocat”では何が起きたのか そしてどうなったのか
  19. 19. スコアサーバーを眺めて 私は思った なんか、解かれるのさすがに早すぎない?
  20. 20. リクエストの内容を見て 私は思った なんか、意図と異なる方法で解かれている気がする
  21. 21. まぁ、今から問題変えるわけにもいかないし…… そして放置された
  22. 22. 実際に何が起こったか ここから先はtkbctf3が終わった後の話
  23. 23. !!?!? tkbctf3 Write-up - kusano_kの日記 http://d.hatena.ne.jp/kusano_k/20140505/1399302285
  24. 24. ただの ディレクトリトラバーサルに なってる!!!!! これで250点はあまりにもボーナス問題である……
  25. 25. 原因 • 受け取ったアドレスをそのまま WebClient.DownloadStringに渡していた (これは半ば意図的ではある) • DownloadStringが`http://../…` という形式のURLを受け付けて それを`file://http://../…`と見なしてしまう • そしてそのローカルファイルを返してしまう • 本番ではmiocatをMonoランタイムで動かしていた
  26. 26. 犯人はGetFullPath? • Path.GetFullPath(String)は名前の通りのメソッド • DownloadStringが呼び出す • URLとしての解析に失敗した場合に呼ぶ • `http://../hoge`は不正なURL
  27. 27. 犯人はGetFullPath? • GetFullPathに”http://../../mof/nya”を渡すと…… • .NETでは失敗する (URI formats are not supported.) • Monoでは成功する(!?)
  28. 28. Mono vs. .NET • .NET FrameworkとMonoで挙動が違っていた • .NET Frameworkは`http://../../etc/passwd`を ファイルパスとして見なさない (URI形式として認識して例外を投げる) • Monoは`http://../../etc/passwd`を 妥当なファイルパスとして見なす
  29. 29. 結果…… • `http://../../etc/passwd`は `file://http://../../etc/passwd`になり • カレントディレクトリを基準にフルパスになり • /home/miocat/http://../../etc/passwd • /home/etc/passwd • `../`の数によっては無事`/etc/passwd`に 辿り着いてしまうのでした 完
  30. 30. そんなわけで .NET Frameworkと挙動が違うじゃんかよー!! ……と私はバグレポートを投げたのでした
  31. 31. バグレポート Bug 19603 ‒ Path.GetFullPath returns the full path for URI https://bugzilla.xamarin.com/show_bug.cgi?id=19603
  32. 32. 返事が来たあと状態がRESOLVED INVALIDになってた
  33. 33. 返事を簡単に訳してみた “http://test.com”はUnixでは正しいファイル名だからだ。 これは.NETとかいうUnixのことをあまり考えてないブツを使ってる ことから来る問題だ。だからその問題 (ディレクトリトラバーサルが起こるかもしれない等)には 自分のコードで対処する必要がある。
  34. 34. うーん……
  35. 35. ぐうの音も出ねえ!!
  36. 36. もくじ • 自己紹介 • そもそもCTFってなに • “miocat”の概略 • “miocat”では何が起きたのか そしてどうなったのか • まとめ まとめ
  37. 37. もくじ • 自己紹介 • そもそもCTF • “miocat” • “miocat”では何が起きたのか そしてどうなったのか • まとめ まとめ
  38. 38. .NETとMonoの差異 • 特にディレクトリ操作、パス操作は WindowsとUnixでだいぶ異なるので気を付ける • Mono on Windowsでも挙動はMono • 「WindowsとUnix」ではないので注意
  39. 39. Webアプリとして • ユーザーの入力をそのまま受け付けるな • 当たり前だけど忘れがちですね • 時にWAFが上手くやってくれたりするけど
  40. 40. CTF(の運営)的に • 問題のレビューはちゃんとやれ • 時間を取ってやれ • 問題の完成が問題公開直前なのは論外だ 本当にすいませんでした……
  41. 41. ˙꒳˙最後に˙꒳˙
  42. 42. ここに遊戯がいた ルールとマナーを守って 楽しくデュエルCTFしよう!!

×