disable_functions bypass - dl function
重要な注意:
dl
はPHP拡張をロードするために使用できるPHP関数です。この関数が無効でない場合、disable_functions
をバイパスして任意のコマンドを実行するために悪用される可能性があります。
ただし、いくつかの厳しい制限があります:
dl
関数は環境に存在し、無効でない必要がありますPHP拡張はサーバーが使用しているのと同じメジャーバージョン(PHP APIバージョン)でコンパイルされている必要があります(この情報はphpinfoの出力で確認できます)
PHP拡張は**
extension_dir
ディレクティブで定義されたディレクトリに配置されている必要があります**(これもphpinfoの出力で確認できます)。攻撃者がサーバーを悪用しようとする場合、このディレクトリに書き込みアクセスを持つことは非常に考えにくいため、この要件はおそらくこの技術を悪用するのを防ぐでしょう。
これらの要件を満たす場合は、投稿を読み続けてください https://antichat.com/threads/70763/ でdisable_functions
をバイパスする方法を学びます。以下は要約です:
dl関数は、スクリプト実行中にPHP拡張を動的にロードするために使用されます。PHP拡張は通常C/C++で書かれており、PHPの機能を強化します。攻撃者は、dl
関数が無効でないことに気づくと、システムコマンドを実行するためのカスタムPHP拡張を作成することを決定します。
攻撃者が取ったステップ:
PHPバージョンの特定:
攻撃者はスクリプト(
<?php echo 'PHP Version is '.PHP_VERSION; ?>
)を使用してPHPバージョンを特定します。
PHPソースの取得:
ローカルPHPセットアップ:
特定のPHPバージョンを自分のシステムに抽出してインストールします。
拡張の作成:
カスタム拡張のコンパイルに関する注意事項:
ZEND_MODULE_API_NO:
bypass.c
のZEND_MODULE_API_NO
は、現在のZend Extension Buildと一致する必要があります。これは次のコマンドで取得できます:
PHP_FUNCTIONの修正:
最近のPHPバージョン(5、7、8)では、
PHP_FUNCTION(bypass_exec)
の調整が必要な場合があります。提供されたコードスニペットはこの修正の詳細を示しています。
カスタム拡張ファイル:
bypass.c:
カスタム拡張のコア機能を実装します。
php_bypass.h:
拡張のプロパティを定義するヘッダーファイル。
config.m4:
phpize
によってカスタム拡張のビルド環境を構成するために使用されます。
拡張のビルド:
コンパイルコマンド:
phpize
、./configure
、およびmake
を使用して拡張をコンパイルします。結果として得られる
bypass.so
は、モジュールのサブディレクトリに配置されます。
クリーンアップ:
コンパイル後に
make clean
とphpize --clean
を実行します。
被害者ホストへのアップロードと実行:
バージョンの互換性:
攻撃者と被害者のシステム間でPHP APIバージョンが一致していることを確認します。
拡張のロード:
dl
関数を利用し、相対パスやスクリプトを使用してプロセスを自動化することで制限を回避します。
スクリプトの実行:
攻撃者は
bypass.so
とPHPスクリプトを被害者のサーバーにアップロードします。スクリプトは
dl_local
関数を使用してbypass.so
を動的にロードし、cmd
クエリパラメータを介して渡されたコマンドでbypass_exec
を呼び出します。
コマンドの実行:
攻撃者は次のURLにアクセスすることでコマンドを実行できます:
http://www.example.com/script.php?cmd=<command>
この詳細な手順は、dl
関数を悪用してシステムコマンドを実行するためのPHP拡張を作成し、展開するプロセスを概説しています。この関数は理想的には無効にされるべきであり、そのようなセキュリティ侵害を防ぐべきです。
Last updated