ikepyonの日記

2004-12-01Webアプリケーション検査

[]

SQLインジェクションに引き続き、これも検出するのが難しかったりする。

まあ、方法としてはこんな感じでどうだろう?

実際に存在するファイルへの相対パス表示をデータとして入力する。ディレクトリトラバーサルが有効であれば、ファイルは存在するのだから、「ファイルが存在しない」というエラーはでないはず。逆に無効であれば、「ファイルが存在しない」というエラーが発生するはずである。

当然文字列は固定でないので、これを機械的に見つけ出すのは不可能である。

そこで、SQLインジェクションと同じように考える。

今度は実際に存在しないようなディレクトリ配下にあるファイルへの相対パス表示をデータとして入力する。ディレクトリトラバーサルが有効、無効にかかわらずこの場合は「ファイルが存在しない」というエラーになるはずである。

この二つの結果を比較して同じであれば、脆弱性がなさそうであるといえるし、異なれば脆弱性がありそうといえそうである。

さて、本当にこれでうまくいくのか?

実はこれではうまくいかないケースがある。Webアプリケーション内で入力ファイルファイルフォーマットチェックを行っていて、かつ「ファイルが存在しない」というエラーと同じエラーメッセージであった場合はこの方法では判断できない。

でも、この場合ってブラックボックステストではどうやっても分からないと思う。

おっよく考えたらこれって脆弱性ないことにならんか?ただ、チェックする側からすると問題があるかないかはわからないという結果しかえられんか(実在するファイルのつもりが実際には存在しない可能性があるから、まあ適切に選べばたぶんこんなことは起こらないだろうけど)。