web-dev-qa-db-ja.com

PHPファイルアップロードの脆弱性

クライアントのWebポータルのセキュリティを評価していますが、脆弱性を発見しました。

ファイルのアップロードを処理する関数を見つけました。これは管理者のみが使用することを想定していますが、実際の関数は直接呼び出すことができ、authをチェックしません。とにかく、ここに条件があります:

Uploadは2つの引数(言います)、ID(intでなければなりません。intでない場合は、コードを壊してアップロードしません)、ファイルオブジェクトを受け取ります。

ファイルがアップロードされると、pathinfo['extension']を使用してファイルの拡張子をチェックします。拡張子が次のいずれかである場合:"php, php3, php4, phps, php5, php6, phtml, html, htm, py, pl, sh"

アップロードが中断されます。

それ以外の場合は、すべてのチェックに合格し、ファイルを次の場所に配置することを意味します:/uploads/$ID.$EXT

追伸POST/GET/COOKIE/...で "%00"(正規表現を使用)が見つかった場合、POST/GETデータ全体(php:// inputを使用)を読み取り、接続全体を切断します。

つまり、3つのチェックを行います。

  • php:// inputを読み取り、%00を検索することによるPOST/GETの%00
  • $ ID int
  • ファイルの拡張子。"php, php3, php4, phps, php5, php6, phtml, html, htm, py, pl, sh"と同じにすることはできません

それは脆弱性ですか?テストをバイパスして損傷を与えることはできますか? RCE?

追伸これはLinuxサーバーです。

2
GMX Rider

彼らが%00を検索したときの値が何であるかわかりません。 (つまり、PHPの本当に古いバージョンではファイル名が切り捨てられていると思いますか?)

すべてのリクエストをPHPに送信するようにウェブサーバーが構成されている場合は、代替拡張機能(.html)を使用して、そのようにコードを実行することができます。 PHP実行しているファイル拡張子の実行のみを許可するように注意深く設定している場合は、他のスクリプト言語がインストールされているかどうかを検討します(例:mod_python)。

サーバー上のRCEに関係なく、サイトをホストしているのと同じオリジンにHTMLコンテンツをアップロードできる場合、ほぼ確実にXSSベクトルがあります...

1
David