ファイル名遮断脆弱性の原理分析

1866 ワード

ファイル名遮断脆弱性の原理分析
By HelloWeb 2017-3-7以下のPHPプログラム(例1)では、ファイル名が操作される脆弱性があり、そのコードは以下の通りである.


例1:ファイル名が操作されるPHPプログラム
例1の基本プログラムロジックは、ユーザが入力したファイル名に対応するファイル接尾辞がPHPであるファイルも含まれ、ファイルの現在のディレクトリの下にPHPファイルがa.phpである場合、コードは以下の通りである.
");
?>

また、このディレクトリの下にはsecretというファイルも含まれている.txtファイルには、This is a secret file.
例1のプログラムロジックに従って、URLを入力すると、http://127.0.0.1/test/t1.php?name=aを選択すると、出力結果はOK!The right file.
攻撃者にとって、この脆弱性によってsecretを読み取ることが現在望ましい.txtの情報ですが、このファイルはPHPプログラムではありません.目標を達成するには、ファイル名を利用して脆弱性を遮断します.
1つ目の方法:%00
%00は文字列の末尾を表し、変数$nameの最後が%00である場合、変数$filenameの」を表す.php」は切断されます.
URL:127.0と入力場合.0.1/test/t1.php?name=secret.txt%00の場合、入力結果は:Thisis a secret file.明らかに、ファイルの内容が読み出された.攻撃者は入力ファイルをすべて制御し、接尾辞を受けない」と述べた.php」の影響です.
もちろん、%00カット方式はPHP 5のみである.3以前、GPCがオフの場合に成功した.本例はPHP 5である.2.17バージョンでテストに合格しました.
第2の方法:英語の句点と反スラッシュの切断はwindows 7システムの下で、226個の英語の句点より長いと切断効果が現れ、テストコードは以下の通りである.


同様に句点スラッシュをテストすることができ、Windows 7環境では句点スラッシュを113組に組み合わせることができます.
注意:この方式はPHP 5である.3以降のバージョンでは修復されています.本例はPHP 5である.2.17バージョンでテストに合格しました.
第三中方式:疑問符切断(?)
疑問符カット・ホールは、リモート・ファイルに含まれる場合です.PHPのプロファイルで、リモートファイルを開くと、「allow_url_include=On」というライセンスが含まれます.テストコードは次のとおりです.


入力されたファイル名にURLが含まれている場合、疑問符の切り捨てが発生し、Webサービスが疑問符を要求パラメータと見なしているため、PHPバージョンに制限されません.テストPOC:http://127.0.0.1/test/t1.php?name=http://127.0.0.1/test/secret.txt?を選択するとsecretが開きます.txtのファイル内容.本試験例はPHP 5である.5.38バージョンでテストに合格しました.