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拡張機能を動的にロードするために使用されます。通常、C/C++で書かれたPHP拡張機能は、PHPの機能を拡張します。攻撃者は、dl
関数が無効にされていないことに気付いた場合、システムコマンドを実行するためのカスタムPHP拡張機能を作成することに決定します。
攻撃者が取った手順:
PHPバージョンの特定:
攻撃者は、スクリプト(
<?php echo 'PHP Version is '.PHP_VERSION; ?>
)を使用してPHPバージョンを特定します。
PHPソースの取得:
ローカルPHPセットアップ:
特定のPHPバージョンをシステムに展開してインストールします。
拡張機能の作成:
PHP拡張機能の作成を学習し、PHPソースコードを調査します。
ext/standard/exec.c
にあるexec関数の機能を複製することに焦点を当てます。
カスタム拡張機能のコンパイルに関する注意事項:
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
は、modulesサブディレクトリに配置されます。
クリーンアップ:
コンパイル後に
make clean
とphpize --clean
を実行します。
被害者ホストにアップロードして実行:
バージョンの互換性:
攻撃者と被害者のシステム間でPHP APIバージョンが一致していることを確認します。
拡張機能のロード:
相対パスを使用するか、スクリプトを使用して制限を回避するために
dl
関数を使用します。
スクリプトの実行:
攻撃者は
bypass.so
とPHPスクリプトを被害者のサーバーにアップロードします。スクリプトは
dl_local
関数を使用してbypass.so
を動的にロードし、cmd
クエリパラメータを介して渡されたコマンドでbypass_exec
を呼び出します。
コマンドの実行:
攻撃者は、次のようにアクセスすることでコマンドを実行できます:
http://www.example.com/script.php?cmd=<command>
この詳細な手順では、dl
関数を悪用してシステムコマンドを実行するためのPHP拡張機能を作成および展開するプロセスを説明しており、このセキュリティ違反を防ぐために理想的には無効にすべきdl
関数を悪用しています。
Last updated