ikepyonのだめ人間日記

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

ディレクトリトラバーサルの検出

ちとディレクトリトラバーサルの検出方法を検討していて、よさげなのを思いついたので、忘れないようにメモ。
あくまでメモなので、他人が理解できなくても関知しないw

1. 存在すると考えられるファイル(例えば、../../../../../etc/passwd)と絶対に存在しないファイルの相対パス(../../../../../etc/hgoeiuwh)をそれぞれ送信
2. レスポンスのタグ構造が異なれば、存在すると考えられるファイルが読み込めたと想定できるので、脆弱性ありと考えられる->処理終了
レスポンスのタグ構造が同じ場合、以下の二つの場合が考えられる。
  ・両方とも、ファイルが読めないor書き込めないというエラーである(脆弱性なし)
  ・片一方は、ファイルのフォーマットが違うor書き込み件が無い、もう一方はファイルが存在しないというエラーである(脆弱性あり)
3. レスポンスのタグ構造が同じ場合、次の2つのデータを送信し、そのレスポンスが同じかどうかを判断する。
  例えば./etc/passwdと../../../../../etc/passwd
  ・レスポンスが同じ=両方ともエラーが発生(ともにアクセスできないから)=脆弱性なし
  ・レスポンスが異なる=前者はエラー(ファイルが存在しないし)、後者は(読み込みできたけどエラー)
    =脆弱性あり

とまあ、こんな感じ。
うまくこれで検出できるかなぁ?