ikepyonのだめ人間日記

セキュリティに関することを書いていく予定。

これも悪用厳禁。

ディレクトリトラバーサル

SQLインジェクションに引き続き、これも検出するのが難しかったりする。
まあ、方法としてはこんな感じでどうだろう?

実際に存在するファイルへの相対パス表示をデータとして入力する。ディレクトリトラバーサルが有効であれば、ファイルは存在するのだから、「ファイルが存在しない」というエラーはでないはず。逆に無効であれば、「ファイルが存在しない」というエラーが発生するはずである。
当然文字列は固定でないので、これを機械的に見つけ出すのは不可能である。

そこで、SQLインジェクションと同じように考える。
今度は実際に存在しないようなディレクトリ配下にあるファイルへの相対パス表示をデータとして入力する。ディレクトリトラバーサルが有効、無効にかかわらずこの場合は「ファイルが存在しない」というエラーになるはずである。
この二つの結果を比較して同じであれば、脆弱性がなさそうであるといえるし、異なれば脆弱性がありそうといえそうである。

さて、本当にこれでうまくいくのか?
実はこれではうまくいかないケースがある。Webアプリケーション内で入力ファイルのファイルフォーマットチェックを行っていて、かつ「ファイルが存在しない」というエラーと同じエラーメッセージであった場合はこの方法では判断できない。
でも、この場合ってブラックボックステストではどうやっても分からないと思う。
おっよく考えたらこれって脆弱性ないことにならんか?ただ、チェックする側からすると問題があるかないかはわからないという結果しかえられんか(実在するファイルのつもりが実際には存在しない可能性があるから、まあ適切に選べばたぶんこんなことは起こらないだろうけど)。


しかし、意外と機械的にWebアプリの脆弱性も発見できそうだ。うーん応答が一意じゃないからって考えやめるのもアレだなぁ。なかなかパズルっぽくて面白いし。さすがに、権限上昇とかは無理かなぁ?何を持って権限があるかないか判断は難しいし。