ホームページ  >  記事  >  バックエンド開発  >  .user.ini ファイルによって形成された PHP バックドア

.user.ini ファイルによって形成された PHP バックドア

WBOY
WBOYオリジナル
2016-06-13 12:09:57879ブラウズ

.user.ini ファイルで構成される PHP バックドア
http://drops.wooyun.org/tips/3424

0x00 背景
多くの学生がこれを軽蔑の目で見て、これはすでに:

.htaccess ファイルで構成された PHP バックドア

次に、新しいものを作成しましょう: .user.ini。 .htaccess よりも広く使用されており、nginx/apache/IIS に関係なく、fastcgi で実行されている php であればこの方法を使用できます。すべての nginx サーバーは fpm/fastcgi を使用し、すべての IIS php5.3 以降は fastcgi/cgi を使用し、Win 環境の Apache も fcgi を使用します。制限のある .htaccess とは異なり、非常に幅広いと言えます。

0x01 .user.ini
では、.user.ini とは何でしょうか?

これは php.ini で始まる必要があります。 php.ini は PHP のデフォルト設定ファイルであり、多くの PHP 設定が含まれています。これらの設定は、PHP_INI_SYSTEM、PHP_INI_PERDIR、PHP_INI_ALL、PHP_INI_USER のいくつかのタイプに分かれています。 ここで参照できます: http://php.net/manual/zh/ini.list.php これらのモードの違いは何ですか?公式の説明を見てください:


ここに画像の説明を入力してください

PHP_INI_USER モードの構成項目は、ini_set() 関数またはレジストリで設定できると記載されていますを選択し、.user.ini に設定します。 ここで .user.ini と記載されていますが、これはどのような設定ファイルなのでしょうか?公式ドキュメントでは次のように説明されています:

メインの php.ini に加えて、PHP は、実行された PHP ファイルが配置されているディレクトリから Web ルートまでの各ディレクトリ内の INI ファイルもスキャンします。ディレクトリ ($_SERVER['DOCUMENT_ROOT'] で指定)。実行中の PHP ファイルが Web ルート ディレクトリの外にある場合、そのディレクトリのみがスキャンされます。

.user.ini スタイルの INI ファイルでは、PHP_INI_PERDIR および PHP_INI_USER モードの INI 設定のみが認識されます。

ここで、.user.ini は実際にはユーザーが「カスタマイズ」できる php.ini であることが非常に明確です。カスタマイズできる設定は、「PHP_INI_PERDIR、PHP_INI_USER」モードの設定です。 (上記の表に記載されていない PHP_INI_PERDIR も .user.ini で設定できます)

実際には、PHP_INI_SYSTEM 以外のモード (PHP_INI_ALL を含む) も .user.ini を通じて設定できます。

また、php.ini とは異なり、.user.ini は動的にロードできる ini ファイルです。つまり、.user.ini を変更した後、サーバー ミドルウェアを再起動する必要はありません。再ロードされるまで、user_ini.cache_ttl で設定された時間 (デフォルトは 300 秒) を待つだけで済みます。

その後、php.ini の設定項目を確認しましたが、残念ながら、 disable_functions と extension_dir 、enable_dl を含む、わずかに機密性の高い設定項目がすべて PHP_INI_SYSTEM モードになっていることがわかりました。 、など。 ただし、.user.ini ファイルを使用すると、「バックドア」を簡単に構築できます。

Php 構成項目には 2 つの興味深い項目があります (下の図の 1 番目と 4 番目):

ここに画像の説明を入力

auto_append_file、auto_prepend_file、クリックして表示意味を確認してください:

ここに画像の説明を入力します

ファイルを指定し、ファイルの前に require() 関数を呼び出すのと同様に、実行するファイルの前にそのファイルを自動的に含めます。 Auto_append_file も似ていますが、ファイルの後に含まれます。 使用方法は非常に簡単で、.user.ini に直接記述するだけです。

auto_prepend_file=01.gif
01.gif はインクルードされるファイルです。

したがって、.user.ini を使用すると、すべての PHP ファイルに特定のファイルを「自動的に」簡単に含めることができます。このファイルは、通常の PHP ファイルまたは文を含む Web シェルにすることができます。

テストしてください。IIS6.0 Fastcgi PHP5.3 と nginx fpm php5.3 でそれぞれテストしました。 このディレクトリには、.user.ini、Web シェルを含む 01.gif、および通常の PHP ファイル echo.php が含まれています:

ここに画像の説明を入力してください

ここに画像の説明を入力してください

echo にアクセスしてください.php を使用してバックドアを確認します:

ここに画像の説明を入力

Nginx でも同様:

ここに画像の説明を入力

ここに画像の説明を入力

それでは、不器用に考えてみますが、この姿勢はどのような状況で使用できるのでしょうか? たとえば、特定の Web サイトで .php ファイルのアップロードが制限されている場合は、.user.ini をアップロードしてからイメージ ホースをアップロードし、それらを getshell に含めることができます。ただし、前提として、.user.ini を含むフォルダーに通常の php ファイルが存在する必要があり、そうでない場合は含めることはできません。 別の例として、バックドアを非表示にしたいだけの場合は、この方法が最も便利です。

0x02 参照:
http://php.net/manual/zh/ini.list.php
http://php.net/manual/zh/configuration.changes.modes 。 php
http://php.net/manual/zh/configuration.file.per-user.php
http://php.net/manual/zh/configuration.changes.php

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