PHP3 safe_mode 失效漏洞


Posted in PHP onOctober 09, 2006

受影响的系统:  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 相关文章推荐
操作Oracle的php类
Oct 09 PHP
谈PHP生成静态页面分析 模板+缓存+写文件
Aug 17 PHP
php设计模式 Composite (组合模式)
Jun 26 PHP
PHP的范围解析操作符(::)的含义分析说明
Jul 03 PHP
10条PHP高级技巧[修正版]
Aug 02 PHP
gd库图片下载类实现下载网页所有图片的php代码
Aug 20 PHP
多个PHP中文字符串截取函数
Nov 12 PHP
php实现购物车功能(上)
Jul 23 PHP
自定义min版smarty模板引擎MinSmarty.class.php文件及用法
May 20 PHP
php中curl和soap方式请求服务超时问题的解决
Jun 11 PHP
PHP使用mongoclient简单操作mongodb数据库示例
Feb 08 PHP
浅谈PHP各环境下的伪静态配置
Mar 13 PHP
vBulletin HACK----关于排版的两个HACK
Oct 09 #PHP
PHP+APACHE实现用户论证的方法
Oct 09 #PHP
从C/C++迁移到PHP——判断字符类型的函数
Oct 09 #PHP
PHP实现图片简单上传
Oct 09 #PHP
在线增减.htpasswd内的用户
Oct 09 #PHP
将OICQ数据转成MYSQL数据
Oct 09 #PHP
PHP中一个控制字符串输出的函数
Oct 09 #PHP
You might like
smtp邮件发送一例
2006/10/09 PHP
隐藏X-Space个人空间下方版权方法隐藏X-Space个人空间标题隐藏X-Space个人空间管理版权方法
2007/02/22 PHP
ajax php传递和接收变量实现思路及代码
2012/12/19 PHP
php配置php-fpm启动参数及配置详解
2013/11/04 PHP
PHP多维数组指定多字段排序的示例代码
2018/05/16 PHP
php微信公众号开发之秒杀
2018/10/20 PHP
在JQuery dialog里的服务器控件 事件失效问题
2010/12/08 Javascript
元素的内联事件处理函数的特殊作用域在各浏览器中存在差异
2011/01/12 Javascript
jquery如何通过name名称获取当前name的value值
2013/12/20 Javascript
jquery设置按钮停顿3秒不可用
2014/03/07 Javascript
jQuery中的pushStack实现原理和应用实例
2015/02/03 Javascript
JS实现IE状态栏文字缩放效果代码
2015/10/24 Javascript
jQuery Validate让普通按钮触发表单验证的方法
2016/12/15 Javascript
正则中的回溯定义与用法分析【JS与java实现】
2016/12/27 Javascript
JS使用ActiveXObject实现用户提交表单时屏蔽敏感词功能
2017/06/20 Javascript
jquery.validate表单验证插件使用详解
2017/06/21 jQuery
select自定义小三角样式代码(实用总结)
2017/08/18 Javascript
js匿名函数使用&传参(实例)
2017/09/08 Javascript
Vue.js项目模板搭建图文教程
2017/09/20 Javascript
Vue组件的使用及个人理解与介绍
2019/02/09 Javascript
JavaScript实现的弹出遮罩层特效经典示例【基于jQuery】
2019/07/10 jQuery
Element的el-tree控件后台数据结构的生成以及方法的抽取
2020/03/05 Javascript
jquery自定义组件实例详解
2020/12/31 jQuery
Python远程桌面协议RDPY安装使用介绍
2015/04/15 Python
在Mac OS系统上安装Python的Pillow库的教程
2015/11/20 Python
浅谈python中np.array的shape( ,)与( ,1)的区别
2018/06/04 Python
python 中文件输入输出及os模块对文件系统的操作方法
2018/08/27 Python
英国家电直销:Appliances Direct
2016/09/22 全球购物
TUMI马来西亚官方网站:国际领先的高品质商旅箱包品牌
2018/04/26 全球购物
FILA德国官方网站:来自意大利的体育和街头服饰品牌
2019/07/19 全球购物
英国运动风奢侈品购物网站:Maison De Fashion
2020/08/28 全球购物
JPA的特点
2014/10/25 面试题
文史专业毕业生自荐信
2013/11/17 职场文书
工程专业毕业生自荐信范文
2013/12/25 职场文书
2014年元旦促销活动方案
2014/02/22 职场文书
党的群众路线教育实践方案
2014/05/11 职场文书