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

of

coinsLT#0 tkbctf3 miocatができるまで Slide 1 coinsLT#0 tkbctf3 miocatができるまで Slide 2 coinsLT#0 tkbctf3 miocatができるまで Slide 3 coinsLT#0 tkbctf3 miocatができるまで Slide 4 coinsLT#0 tkbctf3 miocatができるまで Slide 5 coinsLT#0 tkbctf3 miocatができるまで Slide 6 coinsLT#0 tkbctf3 miocatができるまで Slide 7 coinsLT#0 tkbctf3 miocatができるまで Slide 8 coinsLT#0 tkbctf3 miocatができるまで Slide 9 coinsLT#0 tkbctf3 miocatができるまで Slide 10 coinsLT#0 tkbctf3 miocatができるまで Slide 11 coinsLT#0 tkbctf3 miocatができるまで Slide 12 coinsLT#0 tkbctf3 miocatができるまで Slide 13 coinsLT#0 tkbctf3 miocatができるまで Slide 14 coinsLT#0 tkbctf3 miocatができるまで Slide 15 coinsLT#0 tkbctf3 miocatができるまで Slide 16 coinsLT#0 tkbctf3 miocatができるまで Slide 17 coinsLT#0 tkbctf3 miocatができるまで Slide 18 coinsLT#0 tkbctf3 miocatができるまで Slide 19 coinsLT#0 tkbctf3 miocatができるまで Slide 20 coinsLT#0 tkbctf3 miocatができるまで Slide 21 coinsLT#0 tkbctf3 miocatができるまで Slide 22 coinsLT#0 tkbctf3 miocatができるまで Slide 23 coinsLT#0 tkbctf3 miocatができるまで Slide 24 coinsLT#0 tkbctf3 miocatができるまで Slide 25 coinsLT#0 tkbctf3 miocatができるまで Slide 26 coinsLT#0 tkbctf3 miocatができるまで Slide 27 coinsLT#0 tkbctf3 miocatができるまで Slide 28 coinsLT#0 tkbctf3 miocatができるまで Slide 29 coinsLT#0 tkbctf3 miocatができるまで Slide 30 coinsLT#0 tkbctf3 miocatができるまで Slide 31 coinsLT#0 tkbctf3 miocatができるまで Slide 32 coinsLT#0 tkbctf3 miocatができるまで Slide 33 coinsLT#0 tkbctf3 miocatができるまで Slide 34 coinsLT#0 tkbctf3 miocatができるまで Slide 35 coinsLT#0 tkbctf3 miocatができるまで Slide 36 coinsLT#0 tkbctf3 miocatができるまで Slide 37 coinsLT#0 tkbctf3 miocatができるまで Slide 38 coinsLT#0 tkbctf3 miocatができるまで Slide 39 coinsLT#0 tkbctf3 miocatができるまで Slide 40 coinsLT#0 tkbctf3 miocatができるまで Slide 41 coinsLT#0 tkbctf3 miocatができるまで Slide 42
Upcoming SlideShare
Terms
Next
Download to read offline and view in fullscreen.

1 Like

Share

Download to read offline

coinsLT#0 tkbctf3 miocatができるまで

Download to read offline

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

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

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しよう!!
  • mktakuya

    Dec. 9, 2014

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

Views

Total views

1,260

On Slideshare

0

From embeds

0

Number of embeds

499

Actions

Downloads

2

Shares

0

Comments

0

Likes

1

×