ホームページ >バックエンド開発 >PHPチュートリアル >一般的な PHP の脆弱性について パート 2: 一般的な封じ込めの脆弱性

一般的な PHP の脆弱性について パート 2: 一般的な封じ込めの脆弱性

WBOY
WBOYオリジナル
2016-06-23 09:09:341013ブラウズ

インクルージョンは一般に LFI と RFI、つまりローカル ファイル インクルードとリモート ファイル インクルードに分けられます

LFI

LFI の場合、多くの制限に .php で終わるサフィックスが含まれるため、Include ($a .'. php') たとえば。

したがって、画像の馬を含めたい場合は、次の .php

  1. 00 の切り詰めを切り詰める必要があります。 gpc オフ && php

  2. 長いファイル名の切り捨て。とにかくこれで成功することはほとんどありません。

  3. 文字セット変換による切り捨て。これを含めても基本的には役に立ちません。

また、サフィックスが .php である必要があるという cms の制限もあります。たとえば、次の単純なコード

$include_file=$_GET[include_file];if ( isset( $include_file ) && strtolower( substr( $include_file, -4 ) ) == ".php" )        {                    require( $include_file );        }

は、渡された の最後の 4 文字をインターセプトし、それが「.php」であるかどうかを判断します。 「.php」の場合は含まれます。ここでは zip (または phar) プロトコルを使用できます (もちろん、これはラテレインから学びました、笑)。

まず新しい 1.php を作成し、その中に phpinfo を書き込み、

それから .zip に圧縮し、zip の名前を yu.jpg に変更します。

次に、この .jpg をアップロードして次の内容を含めます:

写真をアップロードする場所が見つからない一部の LFI のために、ログや環境変数などを含む LFI に写真をアップロードする方法に関するヒントを投稿している人もたくさんいます。 、ここではこれ以上は言いません。

RFI

次に RFI について話しましょう。

RFI が利用可能であれば、それが最も便利です。リモート ファイル、php://input データ、さまざまな疑似プロトコルが含まれます。

しかし、RFI の最大の制限は、allow_url_include が必要であり、「変数または定数の前にパスが定義されていない」ことであることは誰もが知っています。

そして、Allow_url_include はデフォルトでオフになっているため、allow_url_include がオンであっても、「変数の前にパスがない」または「定数」であっても、これは RFI の欠陥です。

ここでは、allow_url_include がオフの場合でも rfi できるテクニックを紹介しますが、成功率はあまり高くありません。

まず、php.ini のallow_url_include を見てください:

; Whether to allow include/require to open URLs (like http:// or ftp://) as files.allow_url_include = Off

翻訳すると、http://、ftp://、その他のプロトコルなどの URL を含めることが許可されることを意味します。オフの場合、そのようなプロトコルを含めることは絶対に許可されません。

ここで最初にテストします:

<?phpinclude($_GET[yu]); 

まず、allow_url_include と &allow_url_fopen が両方ともオンになっている場合

RFI が成功しました。

この場合、allow_url_include がオンになり、allow_url_fopen がオフになります

リモート ファイルの直接インクルードは失敗します。今回は擬似プロトコルを使ってみましょう。

またRFIに成功しました。

allow_url_include &&allow_url_fopen がオフの場合。

疑似プロトコルが失敗しました。

ファイルを含める方法:

URL ファイル アクセスはサーバー設定で無効になっており、含めることが許可されていないことを示します。

しかし、その昔、星の外に実行ディレクトリが存在せず、リモート呼び出し cmd を使用して権限を昇格し続けた時代をまだ覚えている人も多いはずです。

それは共有ファイルを使用し、それらを地球外のホストで実行します。

それでは、ここで試してみましょう:

共有ファイルが正常に組み込まれました。これはローカルでのみテストされ、リモートではテストされません。ただし445なので基本的に失敗する可能性があります。

原文に基づいて簡単な編集と修正を加えた、http://drops.wooyun.org/papers/4544 から転載。

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