脆弱性の詳細:
この脆弱性は、PHP で非常に一般的に使用される関数 move_uploaded_files に存在します。開発者はアップロードされたファイルを移動するために常にこの関数を使用します。この関数は、アップロードされたファイルが正当なファイルであるかどうか (HTTP 経由でアップロードされたかどうか) を確認します。 post メカニズム)、それが合法的なファイルである場合、指定されたディレクトリに配置する必要があります。
例:
move_uploaded_file ( string $filename , string $destination ) ここでの問題は、ファイル名に null 文字が挿入される可能性があることです (この脆弱性は、CVE-2006-7243 など、以前に何度も修正されています)。 Null 文字の挿入に悪用されると、攻撃者は任意のファイルをアップロードし、リモートでコードが実行される脆弱性などを引き起こす可能性があります。
私はこの例を説明するために DVWA を使用しています。DVWA の最高レベルの質問は、さまざまな理由から簡単には合格できません。これは、より安全なファイル アップロード コンポーネントを開発する方法を開発者に伝えることを目的としています。この例を見てみましょう:
コード スニペット:
$uploaded_name = $_FILES['uploaded']['name'];
$uploaded_ext = substr($uploaded_name, strrpos($uploaded_name, '.') + 1); $uploaded_size = $_FILES['uploaded']['size'];
if (($uploaded_ext == "jpg" || $uploaded_ext == "JPG" || $uploaded_ext == "jpeg" || $uploaded_ext == "JPEG") && ($uploaded_size $html .= '';
$html .= '画像はアップロードされませんでした。';
$html .= ''; }
else {
$html .= $target_path . ' 正常にアップロードされました!';
.
.
このコードのコード XSCH、XSSなどの脆弱性はいくつかありますが、PHP 5.3.1からはnull文字の問題が修正されているため、RCEなどの重大な脆弱性はありません。ここでの問題は、DVWA がユーザーによってアップロードされた name パラメーターを move_upload_file() 関数に渡すことです。したがって、PHP によって実行される操作は次のようになります:
move_uploaded_file($_FILES['name']['tmp_name']," /file.phpx00.jpg"); これにより、file.phpx00.jpg というファイルが作成されるはずですが、実際に作成されるファイルは file.php です。
このようにして、コード内のサフィックス名の検証がバイパスされ、GD ライブラリ内の他の多くの関数 (getimagesize()、imagecreatefromjpeg() など) にもこの問題があることがわかります。 、この例を見ることができます。
お使いのマシンの PHP バージョンが 5.4.39、5.5.x ~ 5.5.23、または 5.6.x ~ 5.6.7 の場合は、ファイル名に x00 文字が含まれているかどうかを確認することで、この記事で説明されている問題を解決できます。
セキュリティに関する推奨事項 お使いのマシンにこの脆弱性が存在する場合は、ユーザーがアップロードした name パラメーターの値を使用するのではなく、ランダムな文字列を使用してファイル名を変更することをお勧めします。