ディレクトリトラバーサルの検出
ちとディレクトリトラバーサルの検出方法を検討していて、よさげなのを思いついたので、忘れないようにメモ。
あくまでメモなので、他人が理解できなくても関知しないw
1. 存在すると考えられるファイル(例えば、../../../../../etc/passwd)と絶対に存在しないファイルの相対パス(../../../../../etc/hgoeiuwh)をそれぞれ送信
2. レスポンスのタグ構造が異なれば、存在すると考えられるファイルが読み込めたと想定できるので、脆弱性ありと考えられる->処理終了
レスポンスのタグ構造が同じ場合、以下の二つの場合が考えられる。
・両方とも、ファイルが読めないor書き込めないというエラーである(脆弱性なし)
・片一方は、ファイルのフォーマットが違うor書き込み件が無い、もう一方はファイルが存在しないというエラーである(脆弱性あり)
3. レスポンスのタグ構造が同じ場合、次の2つのデータを送信し、そのレスポンスが同じかどうかを判断する。
例えば./etc/passwdと../../../../../etc/passwd
・レスポンスが同じ=両方ともエラーが発生(ともにアクセスできないから)=脆弱性なし
・レスポンスが異なる=前者はエラー(ファイルが存在しないし)、後者は(読み込みできたけどエラー)
=脆弱性あり
とまあ、こんな感じ。
うまくこれで検出できるかなぁ?