Skip to content

Archives

  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年9月

Categories

  • カテゴリーなし
Trend RepositoryArticles and guides
Articles

shell.phpを使ってブラウザからコマンドラインアクセス

On 1月 5, 2022 by admin

時には、ブラウザからシェルアクセスしたいことがあります。 これは、セキュリティ設定が許可している場合、PHP を使用して実現することができます。 私はこの機能を shell.php で実装しました (Github で入手可能)。 上のスクリーンショットでは、ブラウザからのシェルアクセスがどのように動作するかを見ています。 このスクリプトでは、マウスを使ってファイルのアップロード、ダウンロード、表示、編集、削除、ディレクトリの zip および解凍、サーバー上のディレクトリのトラバースができますが、キーボードを使ってカスタム コマンドを入力することも可能です。 また、マシンが適切にファイアウォールで保護されていることを確認してください (ポート 80 はインターネットから到達可能であってはなりません)。 悪意のある目的には使用しないでください!

  • Known issues
  • PHP シェル実行コマンド
  • open_basedir
  • Suhosin が見つからない?
  • 結論

Known issues

スクリプトが動作しない場合、スクリプトが依存している PHP “passthru” 関数が無効になっていることが原因である可能性があります。 無効な PHP 関数をリストアップするには、次の PHP コードを実行してください:

var_dump(ini_get('safe_mode'));var_dump(explode(',',ini_get('disable_functions')));var_dump(explode(',',ini_get('suhosin.executor.func.blacklist')));

既製の Ubuntu 14.04 では次のように出力されます:

bool(false)Array( => pcntl_alarm => pcntl_fork => pcntl_waitpid => pcntl_wait => pcntl_wifexited => pcntl_wifstopped => pcntl_wifsignaled => pcntl_wexitstatus => pcntl_wtermsig => pcntl_wstopsig => pcntl_signal => pcntl_signal_dispatch => pcntl_get_last_error => pcntl_strerror => pcntl_sigprocmask => pcntl_sigwaitinfo => pcntl_sigtimedwait => pcntl_exec => pcntl_getpriority => pcntl_setpriority =>)Array( =>)

PHP シェル実行コマンド

もし passthru() で実行できないなら、他のいくつかのコマンドも試してみることにします。 以下のコマンドは類似している。

  • exec() コマンド出力の最終行を返す
  • passthru() コマンド出力を直接ブラウザに渡す
  • system() コマンド出力を直接ブラウザに渡して最終行を返す
  • shell_exec() コマンド出力を返す
  • popen() コマンドのプロセスへの読み取りまたは書き込みパイプを開く

  • proc_open() popen() に似ているが、より高度な制御
  • pcntl_exec() プログラムの実行

open_basedir

もし上記のスクリプトが怖いと感じたら、その場合は、以下のようにします。 このような場合、サーバー上でこのプログラムが実行されないようにすることができます。 セーフモード (非推奨) を有効にする、”disable_functions” php.ini 変数および/または Suhosin の関数実行ブラックリストを使用することでこれを行うことができます。

PHP インストールのセキュリティに関してよく書かれた記事を見つけたので、チェックしてみてください! 実行可能な関数を制限する以外に、彼らは “open_basedir” php.ini 設定変数も推奨しています。 これは、PHPがアクセスできるファイルを指定されたディレクトリツリーに制限するものです。

また、”/tmp” ディレクトリを “nodev”, “nosuid”, “noexec” フラグで保護するのも良いアイデアです。

Suhosin が見つからない?

Note that “php5-suhosin” package (a PHP security extension) is no longer installed or available on Debian-based systems. セキュリティ上の改善の一部は、最新の PHP バージョン (5.4 および 5.5) に取り入れられています。 Ubuntu 14.04 (PHP 5.5.9) に (Github から) Suhosin をインストールしたい場合は、このチュートリアルに従います。

LWN.net で Suhosin 削除に関する論争についてもっと読むことができます。 これは、PHP コードをユーザーコンテキスト (例: ユーザー “maurits”) で実行し、ユーザー “www-data” としては実行しないことを意味します。 これを実現する方法を説明した素晴らしい記事を見つけました。 最も簡単な解決策は、

sudo apt-get install libapache2-mpm-itk

を実行し、すべての「VirtualHost」設定に「AssignUserID」ディレクティブを追加することです。 これは最も安全な解決策ではないかもしれないことに注意してください。

結論

既知のセキュリティホールの悪用を防ぐために、常に PHP を最新のバージョンに更新し、パッチを当てる必要があります。 disable_functions”、”open_basedir”、Suhosin、ファイルシステムフラグなどのツールは、攻撃対象領域を減らし、未知のセキュリティホールの利用を防止します。 これらのツールを使って、階層化されたセキュリティ戦略を実装することができます。 また、特権分離も忘れてはいけません。

Share

コメントを残す コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

アーカイブ

  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年9月

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org
  • DeutschDeutsch
  • NederlandsNederlands
  • SvenskaSvenska
  • DanskDansk
  • EspañolEspañol
  • FrançaisFrançais
  • PortuguêsPortuguês
  • ItalianoItaliano
  • RomânăRomână
  • PolskiPolski
  • ČeštinaČeština
  • MagyarMagyar
  • SuomiSuomi
  • 日本語日本語

Copyright Trend Repository 2022 | Theme by ThemeinProgress | Proudly powered by WordPress